Skip to content

Commit 0b081ab

Browse files
Sconymagomez
authored andcommitted
MemoryPressure: improve MemoryPressureMonitor to use cgroup memory measurements.
1 parent 3f6be5f commit 0b081ab

1 file changed

Lines changed: 24 additions & 0 deletions

File tree

Source/WebKit/UIProcess/linux/MemoryPressureMonitor.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,30 @@ void CGroupMemoryController::setMemoryControllerPath(CString memoryControllerPat
418418
m_cgroupMemoryMemswUsageInBytesFile = getCgroupFile("memory", memoryControllerPath, CString("memory.memsw.usage_in_bytes"));
419419
m_cgroupMemoryLimitInBytesFile = getCgroupFile("memory", memoryControllerPath, CString("memory.limit_in_bytes"));
420420
m_cgroupMemoryUsageInBytesFile = getCgroupFile("memory", memoryControllerPath, CString("memory.usage_in_bytes"));
421+
422+
// when ran within (e.g. docker) container, it's possible that <controller_path> will be specified in /proc/self/cgroup
423+
// and yet the paths like /sys/fs/cgroup/memory/<controller_path>/ will be unavailable
424+
// therefore it's worth falling back to default files so that memory pressure monitor would still work as expected in such cases
425+
const bool shouldFallbackToEmptyPath = isActive()
426+
&& m_cgroupMemoryControllerPath != "/"
427+
&& !m_cgroupV2MemoryCurrentFile
428+
&& !m_cgroupV2MemoryMemswMaxFile
429+
&& !m_cgroupV2MemoryMaxFile
430+
&& !m_cgroupV2MemoryHighFile
431+
&& !m_cgroupMemoryMemswLimitInBytesFile
432+
&& !m_cgroupMemoryMemswUsageInBytesFile
433+
&& !m_cgroupMemoryLimitInBytesFile
434+
&& !m_cgroupMemoryUsageInBytesFile;
435+
if (shouldFallbackToEmptyPath) {
436+
m_cgroupV2MemoryCurrentFile = getCgroupFile("/", "", CString("memory.current"));
437+
m_cgroupV2MemoryMemswMaxFile = getCgroupFile("/", "", CString("memory.memsw.max"));
438+
m_cgroupV2MemoryMaxFile = getCgroupFile("/", "", CString("memory.max"));
439+
m_cgroupV2MemoryHighFile = getCgroupFile("/", "", CString("memory.high"));
440+
m_cgroupMemoryMemswLimitInBytesFile = getCgroupFile("memory", "", CString("memory.memsw.limit_in_bytes"));
441+
m_cgroupMemoryMemswUsageInBytesFile = getCgroupFile("memory", "", CString("memory.memsw.usage_in_bytes"));
442+
m_cgroupMemoryLimitInBytesFile = getCgroupFile("memory", "", CString("memory.limit_in_bytes"));
443+
m_cgroupMemoryUsageInBytesFile = getCgroupFile("memory", "", CString("memory.usage_in_bytes"));
444+
}
421445
}
422446

423447
void CGroupMemoryController::disposeMemoryController()

0 commit comments

Comments
 (0)