Add NUMA directory with Java server-side case study#42
Conversation
adgubrud
left a comment
There was a problem hiding this comment.
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. |
There was a problem hiding this comment.
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: |
There was a problem hiding this comment.
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: |
There was a problem hiding this comment.
Another article recently included this link to explain TMA, which I think would be appropriate to add here as well.
| - 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. |
There was a problem hiding this comment.
| 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: |
There was a problem hiding this comment.
| 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) |
There was a problem hiding this comment.
| - **Remote Latency:** 135-163 ns (40% penalty for cross-NUMA access) | |
| - **Remote Latency:** 135-163 ns (15-40% penalty for cross-NUMA access) |
| - [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) |
There was a problem hiding this comment.
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.
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.