Loading init/init.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -662,6 +662,10 @@ static Result<void> wait_for_coldboot_done_action(const BuiltinArguments& args) } static Result<void> SetupCgroupsAction(const BuiltinArguments&) { if (!CgroupsAvailable()) { LOG(INFO) << "Cgroups support in kernel is not enabled"; return {}; } // Have to create <CGROUPS_RC_DIR> using make_dir function // for appropriate sepolicy to be set for it make_dir(android::base::Dirname(CGROUPS_RC_PATH), 0711); Loading init/service.cpp +19 −15 Original line number Diff line number Diff line Loading @@ -692,6 +692,7 @@ Result<void> Service::Start() { start_order_ = next_start_order_++; process_cgroup_empty_ = false; if (CgroupsAvailable()) { bool use_memcg = swappiness_ != -1 || soft_limit_in_bytes_ != -1 || limit_in_bytes_ != -1 || limit_percent_ != -1 || !limit_property_.empty(); errno = -createProcessGroup(proc_attr_.uid, pid_, use_memcg); Loading @@ -711,6 +712,9 @@ Result<void> Service::Start() { if (use_memcg) { ConfigureMemcg(); } } else { process_cgroup_empty_ = true; } if (oom_score_adjust_ != DEFAULT_OOM_SCORE_ADJUST) { LmkdRegister(name_, proc_attr_.uid, pid_, oom_score_adjust_); Loading init/service_utils.cpp +9 −0 Original line number Diff line number Diff line Loading @@ -280,6 +280,15 @@ Result<void> SetProcessAttributes(const ProcessAttributes& attr) { } Result<void> WritePidToFiles(std::vector<std::string>* files) { if (files->empty()) { // No files to write pid to, exit early. return {}; } if (!CgroupsAvailable()) { return Error() << "cgroups are not available"; } // See if there were "writepid" instructions to write to files under cpuset path. std::string cpuset_path; if (CgroupGetControllerPath("cpuset", &cpuset_path)) { Loading libprocessgroup/include/processgroup/processgroup.h +1 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ __BEGIN_DECLS static constexpr const char* CGROUPV2_CONTROLLER_NAME = "cgroup2"; bool CgroupsAvailable(); bool CgroupGetControllerPath(const std::string& cgroup_name, std::string* path); bool CgroupGetControllerFromPath(const std::string& path, std::string* cgroup_name); bool CgroupGetAttributePath(const std::string& attr_name, std::string* path); Loading libprocessgroup/processgroup.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,11 @@ using namespace std::chrono_literals; #define PROCESSGROUP_CGROUP_PROCS_FILE "/cgroup.procs" bool CgroupsAvailable() { static bool cgroups_available = access("/proc/cgroups", F_OK) == 0; return cgroups_available; } bool CgroupGetControllerPath(const std::string& cgroup_name, std::string* path) { auto controller = CgroupMap::GetInstance().FindController(cgroup_name); Loading Loading
init/init.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -662,6 +662,10 @@ static Result<void> wait_for_coldboot_done_action(const BuiltinArguments& args) } static Result<void> SetupCgroupsAction(const BuiltinArguments&) { if (!CgroupsAvailable()) { LOG(INFO) << "Cgroups support in kernel is not enabled"; return {}; } // Have to create <CGROUPS_RC_DIR> using make_dir function // for appropriate sepolicy to be set for it make_dir(android::base::Dirname(CGROUPS_RC_PATH), 0711); Loading
init/service.cpp +19 −15 Original line number Diff line number Diff line Loading @@ -692,6 +692,7 @@ Result<void> Service::Start() { start_order_ = next_start_order_++; process_cgroup_empty_ = false; if (CgroupsAvailable()) { bool use_memcg = swappiness_ != -1 || soft_limit_in_bytes_ != -1 || limit_in_bytes_ != -1 || limit_percent_ != -1 || !limit_property_.empty(); errno = -createProcessGroup(proc_attr_.uid, pid_, use_memcg); Loading @@ -711,6 +712,9 @@ Result<void> Service::Start() { if (use_memcg) { ConfigureMemcg(); } } else { process_cgroup_empty_ = true; } if (oom_score_adjust_ != DEFAULT_OOM_SCORE_ADJUST) { LmkdRegister(name_, proc_attr_.uid, pid_, oom_score_adjust_); Loading
init/service_utils.cpp +9 −0 Original line number Diff line number Diff line Loading @@ -280,6 +280,15 @@ Result<void> SetProcessAttributes(const ProcessAttributes& attr) { } Result<void> WritePidToFiles(std::vector<std::string>* files) { if (files->empty()) { // No files to write pid to, exit early. return {}; } if (!CgroupsAvailable()) { return Error() << "cgroups are not available"; } // See if there were "writepid" instructions to write to files under cpuset path. std::string cpuset_path; if (CgroupGetControllerPath("cpuset", &cpuset_path)) { Loading
libprocessgroup/include/processgroup/processgroup.h +1 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ __BEGIN_DECLS static constexpr const char* CGROUPV2_CONTROLLER_NAME = "cgroup2"; bool CgroupsAvailable(); bool CgroupGetControllerPath(const std::string& cgroup_name, std::string* path); bool CgroupGetControllerFromPath(const std::string& path, std::string* cgroup_name); bool CgroupGetAttributePath(const std::string& attr_name, std::string* path); Loading
libprocessgroup/processgroup.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,11 @@ using namespace std::chrono_literals; #define PROCESSGROUP_CGROUP_PROCS_FILE "/cgroup.procs" bool CgroupsAvailable() { static bool cgroups_available = access("/proc/cgroups", F_OK) == 0; return cgroups_available; } bool CgroupGetControllerPath(const std::string& cgroup_name, std::string* path) { auto controller = CgroupMap::GetInstance().FindController(cgroup_name); Loading