Skip to content

Add NUMA directory with Java server-side case study#42

Open
dianef wants to merge 1 commit into
intel:mainfrom
dianef:add-numa-content
Open

Add NUMA directory with Java server-side case study#42
dianef wants to merge 1 commit into
intel:mainfrom
dianef:add-numa-content

Conversation

@dianef

@dianef dianef commented Jul 16, 2026

Copy link
Copy Markdown

This PR adds content requested at Board of Advisors in Fall 2025. Compares performance of a Java workload that has been configured correctly to match the underlying NUMA configuration against one that ignores the NUMA configuration. It also creates a NUMA section where additional NUMA content can be added by future contributors.

@adgubrud adgubrud left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This article was easy to read and informative! Just a couple of small things to fix.

numactl --cpunodebind=2 --membind=2 java -Xms24g -Xmx24g ...
```

This approach provides even stricter control over NUMA placement and may yield incremental improvements over the configuration-only approach demonstrated here.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm assuming since you don't disclose a specific extra uplift when using numactl, you don't have this data? If you do, I think it would be good to provide a ballpark estimate of how much extra performance this can yield.


### Memory Subsystem Latency Improvements

Performance monitoring data collected using Intel's performance counter monitoring tool during both runs reveals significant improvements in memory subsystem latencies for the NUMA-optimized configuration:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would suggest giving a couple of pointers to potential performance monitors. I think PerfSpect and VTune would be good callouts.


### Microarchitectural Efficiency: Top-Down Analysis

Intel's Top-Down Microarchitecture Analysis Method (TMA) provides insight into how CPU cycles are spent across different execution pipeline categories. Comparing the two configurations reveals improved microarchitectural efficiency:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another article recently included this link to explain TMA, which I think would be appropriate to add here as well.

https://www.intel.com/content/www/us/en/docs/vtune-profiler/cookbook/2023-0/top-down-microarchitecture-analysis-method.html

- Contention for memory controllers on oversubscribed NUMA nodes
- Cache coherency traffic across NUMA boundaries

The NUMA-optimized 3-JVM configuration removes these barriers, allowing cores to remain active and productive. The 90% utilization demonstrates that the system is now able to keep cores busy doing useful work rather than stalling in wait states.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
The NUMA-optimized 3-JVM configuration removes these barriers, allowing cores to remain active and productive. The 90% utilization demonstrates that the system is now able to keep cores busy doing useful work rather than stalling in wait states.
The NUMA-optimized 3-JVM configuration removes these barriers, allowing cores to remain active and productive. The 90% CPU utilization demonstrates that the system is now able to keep cores busy doing useful work rather than stalling in wait states.

- **3-JVM configuration:** 90% average CPU utilization
- **Improvement:** +14 percentage points

This increase reveals that the 2-JVM configuration was leaving significant compute capacity untapped. The 76% utilization indicates cores were frequently idle—not because the workload was light, but because threads were **blocked waiting** for memory operations, likely due to:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
This increase reveals that the 2-JVM configuration was leaving significant compute capacity untapped. The 76% utilization indicates cores were frequently idle—not because the workload was light, but because threads were **blocked waiting** for memory operations, likely due to:
This increase reveals that the 2-JVM configuration was leaving significant compute capacity untapped. The 76% CPU utilization indicates cores were frequently idle—not because the workload was light, but because threads were **blocked waiting** for memory operations, likely due to:


- **Peak Bandwidth:** 572.8 GB/s
- **Minimum Latency:** 116.95 ns (local NUMA access)
- **Remote Latency:** 135-163 ns (40% penalty for cross-NUMA access)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- **Remote Latency:** 135-163 ns (40% penalty for cross-NUMA access)
- **Remote Latency:** 135-163 ns (15-40% penalty for cross-NUMA access)

Comment thread README.md
- [scikit-learn](software/scikit-learn/README.md)
- [MySQL & PostgreSQL](software/mysql-postgresql/README.md)
- [NUMA](software/NUMA/README.md)
- [Case Studies](software/NUMA/README.md)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you please create another README in the software/NUMA/case_studies directory and then update this link to that README? I think just a table of contents in this new README will be enough.

As it is, it just links to the NUMA readme, which could be cleaner from a user experience perspective.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants