RFR: 8245543: Cgroups: Incorrect detection logic on some systems (still reproducible) [v3]
Severin Gehwolf
sgehwolf at openjdk.java.net
Mon Oct 5 10:16:49 UTC 2020
> An issue similar to [JDK-8239559](https://bugs.openjdk.java.net/browse/JDK-8239559) has been discovered. On the
> affected system, `/proc/self/mountinfo` contains a line such as this one:
>
> 35 26 0:26 / /sys/fs/cgroup/systemd rw,nosuid,nodev,noexec,relatime - cgroup systemd rw,name=systemd
>
>
> Note that `/proc/cgroups` looks like this:
>
> #subsys_name hierarchy num_cgroups enabled
> cpuset 0 1 1
> cpu 0 1 1
> cpuacct 0 1 1
> blkio 0 1 1
> memory 0 1 1
> devices 0 1 1
> freezer 0 1 1
> net_cls 0 1 1
> perf_event 0 1 1
> net_prio 0 1 1
> hugetlb 0 1 1
> pids 0 1 1
>
> This is in fact a cgroups v1 system with systemd put into a separate namespace via FS type `cgroup`. That mountinfo
> line confuses the cgroups version detection heuristic. It only looked whether or not there is **any** entry in
> mountinfo of FS-type `cgroup` . That's wrong. A better heuristic would be looking at controllers we care about: `cpu`,
> `cpuacct`, `memory`, `cpuset` for hotspot and some more for the Java side. The proposed fix on the hotspot side is to
> set `any_cgroup_mounts_found` to true only if one of those controllers show up in mountinfo. Otherwise, we know it's
> cgroup v2 due to the zero hierarchy ids. For the Java side the proposal is to add some parsing for mountinfo lines and
> look for `cgroup` FS-type lines which aren't also mounted purely for systemd.
> **Testing**
>
> - [x] Linux x86_64 container tests on cgroup v1 (fastdebug)
> - [x] Linux x86_64 container tests on cgroup v2 (fastdebug)
> - [x] Added regression test which fails prior the patch and passes after
> - [x] Submit testing
Severin Gehwolf has updated the pull request incrementally with one additional commit since the last revision:
Fix typo in comment
-------------
Changes:
- all: https://git.openjdk.java.net/jdk/pull/485/files
- new: https://git.openjdk.java.net/jdk/pull/485/files/6c4fadd1..d334ac60
Webrevs:
- full: https://webrevs.openjdk.java.net/?repo=jdk&pr=485&range=02
- incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=485&range=01-02
Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod
Patch: https://git.openjdk.java.net/jdk/pull/485.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/485/head:pull/485
PR: https://git.openjdk.java.net/jdk/pull/485
More information about the serviceability-dev
mailing list