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

Evgeny Astigeevich eastigeevich at openjdk.org
Thu Dec 4 21:16:26 UTC 2025


On Wed, 3 Dec 2025 15:54:24 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
>
> src/hotspot/share/asm/codeBuffer.cpp line 371:
> 
>> 369:       !((oop_Relocation*)reloc)->oop_is_immediate()) {
>> 370:     _has_non_immediate_oops = true;
>> 371:   }
> 
> Honestly, this looks fragile? We can go into nmethods patching for some other reason, not for patching oops.
> 
> Also, we still might need to go and patch immediate oops? I see this:
> 
> 
>   // Instruct loadConP of x86_64.ad places oops in code that are not also
>   // listed in the oop section.
>   static bool mustIterateImmediateOopsInCode() { return true; }
> 
> 
> Is there a substantial loss is doing icache invalidation without checking for the existence of interesting oops? Do you have an idea how many methods this filters?

@shipilev 
Moving `ICacheInvalidationContext icic` to `nmethod::fix_oop_relocations` works. The fragile code is no more needed.

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

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


More information about the shenandoah-dev mailing list