< prev index next > src/hotspot/os/linux/cgroupV1Subsystem_linux.cpp
Print this page
}
_path = os::strdup(ss.base());
}
}
+ jlong CgroupV1MemoryController::uses_mem_hierarchy() {
+ julong use_hierarchy;
+ CONTAINER_READ_NUMBER_CHECKED(reader(), "/memory.use_hierarchy", "Use Hierarchy", use_hierarchy);
+ return (jlong)use_hierarchy;
+ }
+
/*
* The common case, containers, we have _root == _cgroup_path, and thus set the
* controller path to the _mount_point. This is where the limits are exposed in
* the cgroup pseudo filesystem (at the leaf) and adjustment of the path won't
* be needed for that reason.
}
jlong CgroupV1MemoryController::read_memory_limit_in_bytes(julong upper_bound) {
julong memlimit;
CONTAINER_READ_NUMBER_CHECKED(reader(), "/memory.limit_in_bytes", "Memory Limit", memlimit);
! if (memlimit >= upper_bound) {
! verbose_log(memlimit, upper_bound);
! return (jlong)-1;
! } else {
- verbose_log(memlimit, upper_bound);
- return (jlong)memlimit;
}
}
/* read_mem_swap
*
* Determine the memory and swap limit metric. Returns a positive limit value strictly
}
jlong CgroupV1MemoryController::read_memory_limit_in_bytes(julong upper_bound) {
julong memlimit;
CONTAINER_READ_NUMBER_CHECKED(reader(), "/memory.limit_in_bytes", "Memory Limit", memlimit);
! if (memlimit >= upper_bound && uses_mem_hierarchy()) {
! CONTAINER_READ_NUMERICAL_KEY_VALUE_CHECKED(reader(), "/memory.stat",
! "hierarchical_memory_limit", "Hierarchical Memory Limit",
! memlimit);
}
+ verbose_log(memlimit, upper_bound);
+ return (jlong)((memlimit < upper_bound) ? memlimit : -1);
}
/* read_mem_swap
*
* Determine the memory and swap limit metric. Returns a positive limit value strictly
* upper bound)
*/
jlong CgroupV1MemoryController::read_mem_swap(julong upper_memsw_bound) {
julong memswlimit;
CONTAINER_READ_NUMBER_CHECKED(reader(), "/memory.memsw.limit_in_bytes", "Memory and Swap Limit", memswlimit);
! if (memswlimit >= upper_memsw_bound) {
! log_trace(os, container)("Memory and Swap Limit is: Unlimited");
! return (jlong)-1;
! } else {
- return (jlong)memswlimit;
}
}
jlong CgroupV1MemoryController::memory_and_swap_limit_in_bytes(julong upper_mem_bound, julong upper_swap_bound) {
jlong memory_swap = read_mem_swap(upper_mem_bound + upper_swap_bound);
if (memory_swap == -1) {
* upper bound)
*/
jlong CgroupV1MemoryController::read_mem_swap(julong upper_memsw_bound) {
julong memswlimit;
CONTAINER_READ_NUMBER_CHECKED(reader(), "/memory.memsw.limit_in_bytes", "Memory and Swap Limit", memswlimit);
! if (memswlimit >= upper_memsw_bound && uses_mem_hierarchy()) {
! CONTAINER_READ_NUMERICAL_KEY_VALUE_CHECKED(reader(), "/memory.stat",
! "hierarchical_memsw_limit", "Hierarchical Memory and Swap Limit",
! memswlimit);
}
+ verbose_log(memswlimit, upper_memsw_bound);
+ return (jlong)((memswlimit < upper_memsw_bound) ? memswlimit : -1);
}
jlong CgroupV1MemoryController::memory_and_swap_limit_in_bytes(julong upper_mem_bound, julong upper_swap_bound) {
jlong memory_swap = read_mem_swap(upper_mem_bound + upper_swap_bound);
if (memory_swap == -1) {
< prev index next >