From 5bb91ab5530dd002f6021b2177dc2bcf5467eebd Mon Sep 17 00:00:00 2001 From: Martijn Coenen <maco@google.com> Date: Fri, 18 Mar 2016 15:28:31 +0100 Subject: [PATCH] Don't use mem cgroups for pid accounting. Commit b82bab66 introduced the use of memory cgroups for keeping track of forked PIDs; it basically creates a separate memory cgroup for every process forked from zygote. Each such memory cgroup which also have its own LRU with (in)active file and anonymous pages. The current theory is this could potentially introduce two problems: 1) kswapd runs longer because it has to iterate over the LRUs of all mem cgroups, instead of over the LRUs of a single root mem cgroup; 2) the way kswapd reclaims things will be different also - I think it will tend to bias reclaim to smaller mem cgroups, and process private pages will end up on ZRAM swap much sooner. Until we figure this out, fall back to the CPU accounting cgroup for keeping track of forked PIDs. This leaves us with a single root mem cgroup again. We can also keep userspace lmkd enabled because it only requires the root mem cgroup. Bug: 27381069 Change-Id: Ife397a6ac232761f2adfe6f5056582be0d1b4ff1 --- libprocessgroup/processgroup.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/libprocessgroup/processgroup.cpp b/libprocessgroup/processgroup.cpp index 5ab957d860..1bc1659e62 100644 --- a/libprocessgroup/processgroup.cpp +++ b/libprocessgroup/processgroup.cpp @@ -37,6 +37,9 @@ #include <processgroup/processgroup.h> +// Uncomment line below use memory cgroups for keeping track of (forked) PIDs +// #define USE_MEMCG 1 + #define MEM_CGROUP_PATH "/dev/memcg/apps" #define MEM_CGROUP_TASKS "/dev/memcg/apps/tasks" #define ACCT_CGROUP_PATH "/acct" @@ -67,6 +70,7 @@ struct ctx { }; static const char* getCgroupRootPath() { +#ifdef USE_MEMCG static const char* cgroup_root_path = NULL; std::call_once(init_path_flag, [&]() { // Check if mem cgroup is mounted, only then check for write-access to avoid @@ -75,6 +79,9 @@ static const char* getCgroupRootPath() { ACCT_CGROUP_PATH : MEM_CGROUP_PATH; }); return cgroup_root_path; +#else + return ACCT_CGROUP_PATH; +#endif } static int convertUidToPath(char *path, size_t size, uid_t uid) -- GitLab