Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(83)

Unified Diff: base/threading/platform_thread_linux.cc

Issue 2592883003: base: Extend cgroup adjustments to both cpuset and schedtune. (Closed)
Patch Set: remove non-"chrome" suffix fallback Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/threading/platform_thread_linux.cc
diff --git a/base/threading/platform_thread_linux.cc b/base/threading/platform_thread_linux.cc
index 299ae2b927749e5fb0fb4818103ea0437a80b7a8..92fbda5ee1d44a1ff198b0528c41bb1b05f55ed9 100644
--- a/base/threading/platform_thread_linux.cc
+++ b/base/threading/platform_thread_linux.cc
@@ -29,36 +29,57 @@
namespace base {
namespace {
#if !defined(OS_NACL)
-const FilePath::CharType kCpusetDirectory[] =
- FILE_PATH_LITERAL("/sys/fs/cgroup/cpuset/chrome");
+const FilePath::CharType kCgroupDirectory[] =
+ FILE_PATH_LITERAL("/sys/fs/cgroup");
-FilePath ThreadPriorityToCpusetDirectory(ThreadPriority priority) {
- FilePath cpuset_filepath(kCpusetDirectory);
+FilePath ThreadPriorityToCgroupDirectory(const FilePath& cgroup_filepath,
+ ThreadPriority priority) {
switch (priority) {
case ThreadPriority::NORMAL:
- return cpuset_filepath;
+ return cgroup_filepath;
case ThreadPriority::BACKGROUND:
- return cpuset_filepath.Append(FILE_PATH_LITERAL("non-urgent"));
+ return cgroup_filepath.Append(FILE_PATH_LITERAL("non-urgent"));
case ThreadPriority::DISPLAY:
case ThreadPriority::REALTIME_AUDIO:
- return cpuset_filepath.Append(FILE_PATH_LITERAL("urgent"));
+ return cgroup_filepath.Append(FILE_PATH_LITERAL("urgent"));
}
NOTREACHED();
return FilePath();
}
-void SetThreadCpuset(PlatformThreadId thread_id,
- const FilePath& cpuset_directory) {
- // Silently ignore request if cpuset directory doesn't exist.
- if (!DirectoryExists(cpuset_directory))
- return;
- FilePath tasks_filepath = cpuset_directory.Append(FILE_PATH_LITERAL("tasks"));
+void SetThreadCgroup(PlatformThreadId thread_id,
+ const FilePath& cgroup_directory) {
+ FilePath tasks_filepath = cgroup_directory.Append(FILE_PATH_LITERAL("tasks"));
std::string tid = IntToString(thread_id);
int bytes_written = WriteFile(tasks_filepath, tid.c_str(), tid.size());
if (bytes_written != static_cast<int>(tid.size())) {
DVLOG(1) << "Failed to add " << tid << " to " << tasks_filepath.value();
}
}
+
+void SetThreadCgroupForThreadPriority(PlatformThreadId thread_id,
+ const FilePath& cgroup_filepath,
+ ThreadPriority priority) {
+ // Append "chrome" suffix.
+ FilePath cgroup_directory = ThreadPriorityToCgroupDirectory(
+ cgroup_filepath.Append(FILE_PATH_LITERAL("chrome")), priority);
+
+ // Silently ignore request if cgroup directory doesn't exist.
+ if (!DirectoryExists(cgroup_directory))
+ return;
+
+ SetThreadCgroup(thread_id, cgroup_directory);
+}
+
+void SetThreadCgroupsForThreadPriority(PlatformThreadId thread_id,
+ ThreadPriority priority) {
+ FilePath cgroup_filepath(kCgroupDirectory);
+ SetThreadCgroupForThreadPriority(
+ thread_id, cgroup_filepath.Append(FILE_PATH_LITERAL("cpuset")), priority);
+ SetThreadCgroupForThreadPriority(
+ thread_id, cgroup_filepath.Append(FILE_PATH_LITERAL("schedtune")),
+ priority);
+}
#endif
} // namespace
@@ -79,8 +100,7 @@ const ThreadPriorityToNiceValuePair kThreadPriorityToNiceValueMap[4] = {
bool SetCurrentThreadPriorityForPlatform(ThreadPriority priority) {
#if !defined(OS_NACL)
- FilePath cpuset_directory = ThreadPriorityToCpusetDirectory(priority);
- SetThreadCpuset(PlatformThread::CurrentId(), cpuset_directory);
+ SetThreadCgroupsForThreadPriority(PlatformThread::CurrentId(), priority);
return priority == ThreadPriority::REALTIME_AUDIO &&
pthread_setschedparam(pthread_self(), SCHED_RR, &kRealTimePrio) == 0;
#else
@@ -139,8 +159,7 @@ void PlatformThread::SetThreadPriority(PlatformThreadId thread_id,
// priority.
CHECK_NE(thread_id, getpid());
- FilePath cpuset_directory = ThreadPriorityToCpusetDirectory(priority);
- SetThreadCpuset(thread_id, cpuset_directory);
+ SetThreadCgroupsForThreadPriority(thread_id, priority);
const int nice_setting = internal::ThreadPriorityToNiceValue(priority);
if (setpriority(PRIO_PROCESS, thread_id, nice_setting)) {
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698