< prev index next >

src/hotspot/os/linux/cgroupSubsystem_linux.hpp

Print this page
@  rev 56288 : 8230305: Cgroups v2: Container awareness
|  Reviewed-by: bobv
o  rev 56287 : 8230848: OSContainer: Refactor container detection code
|  Summary: Move cgroups v1 implementation details out of os_linux.cpp
~  Reviewed-by: bobv

@@ -49,10 +49,13 @@
  * [3] https://github.com/apache/mesos/blob/3478e344fb77d931f6122980c6e94cd3913c441d/src/docker/docker.cpp#L648
  *     https://github.com/apache/mesos/blob/3478e344fb77d931f6122980c6e94cd3913c441d/src/slave/containerizer/mesos/isolators/cgroups/constants.hpp#L30
  */
 #define PER_CPU_SHARES 1024
 
+// Four controllers: cpu, cpuset, cpuacct, memory
+#define CG_INFO_LENGTH 4
+
 class CgroupSubsystem: CHeapObj<mtInternal> {
   friend class CgroupSubsystemFactory;
   private:
     virtual int cpu_quota();
     virtual int cpu_period();

@@ -166,6 +169,74 @@
       _memory = memory;
       _unlimited_memory = (LONG_MAX / os::vm_page_size()) * os::vm_page_size();
     }
 };
 
+class CgroupV2Controller: public CgroupController {
+  friend class CgroupSubsystemFactory;
+  private:
+    /* the mount path of the cgroup v2 hierarchy */
+    char *_mount_path;
+    /* The cgroup path for the controller */
+    char *_cgroup_path;
+
+    /* Constructed full path to the subsystem directory */
+    char *_path;
+    static char* construct_path(char* mount_path, char *cgroup_path);
+
+  public:
+    CgroupV2Controller(char * mount_path, char *cgroup_path) {
+      _mount_path = mount_path;
+      _cgroup_path = os::strdup(cgroup_path);
+      _path = construct_path(mount_path, cgroup_path);
+    }
+
+    char *subsystem_path() { return _path; }
+};
+
+class CgroupV2Subsystem: CgroupSubsystem {
+  friend class CgroupSubsystemFactory;
+  private:
+    /* One unified controller */
+    CgroupController* _unified = NULL;
+
+    CgroupV2Subsystem(CgroupController* unified) {
+      _unified = unified;
+    }
+
+    char *mem_limit_val();
+    char *mem_swp_limit_val();
+    char *mem_soft_limit_val();
+    char *cpu_quota_val();
+    int cpu_quota();
+    int cpu_period();
+    int cpu_shares();
+    jlong limit_from_str(char* limit_str);
+    jlong memory_and_swap_limit_in_bytes();
+    jlong memory_soft_limit_in_bytes();
+    jlong memory_usage_in_bytes();
+    jlong memory_max_usage_in_bytes();
+    char * cpu_cpuset_cpus();
+    char * cpu_cpuset_memory_nodes();
+
+  public:
+    jlong memory_limit_in_bytes();
+    const char * container_type() {
+      return "cgroupv2";
+    }
+};
+
+// Class representing info in /proc/self/cgroup.
+// See man 7 cgroups
+class CgroupInfo : public StackObj {
+  friend class CgroupSubsystemFactory;
+
+  private:
+  char* _name;
+  int _hierarchy_id;
+  bool _enabled;
+  char* _cgroup_path;
+
+};
+
+
 #endif // CGROUP_SUBSYSTEM_LINUX_HPP
< prev index next >