RFR: Load balance remset scan
Kelvin Nilsen
kdnilsen at openjdk.org
Fri Nov 18 22:06:24 UTC 2022
Prior to this change, the initial group of remembered set assignments was given to worker threads one entire region at a time. We found that with large region sizes (e.g. 16 MiB and above), this resulted in too much imbalance in the work performed by individual threads. A few threads assigned to scan 16 MiB regions with high density of "interesting pointers" were still scanning after all other worker threads finished their scanning efforts.
This change caps the maximum assignment size for worker threads at 4 MiB. This results in better distribution of efforts between multiple concurrent threads. With 13 worker threads and 16 MiB heap regions, we observe the following benefits on an Extremem workload (46_064 MiB heap size, 27_648 MiB new size):
Latency for customer preparation processing improved by 0.79% for P50, 2.26% for P95, 8.21% for p99, 28.17% for p99.9, 86.59% for p99.99, 86.77% for p99.999. The p100 response improved only slightly, by 1.99%.
Average time for concurrent remembered set marking scan improved by 1.92%. The average time for concurrent update refs time, which includes remembered set scanning, improved by 1.72%.
-------------
Commit messages:
- Fix whitespace and typos in comments
- Merge remote-tracking branch 'GitFarmBranch/smaller-remset-rebase' into load-balance-remset-scan
- Fix typo in comment
- Remove instrumentation
- Add detail to assertion failure message
- Fix calculation of adjustment to last ShenandoahRegionChunk group
- Fix handling of smaller heap regions and disable debug messages
- Increase size of largest ShenandoahRegionChunk
- Fix initialization of ShenandoahRegionChunkIterator
- Disable instrumentation
- ... and 3 more: https://git.openjdk.org/shenandoah/compare/419a3a2a...9704b348
Changes: https://git.openjdk.org/shenandoah/pull/173/files
Webrev: https://webrevs.openjdk.org/?repo=shenandoah&pr=173&range=00
Stats: 150 lines in 4 files changed: 87 ins; 6 del; 57 mod
Patch: https://git.openjdk.org/shenandoah/pull/173.diff
Fetch: git fetch https://git.openjdk.org/shenandoah pull/173/head:pull/173
PR: https://git.openjdk.org/shenandoah/pull/173
More information about the shenandoah-dev
mailing list