< prev index next >

test/hotspot/jtreg/containers/docker/TestCPUAwareness.java

Print this page
@  rev 56647 : 8230305: Cgroups v2: Container awareness
|  Summary: Implement Cgroups v2 container awareness in hotspot
~  Reviewed-by: bobv

@@ -31,14 +31,16 @@
  *          java.management
  *          jdk.jartool/sun.tools.jar
  * @run driver TestCPUAwareness
  */
 import java.util.List;
+import java.util.Optional;
 import jdk.test.lib.containers.docker.Common;
 import jdk.test.lib.containers.docker.DockerRunOptions;
 import jdk.test.lib.containers.docker.DockerTestUtils;
 import jdk.test.lib.containers.cgroup.CPUSetsReader;
+import jdk.test.lib.process.OutputAnalyzer;
 
 public class TestCPUAwareness {
     private static final String imageName = Common.imageName("cpu");
     private static final int availableCPUs = Runtime.getRuntime().availableProcessors();
 

@@ -200,10 +202,30 @@
 
         expectedAPC = adjustExpectedAPCForAvailableCPUs(expectedAPC);
 
         DockerRunOptions opts = Common.newOpts(imageName)
             .addDockerOpts("--cpu-shares=" + shares);
-        Common.run(opts)
-            .shouldMatch("CPU Shares is.*" + shares)
-            .shouldMatch("active_processor_count.*" + expectedAPC);
+        OutputAnalyzer out = Common.run(opts);
+        String cgroupVer = getDetectedCgroupVersion(out);
+        if (cgroupVer != null ) {
+            if ("cgroupv1".equals(cgroupVer)) {
+                out.shouldMatch("CPU Shares is.*" + shares);
+            } else if ("cgroupsv2".equals(cgroupVer)) {
+                out.shouldMatch("Scaled CPU Shares value is:.*");
+            }
+        }
+        out.shouldMatch("active_processor_count.*" + expectedAPC);
+    }
+
+    private static String getDetectedCgroupVersion(OutputAnalyzer out) throws Exception {
+        Optional<String> cgroupVersString = out.asLines()
+                                                .stream()
+                                                .filter( l -> l.startsWith("Detected CGroups version is:") )
+                                                .findFirst();
+        if (cgroupVersString.isPresent()) { // only non-product builds have this
+            return cgroupVersString.get().split(": ")[1].trim();
+        } else {
+            return null;
     }
+    }
+
 }
< prev index next >