RFR: 8349988: Change cgroup version detection logic to not depend on /proc/cgroups [v5]

Jesse Glick duke at openjdk.org
Tue Jul 22 00:18:42 UTC 2025


On Tue, 1 Apr 2025 21:33:30 GMT, Thomas Fitzsimmons <duke at openjdk.org> wrote:

>> This pull request fixes https://bugs.openjdk.org/browse/JDK-8349988 and https://bugs.openjdk.org/browse/JDK-8347811.
>> 
>> I tested it with:
>> 
>> 
>> java -Xlog:os+container=trace -version
>> 
>> on:
>> 
>> `Red Hat Enterprise Linux 8 (cgroups v1 only)`:
>> _No change in behaviour_
>> 
>> `Fedora 41 (cgroups v2)`:
>> _More verbose output due to `/sys/fs/cgroup/cgroup.controllers` parsing:_
>> 
>> --- tt-old-f41.txt	2025-02-26 15:37:56.310738515 -0500
>> +++ tt-new-f41.txt	2025-02-26 15:37:56.601739407 -0500
>> @@ -1,7 +1,12 @@
>>  [trace][os,container] OSContainer::init: Initializing Container Support
>> -[debug][os,container] Detected optional pids controller entry in /proc/cgroups
>> -[debug][os,container] controller cpuset is not enabled
>> -                    ] 
>> +[debug][os,container] v2 controller cpuset is enabled and relevant
>> +[debug][os,container] v2 controller cpu is enabled and required
>> +[debug][os,container] v2 controller io is enabled but not relevant
>> +[debug][os,container] v2 controller memory is enabled and required
>> +[debug][os,container] v2 controller hugetlb is enabled but not relevant
>> +[debug][os,container] v2 controller pids is enabled and relevant
>> +[debug][os,container] v2 controller rdma is enabled but not relevant
>> +[debug][os,container] v2 controller misc is enabled but not relevant
>>  [debug][os,container] Detected cgroups v2 unified hierarchy
>>  [trace][os,container] Adjusting controller path for memory: /sys/fs/cgroup/user.slice/user-4215196.slice/user at 4215196.service/app.slice/app-org.gnome.Terminal.slice/vte-spawn-135086d6-2de4-4f2e-ad94-899b5eecaf83.scope
>>  [trace][os,container] Path to /memory.max is /sys/fs/cgroup/user.slice/user-4215196.slice/user at 4215196.service/app.slice/app-org.gnome.Terminal.slice/vte-spawn-135086d6-2de4-4f2e-ad94-899b5eecaf83.scope/memory.max
>> 
>> 
>> `Fedora 41 (custom kernel with cgroups v1 disabled)`:
>> _Fixes `cgroups v2` detection:_
>> 
>> --- tt-old-f41-custom-kernel.txt	2025-02-26 15:37:58.197744304 -0500
>> +++ tt-new-f41-custom-kernel.txt	2025-02-26 15:37:59.380747933 -0500
>> @@ -1,7 +1,63 @@
>>  [trace][os,container] OSContainer::init: Initializing Container Support
>> -[debug][os,container] Detected optional pids controller entry in /proc/cgroups
>> -[debug][os,container] controller cpuset is not enabled
>> -                    ] 
>> -[debug][os,container] controller memory is not enabled
>> -                    ] 
>> -[debug][os,container] One or more required controllers disabled at kernel level.
>> +[...
>
> Thomas Fitzsimmons 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 15 additional commits since the last revision:
> 
>  - Merge branch 'master' into cgroups-v2-version-check-and-controllers-parsing-1
>  - testCgroupv1SystemdOnly, testCgroupv1NoMounts: Use cgroupv1 fields
>  - Merge branch 'master' into cgroups-v2-version-check-and-controllers-parsing-1
>  - Replace literal tabs in procCgroupsCgroupsV1CpusetDisabledContent
>  - Detect cpuset-disabled condition during cgroups v1 /proc/cgroups parsing
>    
>    Remove from cgroups v1 branch incorrect log messages about cpuset
>    controller being optional.  Add test case for cgroups v1, cpuset
>    disabled.
>  - Improve !cgroups_v2_enabled branch comment
>  - Debug-log optional and disabled cgroups v2 controllers
>    
>    Do not log enabled controllers that are not relevant to the JDK.
>  - Move index declaration to scope in which it is used
>  - Remove empty string check during cgroup.controllers parsing
>  - Define ISSPACE_CHARS macro, use it in strsep call
>  - ... and 5 more: https://git.openjdk.org/jdk/compare/8c14eafa...b29d8694

In case anyone comes across this, I filed it as https://bugs.launchpad.net/ubuntu/+source/linux-meta-hwe-6.14/+bug/2117446

Effectiveness of patch confirmed on Ubuntu 24.04.2 HWE using Docker CE 28.3.2 by


git checkout 9c5ed23eac7470f56d498e9c4d3c51c2f80fd571^
bash configure --with-boot-jdk=$HOME/.sdkman/candidates/java/24-tem
make images
docker run -m 1GB --rm -v $(pwd)/build/linux-x86_64-server-release/images/jdk:/jdk ubuntu /jdk/bin/java '-Xlog:os*=trace' -XshowSettings:vm -XX:MaxRAMPercentage=50 -version
git checkout 9c5ed23eac7470f56d498e9c4d3c51c2f80fd571
make images
docker run -m 1GB --rm -v $(pwd)/build/linux-x86_64-server-release/images/jdk:/jdk ubuntu /jdk/bin/java '-Xlog:os*=trace' -XshowSettings:vm -XX:MaxRAMPercentage=50 -version


Before: shows


One or more required controllers disabled at kernel level.


and max heap size is ½ of physical RAM. After,


Memory Limit is: 1073741824


and max heap size is 512Mb as expected.

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

PR Comment: https://git.openjdk.org/jdk/pull/23811#issuecomment-3100042998


More information about the hotspot-dev mailing list