< 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 >