RFR: 8307958: Metaspace verification is slow causing extreme class unloading times

Axel Boldt-Christmas aboldtch at openjdk.org
Mon May 22 14:30:05 UTC 2023


>From JBS:
>We see very long class unloading times with Generational ZGC in fastdebug builds. MacOS spindumps show that it is caused by Metaspace verification code.
>
>I think the main problem is that many of the verification operations are performed at every operation (add, remove, split, merge) and the individual operation verifies much more than a constant number of chunks. This seems to give a quadratic complexity which blows up if you don't class unload often enough.

The approach here is to resolve this by putting the verification behind the SOMETIMES macro. It is then possible to turn it of completely with `-XX:VerifyMetaspaceInterval=0` while still benefiting from some stochastic verification. 

The goal here is to have the calls to Verify unchanged. Leaving all explicit gtest verify and Universe::verify calls unaffected.  One gtest(`metaspace.test_overwriter_vm_assert`) had an implicit dependency on the `~MetaspaceArena` verification, so it was moved to `~MetaspaceTestArena` which now performs the verification explicitly.  It becomes somewhat weaker, it does not test that the destructor SOMETIMES verifies, but that if it verifies it would get caught. Hopefully this is alright.
The verification was also left unchanged when committing the memory. 

All SOMETIMES uses the same frequency, `VerifyMetaspaceInterval`. I looked at the possibility of adding weight to some of the call site, but it did not seem to be worth the complexity. 

Testing: GHA and Oracle CI (tier1-3 ongoing), various long running stress tests.

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

Commit messages:
 - Fix gtest
 - Verify SOMETIMES

Changes: https://git.openjdk.org/jdk/pull/14084/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=14084&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8307958
  Stats: 37 lines in 6 files changed: 5 ins; 0 del; 32 mod
  Patch: https://git.openjdk.org/jdk/pull/14084.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/14084/head:pull/14084

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


More information about the hotspot-runtime-dev mailing list