Integrated: 8261495: Shenandoah: reconsider update references memory ordering
Aleksey Shipilev
shade at openjdk.java.net
Wed Jun 30 13:35:07 UTC 2021
On Wed, 10 Feb 2021 09:52:11 GMT, Aleksey Shipilev <shade at openjdk.org> wrote:
> Shenandoah update heap references code uses default Atomic::cmpxchg to avoid races with mutator updates. Hotspot's default for atomic operations is memory_order_conservative, which emits two-way memory fences around the CASes at least on AArch64 and PPC64.
>
> This seems to be excessive for Shenandoah update references code, and "release" is enough. We do not seem to piggyback on update-references memory effects anywhere (in fact, if not for mutator, we would not even need a CAS). But, there is an interplay with concurrent evacuation and updates from self-healing.
>
> Average time goes down, the number of GC cycles go up, since the cycles are shorter. For example, `SPECjvm2008:compiler.sunflow`:
>
>
> # Before
> [172.931s][info][gc,stats] Concurrent Update Refs = 9.866 s (a = 60161 us)
> [283.225s][info][gc,stats] Concurrent Update Refs = 8.274 s (a = 57859 us)
> [232.514s][info][gc,stats] Concurrent Update Refs = 9.321 s (a = 58991 us)
> [215.495s][info][gc,stats] Concurrent Update Refs = 9.233 s (a = 58434 us)
> [217.557s][info][gc,stats] Concurrent Update Refs = 9.153 s (a = 58672 us)
>
> # After
> [169.752s][info][gc,stats] Concurrent Update Refs = 8.150 s (a = 49697 us)
> [168.798s][info][gc,stats] Concurrent Update Refs = 8.430 s (a = 51092 us)
> [166.353s][info][gc,stats] Concurrent Update Refs = 8.812 s (a = 54395 us)
> [236.542s][info][gc,stats] Concurrent Update Refs = 8.215 s (a = 51026 us)
> [214.006s][info][gc,stats] Concurrent Update Refs = 8.244 s (a = 52175 us)
>
>
> Additional testing:
> - [x] Linux x86_64 hotspot_gc_shenandoah
> - [x] Linux AArch64 hotspot_gc_shenandoah
> - [x] Linux AArch64 tier1 with Shenandoah
This pull request has now been integrated.
Changeset: a96012a7
Author: Aleksey Shipilev <shade at openjdk.org>
URL: https://git.openjdk.java.net/jdk/commit/a96012a7afce6678125d3fb537f2433642953315
Stats: 130 lines in 7 files changed: 93 ins; 15 del; 22 mod
8261495: Shenandoah: reconsider update references memory ordering
Reviewed-by: zgu, rkennke
-------------
PR: https://git.openjdk.java.net/jdk/pull/2498
More information about the hotspot-gc-dev
mailing list