RFR: 8230305: Cgroups v2: Container awareness
Severin Gehwolf
sgehwolf at redhat.com
Fri Oct 18 16:24:30 UTC 2019
On Tue, 2019-10-15 at 11:19 +0200, Severin Gehwolf wrote:
> Hi,
>
> Please review this update to the container detection code which adds
> cgroup version 2 support. Initial review of this started in [1]. Bob
> preferred one big patch and didn't like the other refactoring in
> os_linux so this has been dropped.
>
> This new patch includes both, the refactoring to move cgroup v1
> specific implementation out of osContainer_linux.{h,c}pp files[2] as
> well as updated detection code and the implementation for cgroups
> v2[3]. After this patch, osContainer_linux{h,c}pp files are cgroups
> version agnostic. Implementations for specific versions are in
> cgroupV{1,2}Subsystem.{c,h}pp files. Some shared, cgroup version
> agnostic code is in cgroupSubsystem.{c,h}pp.
>
> Updated detection logic looks in /proc/cgroups first for hierarchy ids
> of cpu/cpuset/cpuacct/memory controllers. If the hierarchy id for all
> of them is 0 and they're all enabled, cgroups v2, unified hierarchy is
> assumed. Otherwise it uses cgroups v1 controllers (also known as hybrid
> or legacy hierarchy). Note that controllers can be only be mounted via
> one or the other hierarchy, legacy (v1) or unified (v2) - exclusive[4].
>
> Note that for the cgroups v2 cpu_shares() implementation a reverse
> mapping is needed for the plain value exposed via cpu.weight.
> Additionally, there doesn't seem to be an API exposed to use for an
> implementation of memory_max_usage_in_bytes() in cgroups v2. Hence, it
> returns OSCONTAINER_ERROR which is mapped to "not supported" elsewhere
> in hotspot code.
>
> Once reviewed, I intend to push this in two changesets/bugs. One for
> the refactoring work (no-op) as JDK-8230848. Another for the cgroupv2
> impl with JDK-8230305.
>
> Bug: https://bugs.openjdk.java.net/browse/JDK-8230305
Rebased webrev on top of JDK-8232207:
http://cr.openjdk.java.net/~sgehwolf/webrevs/cgroupsv2-hotspot/03/webrev/
Thanks,
Severin
>
> Testing: tier1 tests on Linux x86_64. Docker/podman hotspot tests on
> F30 with hybrid cgroup v1 hierarchy. Hotspot container tests on F31
> with unified hierarchy on Linux x86_64. jdk/submit. All pass.
>
> Thoughts?
>
> Thanks,
> Severin
>
> [1] http://mail.openjdk.java.net/pipermail/hotspot-dev/2019-September/039605.html
> http://mail.openjdk.java.net/pipermail/hotspot-dev/2019-October/039708.html
> [2] http://cr.openjdk.java.net/~sgehwolf/webrevs/JDK-8230848/04/webrev/
> [3] http://cr.openjdk.java.net/~sgehwolf/webrevs/JDK-8230305/06/webrev/
> [4] https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html#mounting
> "All controllers which support v2 and are not bound to a v1 hierarchy are
> automatically bound to the v2 hierarchy and show up at the root.
> Controllers which are not in active use in the v2 hierarchy can be
> bound to other hierarchies."
More information about the hotspot-dev
mailing list