RFR: 8350050: Shenandoah: Disable and purge allocation pacing support [v3]
Y. Srinivas Ramakrishna
ysr at openjdk.org
Tue Jul 22 21:21:08 UTC 2025
> Shenandoah's experimental "pacing" feature, currently defaulting to "on", and its set of suboption knobs, have been supported for several releases. The idea is that under increasing allocation rate graceful degradation in application latency is often more desirable to abruptly stalling mutators to collect the heap when the allocators outrun the collector, causing a concurrent mode failure. Unfortunately, our experience with this pacing feature is that it's difficult to easily control the suboption knobs and, for latency sensitive applications, customers often prefer abrupt failure to gradual degradation in latency at the cost of a drop in peak performance, and will almost always size their systems so as to avoid driving the collector into that state. We and, independently, many of our customers noticed that this feature extracted a performance penalty when enabled, and as a result the feature is disabled by default for most production deployments of Shenandoah. For Generational She
nandoah, the feature has always been off by default. Inside Amazon, the feature has defaulted to off for several releases.
>
> Removing support for this feature simplifies some of the allocation and GC control paths allowing further improvements to the allocation paths in the future. Graceful degradation of latency with increasing allocation throughput will be implemented separately using other mechanisms in the near future.
>
> We measured the impact of this feature on specjbb scores on x86, and found that there was a marked performance improvement comparing +ShenandoahPacing vs -ShenandoahPacing (+12% Shen, +25% GenShen). There was a further small performance improvement in the case of GenShen with the feature completely removed. Actual performance delta may vary depending on host size and isa.
>
>
> ### SpecJBB
> [Critical JOPS, relative scores (*previous default*, **new**), average of 5 runs, x64 only]
>
> Collector | Shenandoah | Generaltional Shenandoah |
> --------------------------|--------------------|----------------------------------|
> +ShenandoahPacing | *22.1* | 21.5 |
> -ShenandoahPacing | 24.8 | *26.9* |
> Feature deleted entirely | **24.4** | **27.6** |
>
> ### Testing:
> - SPECjbb
> - Code Pipeline Stress
> - Perf Dashboard
> -----...
Y. Srinivas Ramakrishna has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 18 commits:
- Merge branch 'master' into pacing
- Remove some dangling references and unused variables identified in the
code review.
- Fix some comments and user instructions / documentation that refer to
the now removed pacing feature.
- Merge branch 'master' into pacing
- Merge branch 'master' into pacing
- Merge branch 'master' into pacing
- Merge branch 'master' into pacing
- Merge branch 'master' into pacing
- Merge branch 'master' into pacing
- Merge branch 'master' into pacing
- ... and 8 more: https://git.openjdk.org/jdk/compare/ea6674fe...3fd09b94
-------------
Changes: https://git.openjdk.org/jdk/pull/24002/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=24002&range=02
Stats: 786 lines in 20 files changed: 0 ins; 779 del; 7 mod
Patch: https://git.openjdk.org/jdk/pull/24002.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/24002/head:pull/24002
PR: https://git.openjdk.org/jdk/pull/24002
More information about the hotspot-gc-dev
mailing list