diff options
author | Tejun Heo <tj@kernel.org> | 2015-12-03 16:18:21 +0100 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2015-12-03 16:18:21 +0100 |
commit | 67cde9c4938945b9510730c64e68d2f1dd7bc0aa (patch) | |
tree | 208946c2b33e3eeaa8e7f7d0eedc0a9c0401b4bd /kernel | |
parent | cgroup: fix handling of multi-destination migration from subtree_control enab... (diff) | |
download | linux-67cde9c4938945b9510730c64e68d2f1dd7bc0aa.tar.xz linux-67cde9c4938945b9510730c64e68d2f1dd7bc0aa.zip |
cgroup_pids: don't account for the root cgroup
Because accounting resources for the root cgroup sometimes incurs
measureable overhead for workloads which don't care about cgroup and
often ends up calculating a number which is available elsewhere in a
slightly different form, cgroup is not in the business of providing
system-wide statistics. The pids controller which was introduced
recently was exposing "pids.current" at the root. This patch disable
accounting for root cgroup and removes the file from the root
directory.
While this is a userland visible behavior change, pids has been
available only in one version and was badly broken there, so I don't
think this will be noticeable. If it turns out to be a problem, we
can reinstate it for v1 hierarchies.
Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Aleksa Sarai <cyphar@cyphar.com>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/cgroup_pids.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/kernel/cgroup_pids.c b/kernel/cgroup_pids.c index 8e27fc5dbb20..b50d5a167fda 100644 --- a/kernel/cgroup_pids.c +++ b/kernel/cgroup_pids.c @@ -106,7 +106,7 @@ static void pids_uncharge(struct pids_cgroup *pids, int num) { struct pids_cgroup *p; - for (p = pids; p; p = parent_pids(p)) + for (p = pids; parent_pids(p); p = parent_pids(p)) pids_cancel(p, num); } @@ -123,7 +123,7 @@ static void pids_charge(struct pids_cgroup *pids, int num) { struct pids_cgroup *p; - for (p = pids; p; p = parent_pids(p)) + for (p = pids; parent_pids(p); p = parent_pids(p)) atomic64_add(num, &p->counter); } @@ -140,7 +140,7 @@ static int pids_try_charge(struct pids_cgroup *pids, int num) { struct pids_cgroup *p, *q; - for (p = pids; p; p = parent_pids(p)) { + for (p = pids; parent_pids(p); p = parent_pids(p)) { int64_t new = atomic64_add_return(num, &p->counter); /* @@ -298,6 +298,7 @@ static struct cftype pids_files[] = { { .name = "current", .read_s64 = pids_current_read, + .flags = CFTYPE_NOT_ON_ROOT, }, { } /* terminate */ }; |