Integrated: 8266821: G1: Prefetch cards during merge heap roots phase

Thomas Schatzl tschatzl at openjdk.java.net
Thu May 13 11:26:03 UTC 2021


On Tue, 11 May 2021 13:06:59 GMT, Thomas Schatzl <tschatzl at openjdk.org> wrote:

> Hi all,
> 
>   can I have reviews for this change that improves performance of the merge heap roots phase in g1?
> 
> Merging heap roots (remembered sets and log buffers) into the card table for later scanning to a large degree constitutes random accesses to the card table.
> 
> Putting a small prefetch queue between calculating the card table address and inspecting the given card table value decreases merge remembered set time by 20-30% and merge log buffers time by 40-50% (on x64. AArch64 shows similar if not better improvements).
> 
> Applications not having a significant amount of either remembered sets or log buffers do not show significant difference. 
> 
> The cache size constants for arm64 and x86 were derived from testing with a benchmark creating lots of references and log buffers (i.e. BigRamTester). Could not do any corresponding tests on other architectures due to lack of machines.
> 
> Testing: tier1-3, lots of tier1-tier8 runs with [JDK-8017163](https://bugs.openjdk.java.net/browse/JDK-8017163).

This pull request has now been integrated.

Changeset: a564f2cb
Author:    Thomas Schatzl <tschatzl at openjdk.org>
URL:       https://git.openjdk.java.net/jdk/commit/a564f2cbd59d40df21278c5f0d785e2375b310e4
Stats:     330 lines in 9 files changed: 304 ins; 4 del; 22 mod

8266821: G1: Prefetch cards during merge heap roots phase

Reviewed-by: kbarrett, iwalulya

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

PR: https://git.openjdk.java.net/jdk/pull/3975


More information about the hotspot-dev mailing list