init: Replace cgroup hardcoded path with detected one
Remove hardcoded cpuset path usage and replace it with a request to get the path using new API. Exempt-From-Owner-Approval: already approved in internal master Bug: 111307099 Test: builds, boots Change-Id: I211d093c24a682e2d1992c08e4c1d980379711a4 Merged-In: I211d093c24a682e2d1992c08e4c1d980379711a4 Signed-off-by: Suren Baghdasaryan <surenb@google.com>
This commit is contained in:
parent
82b72a5667
commit
e01ae8deca
1 changed files with 25 additions and 19 deletions
|
|
@ -991,27 +991,33 @@ Result<Success> Service::Start() {
|
|||
std::for_each(descriptors_.begin(), descriptors_.end(),
|
||||
std::bind(&DescriptorInfo::CreateAndPublish, std::placeholders::_1, scon));
|
||||
|
||||
// See if there were "writepid" instructions to write to files under /dev/cpuset/.
|
||||
auto cpuset_predicate = [](const std::string& path) {
|
||||
return StartsWith(path, "/dev/cpuset/");
|
||||
};
|
||||
auto iter = std::find_if(writepid_files_.begin(), writepid_files_.end(), cpuset_predicate);
|
||||
if (iter == writepid_files_.end()) {
|
||||
// There were no "writepid" instructions for cpusets, check if the system default
|
||||
// cpuset is specified to be used for the process.
|
||||
std::string default_cpuset = GetProperty("ro.cpuset.default", "");
|
||||
if (!default_cpuset.empty()) {
|
||||
// Make sure the cpuset name starts and ends with '/'.
|
||||
// A single '/' means the 'root' cpuset.
|
||||
if (default_cpuset.front() != '/') {
|
||||
default_cpuset.insert(0, 1, '/');
|
||||
// See if there were "writepid" instructions to write to files under cpuset path.
|
||||
std::string cpuset_path;
|
||||
if (CgroupGetControllerPath("cpuset", &cpuset_path)) {
|
||||
auto cpuset_predicate = [&cpuset_path](const std::string& path) {
|
||||
return StartsWith(path, cpuset_path + "/");
|
||||
};
|
||||
auto iter =
|
||||
std::find_if(writepid_files_.begin(), writepid_files_.end(), cpuset_predicate);
|
||||
if (iter == writepid_files_.end()) {
|
||||
// There were no "writepid" instructions for cpusets, check if the system default
|
||||
// cpuset is specified to be used for the process.
|
||||
std::string default_cpuset = GetProperty("ro.cpuset.default", "");
|
||||
if (!default_cpuset.empty()) {
|
||||
// Make sure the cpuset name starts and ends with '/'.
|
||||
// A single '/' means the 'root' cpuset.
|
||||
if (default_cpuset.front() != '/') {
|
||||
default_cpuset.insert(0, 1, '/');
|
||||
}
|
||||
if (default_cpuset.back() != '/') {
|
||||
default_cpuset.push_back('/');
|
||||
}
|
||||
writepid_files_.push_back(
|
||||
StringPrintf("%s%stasks", cpuset_path.c_str(), default_cpuset.c_str()));
|
||||
}
|
||||
if (default_cpuset.back() != '/') {
|
||||
default_cpuset.push_back('/');
|
||||
}
|
||||
writepid_files_.push_back(
|
||||
StringPrintf("/dev/cpuset%stasks", default_cpuset.c_str()));
|
||||
}
|
||||
} else {
|
||||
LOG(ERROR) << "cpuset cgroup controller is not mounted!";
|
||||
}
|
||||
std::string pid_str = std::to_string(getpid());
|
||||
for (const auto& file : writepid_files_) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue