RFR: 8310031: Parallel: Implement better work distribution for large object arrays in old gen [v5]
Albert Mingkun Yang
ayang at openjdk.org
Wed Sep 13 19:33:40 UTC 2023
On Tue, 12 Sep 2023 16:21:44 GMT, Richard Reingruber <rrich at openjdk.org> wrote:
> BL: either 2.4s or 4.9s
The variance seems too large, ~100% fluctuation. Unclear why.
I just attached a small program, which is essentially the same as `BigArrayInOldGenRR.java` except the larger array. (I also changed it to be fixed-work for easier comparison.)
Running `java -Xms3g -Xmx3g -XX:+UseParallelGC -XX:ParallelGCThreads=2 card_scan.java`:
## baseline
[0.003s][info][gc] Using Parallel
[2.397s][info][gc] GC(0) Pause Young (Allocation Failure) 1791M->1027M(2944M) 560.539ms
[3.718s][info][gc] GC(1) Pause Young (Allocation Failure) 1795M->1027M(2944M) 571.168ms
## new
[0.002s][info][gc] Using Parallel
[15.187s][info][gc] GC(0) Pause Young (Allocation Failure) 1791M->1027M(2944M) 13441.110ms
[29.356s][info][gc] GC(1) Pause Young (Allocation Failure) 1795M->1027M(2944M) 13418.047ms
That is ~20x overhead in gc-pause.
I also played with diff values of `ParallelGCThreads` and got the same observation as you: baseline becomes worse with more gc-workers and the proposed patch scales nicely.
I agree that the scalability issue on master should be addressed. However, the regression while using fewer gc-threads is too significant, IMO.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/14846#issuecomment-1718201435
More information about the hotspot-gc-dev
mailing list