RFR: 8370492: [Linux] Update cpu shares to cpu.weight mapping function [v2]

Severin Gehwolf sgehwolf at openjdk.org
Fri Nov 7 15:28:01 UTC 2025


> Please review this change to the Linux container detection code updating the mapping function of cg v2 to most recent runtimes' implementation. OCI has been standardized with cgroup v1 in mind and there is a mapping function in place - implemented by container runtimes such as `runc` or `crun` - which map the passed `--cpu-shares` value on the engine's `run` command to the internal cgroup v2 `cpu.weight` interface file's values.
> 
> For runtimes lower than 1.23 (crun) and 1.3.2 (runc) the mapping function was (where `y=<cpu.weight value>` and `x=<cpu-shares CLI value>`):
> 
> 
> f(x) = {(x - 2) \times 9999 + 1 \over 262142}
> 
> 
> This changed in `crun` >= 1.23 and `runc` >= 1.3.2 to:
> 
> 
> f(x)=10^{({{\log_{2}(x)}^2 \over 612} + {125 \over 612} \times \log_{2}(x) - {7 \over 34})}
> 
> 
> Therefore, we need to find the inverse of the new quadratic mapping function and use that over the inverse of the old mapping function. Since the input domain is `[2,262144]` for `--cpu-shares` mapping to `[1,10000]` for `cpu.weight` we can discount the negative exponent value as a possible solution.
> 
> Since there are production systems out there with those runtimes already I believe it's time to change the mapping function internal to the JDK to the new one in JDK 26. There is a chance that JDK 26 would run on old runtimes in a container using cgroup v2, resulting in wrong diagnostics. The chance of this happening will decrease over time.
> 
> Thoughts?
> 
> **Testing:**
> - [x] GHA
> - [x] `test/hotspot/jtreg/containers` and `test/jdk/jdk/internal/platform` on cgroup v1 (with an old runtime - code not affected) and on cgroup v2 with a new runtime. All tests passed.

Severin Gehwolf has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains five additional commits since the last revision:

 - Merge branch 'master' into jdk-8370492-fix-cpushares-mapping
 - Fix include
 - Add asserts/checks for input domain
 - Add regression test for jdk-8370492
 - 8370492: [Linux] Update cpu shares to cpu.weight mapping function

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/28157/files
  - new: https://git.openjdk.org/jdk/pull/28157/files/2866c0a7..464d162f

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=28157&range=01
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=28157&range=00-01

  Stats: 17030 lines in 439 files changed: 10578 ins; 4853 del; 1599 mod
  Patch: https://git.openjdk.org/jdk/pull/28157.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/28157/head:pull/28157

PR: https://git.openjdk.org/jdk/pull/28157


More information about the hotspot-runtime-dev mailing list