Skip to content

Commit 121bf9e

Browse files
SconyPawel Lampe
authored andcommitted
Improve 'MemoryPressureMonitor' to use cgroup memory measurements within container
1 parent ea79572 commit 121bf9e

1 file changed

Lines changed: 22 additions & 0 deletions

File tree

Source/WebKit/UIProcess/linux/MemoryPressureMonitor.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,28 @@ void CGroupMemoryController::setMemoryControllerPath(CString memoryControllerPat
411411
m_cgroupMemoryMemswLimitInBytesFile = getCgroupFile("memory", memoryControllerPath, CString("memory.memsw.limit_in_bytes"));
412412
m_cgroupMemoryLimitInBytesFile = getCgroupFile("memory", memoryControllerPath, CString("memory.limit_in_bytes"));
413413
m_cgroupMemoryUsageInBytesFile = getCgroupFile("memory", memoryControllerPath, CString("memory.usage_in_bytes"));
414+
415+
// when ran within (e.g. docker) container, it's possible that <controller_path> will be specified in /proc/self/cgroup
416+
// and yet the paths like /sys/fs/cgroup/memory/<controller_path>/ will be unavailable
417+
// therefore it's worth falling back to default files so that memory pressure monitor would still work as expected in such cases
418+
const bool shouldFallbackToEmptyPath = isActive()
419+
&& m_cgroupMemoryControllerPath != "/"
420+
&& !m_cgroupV2MemoryCurrentFile
421+
&& !m_cgroupV2MemoryMemswMaxFile
422+
&& !m_cgroupV2MemoryMaxFile
423+
&& !m_cgroupV2MemoryHighFile
424+
&& !m_cgroupMemoryMemswLimitInBytesFile
425+
&& !m_cgroupMemoryLimitInBytesFile
426+
&& !m_cgroupMemoryUsageInBytesFile;
427+
if (shouldFallbackToEmptyPath) {
428+
m_cgroupV2MemoryCurrentFile = getCgroupFile("/", "", CString("memory.current"));
429+
m_cgroupV2MemoryMemswMaxFile = getCgroupFile("/", "", CString("memory.memsw.max"));
430+
m_cgroupV2MemoryMaxFile = getCgroupFile("/", "", CString("memory.max"));
431+
m_cgroupV2MemoryHighFile = getCgroupFile("/", "", CString("memory.high"));
432+
m_cgroupMemoryMemswLimitInBytesFile = getCgroupFile("memory", "", CString("memory.memsw.limit_in_bytes"));
433+
m_cgroupMemoryLimitInBytesFile = getCgroupFile("memory", "", CString("memory.limit_in_bytes"));
434+
m_cgroupMemoryUsageInBytesFile = getCgroupFile("memory", "", CString("memory.usage_in_bytes"));
435+
}
414436
}
415437

416438
void CGroupMemoryController::disposeMemoryController()

0 commit comments

Comments
 (0)