RFR: 8317453: NMT: Performance benchmarks are needed to measure speed and memory
Stefan Karlsson
stefank at openjdk.org
Tue Apr 22 14:01:50 UTC 2025
On Tue, 25 Feb 2025 21:52:48 GMT, Gerard Ziemski <gziemski at openjdk.org> wrote:
> Please review this addition of an internal benchmark, mostly of interest to those working with NMT.
>
> This benchmark allows us to record a pattern of memory allocation operations (i.e. `malloc`, `realloc` and `free`) as well as the virtual memory allocations (i.e. `VirtualMemoryTracker::add_reserved_region`, etc.) and record those into files.
>
> Later we can use that recording to _play back_ the pattern with different code or settings to compare the performance.
>
> The goal of this benchmark is for anyone working on NMT to be able to measure and prove whether their improvement helps or regresses the performance.
>
> ### To use it:
>
> To record pattern of allocations of memory calls:
>
> `NMTRecordMemoryAllocations=0x7FFFFFFF ./build/macosx-aarch64-server-release/xcode/build/jdk/bin/java -XX:+UnlockDiagnosticVMOptions -XX:NativeMemoryTracking=summary -jar build/macosx-aarch64-server-release/images/jdk/demo/jfc/J2Ddemo/J2Ddemo.jar`
>
> OR to record pattern of allocations of virtual memory calls:
>
> `NMTRecordVirtualMemoryAllocations=0x7FFFFFFF ./build/macosx-aarch64-server-release/xcode/build/jdk/bin/java -XX:+UnlockDiagnosticVMOptions -XX:NativeMemoryTracking=summary -jar build/macosx-aarch64-server-release/images/jdk/demo/jfc/J2Ddemo/J2Ddemo.jar`
>
> This will result in the file:
> - hs_nmt_pid22770_allocs_record.log (is the chronological record of the the desired operations)
> OR
> - hs_nmt_pid22770_virtual_allocs_record.log (is the chronological record of the desired operations)
>
> And 2 additional files:
> - hs_nmt_pid22770_info_record.log (is the record of default NMT memory overhead and the NMT state)
> - hs_nmt_pid22770_threads_record.log (is the record of thread names that can be retrieved later when processing)
>
>
> then to actually run the benchmark:
>
> NMTBenchmarkRecordedPID=22770 ./build/macosx-aarch64-server-release/xcode/build/jdk/bin/java -XX:+UnlockDiagnosticVMOptions -XX:NativeMemoryTracking=summary
>
> ### Usage:
>
> See the issue for more details and the design document.
When benchmarking malloc the multi-threaded performance is important. If you take a lock while malloc:ing you probably don't get any significant performance degradation a single-threaded run, but if you malloc from multiple threads you will likely see a significant performance / latency degradation. Has this been considered when thinking about the performance of NMT and this tool?
-------------
PR Comment: https://git.openjdk.org/jdk/pull/23786#issuecomment-2821430602
More information about the hotspot-dev
mailing list