RFR: 8330071: GenShen: Allow old to expand again at end of each GC

Kelvin Nilsen kdnilsen at openjdk.org
Thu Apr 11 15:58:02 UTC 2024


On Thu, 11 Apr 2024 15:20:51 GMT, Kelvin Nilsen <kdnilsen at openjdk.org> wrote:

> This corrects errors in the implementations of max_size_for(OLD) and min_size_for(OLD).  These errors were preventing expansion of OLD in preparation for subsequent mixed-evacuation cycles.

It would appear that our existing CI performance pipeline tests are not sufficiently sensitive to failure to expand OLD when necessary to support mixed evacuations.  Here's a test that does show good sensitivity.

On existing master, the results are:

Customer Preparation Processing[100000]: P50(295) P95(448) P99(768) P99.9(58408) P99.99(351320) P99.999(414070) P100(424719)

[1145.223s][info   ][gc,stats       ] 12939 Completed GCs
[1145.223s][info   ][gc,stats       ] 12894 Successful Concurrent GCs (99.65%)
[1145.223s][info   ][gc,stats       ]    12 Completed Old GCs (0.09%)
[1145.223s][info   ][gc,stats       ]      96 mixed
[1145.223s][info   ][gc,stats       ]    30 Degenerated GCs (0.23%)
[1145.223s][info   ][gc,stats       ]     4 Full GCs (0.03%)

With this PR, I get:

Customer Preparation Processing[100000]: P50(293) P95(414) P99(484) P99.9(738) P99.99(4977) P99.999(103219) P100(113555)

[1145.299s][info   ][gc,stats    ]   844 Completed GCs
[1145.299s][info   ][gc,stats    ]   828 Successful Concurrent GCs (98.10%)
[1145.299s][info   ][gc,stats    ]    14 Completed Old GCs (1.66%)
[1145.299s][info   ][gc,stats    ]     238 mixed
[1145.299s][info   ][gc,stats    ]     2 Degenerated GCs (0.24%)
[1145.299s][info   ][gc,stats    ]     0 Full GCs (0.00%)

The test is Extremem based:

~/github/shenandoah.allow-old-to-expand-again/build/linux-x86_64-server-release/jdk/bin/java \
  -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -Xms3g -Xmx3g \
  -XX:+UseShenandoahGC \
  -XX:ShenandoahGCMode=generational -XX:+UnlockExperimentalVMOptions \
  -XX:-ShenandoahPacing -XX:+UsePerfData \
  -XX:ShenandoahGuaranteedYoungGCInterval=12000 \
  -Xlog:"gc*=info,ergo" \
  -XX:+UnlockDiagnosticVMOptions \
  -XX:-UseCompressedOops -XX:-UseCompressedClassPointers \
  -XX:+UnlockExperimentalVMOptions \
  -jar ~/github/heapothesys/Extremem/target/extremem-1.0-SNAPSHOT.jar \
  -dInitializationDelay=60s -dDictionarySize=400000 -dNumCustomers=350000 \
  -dNumProducts=12000 -dCustomerThreads=200 -dCustomerPeriod=2s -dCustomerThinkTime=1s \
  -dKeywordSearchCount=4 -dServerThreads=5 -dServerPeriod=1s -dProductNameLength=10 \
  -dBrowsingHistoryQueueCount=5 \
  -dSalesTransactionQueueCount=5 \
  -dProductDescriptionLength=64 -dProductReplacementPeriod=5s -dProductReplacementCount=3500 \
  -dCustomerReplacementPeriod=5s -dCustomerReplacementCount=4000 -dBrowsingExpiration=1m \
  -dPhasedUpdates=true \
  -dPhasedUpdateInterval=30s \
  -dSimulationDuration=18m -dResponseTimeMeasurements=100000

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

PR Comment: https://git.openjdk.org/shenandoah/pull/421#issuecomment-2050017928


More information about the shenandoah-dev mailing list