Hi Bob,
Sorry I took a look but can't really review it in detail as I don't know
any of the cgroup details. Not sure who may ... perhaps Misha (cc'd).
On 15/03/2019 12:15 am, Bob Vandette wrote:
Ping ...
Please review these three fixes for Linux Docker/cgroup container support.
WEBREV:
http://cr.openjdk.java.net/~bobv/8217766/webrev.0
src/java.base/linux/classes/jdk/internal/platform/cgroupv1/Metrics.java
The copyright update should have been from:
* Copyright (c) 2018, Oracle
to
* Copyright (c) 2018, 2019, Oracle
David
-----
ISSUE1:
https://bugs.openjdk.java.net/browse/JDK-8219562 - Line of code in
osContainer_linux.cpp#L102 appears unreachable
This change corrects a rarely used hotspot code path making it compatible with
the Java based Metrics.
ISSUE2:
https://bugs.openjdk.java.net/browse/JDK-8212528 - Wrong cgroup subsystem being
used for some CPU Container Metrics
Most Linux distros provide symbolic links for cpuacct and cpu controller
directories. Docker on the Mac does not.
This causes some of the cpu statistics to be unreported since the directory
name was incorrect.
ISSUE3:
https://bugs.openjdk.java.net/browse/JDK-8217766 - Container Support doesn't
work for some Join Controllers combinations
The cgroup identification -implemented by parsing /proc/self/mountinfo
and /proc/self/cgroup- assumed each cgroup controller was mounted
disjoint from the others (except for "cpu" and "cpuacct" controllers).
Which means, we expected one single controller per mountinfo line.
This matches the way most Linux distributions currently configure
cgroupsv1 by default. Yet controllers can be grouped arbitrarily.
For instance, using the JoinControllers systemd directive.
One use case for that is to let Kubernetes' kubelet discover his own
dedicated and reserved cgroup hierarchy. In that situation, the JVM
fails to discover the expected cgroup controllers set, and, when running
containerized, default to a suboptimal understanding of available resources.
Supporting arbitrarily controllers groups per mountpoint actually
allows for simpler and easier to follow code, as we don't need nested
if/else for every controller.
This fix also updates the Containers Metrics, to support joint controllers.
Bob.