RFR: 8370947: Mitigate Neoverse-N1 erratum 1542419 negative impact on GCs and JIT performance [v13]

Evgeny Astigeevich eastigeevich at openjdk.org
Wed Dec 3 18:48:32 UTC 2025


On Wed, 3 Dec 2025 16:10:55 GMT, Aleksey Shipilev <shade at openjdk.org> wrote:

>> Evgeny Astigeevich has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 19 commits:
>> 
>>  - Fix linux-cross-compile build aarch64
>>  - Merge branch 'master' into JDK-8370947
>>  - Remove trailing whitespaces
>>  - Add support of deferred icache invalidation to other GCs and JIT
>>  - Add UseDeferredICacheInvalidation to defer invalidation on CPU with hardware cache coherence
>>  - Add jtreg test
>>  - Fix linux-cross-compile aarch64 build
>>  - Fix regressions for Java methods without field accesses
>>  - Fix code style
>>  - Correct ifdef; Add dsb after ic
>>  - ... and 9 more: https://git.openjdk.org/jdk/compare/3d54a802...4b04496f
>
> test/micro/org/openjdk/bench/vm/gc/GCPatchingNmethodCost.java line 184:
> 
>> 182:     @Benchmark
>> 183:     @Warmup(iterations = 0)
>> 184:     @Measurement(iterations = 1)
> 
> Not sure what is the intent here. Maybe you wanted `@BenchmarkMode(OneShot)` instead?

The current algorithm:
- Create an object used in Java methods.
- Run the methods in the interpreter.
- Compile the methods.
- Make the object garbage collectable.
- Run GC (we measure this).

There are not many things to warm-up. And setting up everything for multiple iterations of GC runs might be expensive. Instead we use forks.

IMO, Yes it is `@BenchmarkMode(OneShot)`.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/28328#discussion_r2586236955


More information about the shenandoah-dev mailing list