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
 - [ ] Submit testing (still running)

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

Commit messages:
 - 8245543: Cgroups: Incorrect detection logic on some systems (still 
reproducible)

Changes: https://git.openjdk.java.net/jdk/pull/485/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=485&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8245543
  Stats: 89 lines in 4 files changed: 83 ins; 1 del; 5 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

Reply via email to