RFR: 8293972: runtime/NMT/NMTInitializationTest.java#default_long-off failed with "Suspiciously long bucket chains in lookup table."

Gerard Ziemski gziemski at openjdk.org
Wed Jun 21 23:00:05 UTC 2023


We improve the has function, but using Mersenne prime (2^x - 1) i.e. 8191, which when combined with "modulo" operation, provides uniform bit distribution.

To help with testing this change to make sure we improve the hash function I collected `NMTPreInitAllocation` data on 3 platforms: macOS, Linux and Windows, using 100 runs of `test/hotspot/jtreg/runtime/NMT/NMTInitializationTest.java` and computed `stdev` as well as average `max chain`:


mac OS data:

 BEFORE total: max chain: 676, empties: 210892, ranges: 676, std_devs: 112.771
  AFTER total: max chain: 622, empties: 230762, ranges: 622, std_devs: 111.094
 BEFORE avg: max chain: 5.061, empties: 18.695, ranges: 5.061, std_devs: 0.010
  AFTER avg: max chain: 4.181, empties: 16.970, ranges: 4.161, std_devs: 0.009
	
Linux data:
 BEFORE total: max chain: 523, empties: 193174, ranges: 523, std_devs: 103.243
  AFTER total: max chain: 432, empties: 175347, ranges: 430, std_devs: 90.670
 BEFORE avg: max chain: 6.540, empties: 20.402, ranges: 6.540, std_devs: 0.011
  AFTER avg: max chain: 6.017, empties: 22.324, ranges: 6.017, std_devs: 0.011

Windows data:
 BEFORE total: max chain: 578, empties: 201224, ranges: 578, std_devs: 108.988
  AFTER total: max chain: 491, empties: 218653, ranges: 491, std_devs: 104.879
 BEFORE avg: max chain: 5.602, empties: 19.504, ranges: 5.602, std_devs: 0.011
  AFTER avg: max chain: 4.759, empties: 21.193, ranges: 4.759, std_devs: 0.010

Note: the lower the number, the better.
Note: the `stdedev` and `max chain` are the most important numbers here.

We also, mark output with PID to help identify which test process it is coming from as the attached log was very confusing to read.

Tested manually with `/Volumes/Work/tests/jtreg/jtreg/bin/jtreg -nr -va -jdk:./build/macosx-x86_64-server-fastdebug/images/jdk test/hotspot/jtreg/runtime/NMT/NMTInitializationTest.java` and `Mach5 hs-tier1,2,3,4,5
`

-------------

Commit messages:
 - remove tabs
 - mark output with PID to help identify where it comes from
 - use Mersenne prime and mod for uniform bit distribution of hash

Changes: https://git.openjdk.org/jdk/pull/14607/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=14607&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8293972
  Stats: 17 lines in 2 files changed: 7 ins; 1 del; 9 mod
  Patch: https://git.openjdk.org/jdk/pull/14607.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/14607/head:pull/14607

PR: https://git.openjdk.org/jdk/pull/14607


More information about the hotspot-runtime-dev mailing list