summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSuren Baghdasaryan <surenb@google.com>2018-05-23 12:30:44 -0700
committerSuren Baghdasaryan <surenb@google.com>2018-05-23 16:23:20 -0700
commitcbb690299f5910aa9b9162e151f0e54d1de73d7b (patch)
treecd05f282c1df8b3967bfb5cdcdc7413110253cd6
parent1ddef8852ac7687ade8455e04b2e4082d1e0e7e5 (diff)
downloadcore-cbb690299f5910aa9b9162e151f0e54d1de73d7b.tar.gz
Make per-application memcg hierarchy configurable via a property
Introduce ro.config.per_app_memcg Android property to enable/disable per-application memcg hierarchy. On low-ram devices (ro.config.low_ram=true) ro.config.per_app_memcg defaults to true, otherwise it defaults to false. Bug: 80201565 Test: set ro.config.per_app_memcg=true and verify /proc/<app_pid>/cgroup membership (memory:/apps/uid_xxx/pid_xxx) Test: set ro.config.per_app_memcg=false and verify /proc/<app_pid>/cgroup membership (memory:/) Change-Id: Iabd3ef6c9c16c774b9da959a7f43b5f66df120a3 Signed-off-by: Suren Baghdasaryan <surenb@google.com>
-rw-r--r--libprocessgroup/processgroup.cpp29
1 files changed, 24 insertions, 5 deletions
diff --git a/libprocessgroup/processgroup.cpp b/libprocessgroup/processgroup.cpp
index 6dfa697de..58295fadb 100644
--- a/libprocessgroup/processgroup.cpp
+++ b/libprocessgroup/processgroup.cpp
@@ -39,12 +39,18 @@
#include <android-base/file.h>
#include <android-base/logging.h>
+#ifdef __ANDROID__
+#include <android-base/properties.h>
+#endif
#include <android-base/stringprintf.h>
#include <android-base/strings.h>
#include <private/android_filesystem_config.h>
#include <processgroup/processgroup.h>
+#ifdef __ANDROID__
+using android::base::GetBoolProperty;
+#endif
using android::base::StartsWith;
using android::base::StringPrintf;
using android::base::WriteStringToFile;
@@ -62,12 +68,25 @@ std::once_flag init_path_flag;
static const std::string& GetCgroupRootPath() {
static std::string cgroup_root_path;
std::call_once(init_path_flag, [&]() {
- // Check if mem cgroup is mounted, only then check for write-access to avoid
- // SELinux denials
+#ifdef __ANDROID__
+ // low-ram devices use per-app memcg by default, unlike high-end ones
+ bool low_ram_device = GetBoolProperty("ro.config.low_ram", false);
+ bool per_app_memcg =
+ GetBoolProperty("ro.config.per_app_memcg", low_ram_device);
+#else
+ // host does not support Android properties
+ bool per_app_memcg = false;
+#endif
+ if (per_app_memcg) {
+ // Check if mem cgroup is mounted, only then check for
+ // write-access to avoid SELinux denials
cgroup_root_path =
- (access(MEM_CGROUP_TASKS, F_OK) || access(MEM_CGROUP_PATH, W_OK) ? ACCT_CGROUP_PATH
- : MEM_CGROUP_PATH);
- });
+ (access(MEM_CGROUP_TASKS, F_OK) || access(MEM_CGROUP_PATH, W_OK) ?
+ ACCT_CGROUP_PATH : MEM_CGROUP_PATH);
+ } else {
+ cgroup_root_path = ACCT_CGROUP_PATH;
+ }
+ });
return cgroup_root_path;
}