> Cgroup V1 subsustem fails to initialize mounted controllers properly in > certain cases, that may lead to controllers left undetected/inactive. We > observed the behavior in CloudFoundry deployments, it affects also host > systems. > > The relevant /proc/self/mountinfo line is > > > 2207 2196 0:43 > /system.slice/garden.service/garden/good/2f57368b-0eda-4e52-64d8-af5c > /sys/fs/cgroup/cpu,cpuacct ro,nosuid,nodev,noexec,relatime master:25 - cgroup > cgroup rw,cpu,cpuacct > > > /proc/self/cgroup: > > > 11:cpu,cpuacct:/system.slice/garden.service/garden/bad/2f57368b-0eda-4e52-64d8-af5c > > > Here, Java runs inside containerized process that is being moved cgroups due > to load balancing. > > Let's examine the condition at line 64 here > https://github.com/openjdk/jdk/blob/55a7cf14453b6cd1de91362927b2fa63cba400a1/src/hotspot/os/linux/cgroupV1Subsystem_linux.cpp#L59-L72 > It is always FALSE and the branch is never taken. The issue was spotted > earlier by @jerboaa in > [JDK-8288019](https://bugs.openjdk.org/browse/JDK-8288019). > > The original logic was intended to find the common prefix of `_root`and > `cgroup_path` and concatenate the remaining suffix to the `_mount_point` > (lines 67-68). That could lead to the following results: > > Example input > > _root = "/a" > cgroup_path = "/a/b" > _mount_point = "/sys/fs/cgroup/cpu,cpuacct" > > > result _path > > "/sys/fs/cgroup/cpu,cpuacct/b" > > > Here, cgroup_path comes from /proc/self/cgroup 3rd column. The man page > (https://man7.org/linux/man-pages/man7/cgroups.7.html#NOTES) for control > groups states: > > > ... > /proc/pid/cgroup (since Linux 2.6.24) > This file describes control groups to which the process > with the corresponding PID belongs. The displayed > information differs for cgroups version 1 and version 2 > hierarchies. > For each cgroup hierarchy of which the process is a > member, there is one entry containing three colon- > separated fields: > > hierarchy-ID:controller-list:cgroup-path > > For example: > > 5:cpuacct,cpu,cpuset:/daemons > ... > [3] This field contains the pathname of the control group > in the hierarchy to which the process belongs. This > pathname is relative to the mount point of the > hierarchy. > > > This explicitly states the "pathname is relative to the mount point of the > hierarchy". Hence, the correct result could have been > > > /sys/fs/cgroup/cpu,cpuacct/a/b > > > Howe...
Sergey Chernyshev has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 13 commits: - diverged after integration of JDK-8344177 # Conflicts: # src/java.base/linux/classes/jdk/internal/platform/CgroupUtil.java - update cgroup v1 in metrics - Apply suggestions from code review Co-authored-by: Severin Gehwolf <jerb...@gmail.com> - updated test (path is reduced) - updated test (path is reduced) - adjust path suffix in cgroup (v1) version specific code, when root != cgroup - Merge branch 'master' into JDK-8343191 - warn wenn ../ encountered, update path adjustment - Update src/hotspot/os/linux/cgroupV1Subsystem_linux.cpp Co-authored-by: Severin Gehwolf <jerb...@gmail.com> - Merge branch 'master' into JDK-8343191 - ... and 3 more: https://git.openjdk.org/jdk/compare/bd6d911c...2a7e9d82 ------------- Changes: https://git.openjdk.org/jdk/pull/21808/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=21808&range=08 Stats: 387 lines in 10 files changed: 345 ins; 4 del; 38 mod Patch: https://git.openjdk.org/jdk/pull/21808.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/21808/head:pull/21808 PR: https://git.openjdk.org/jdk/pull/21808