diff options
| author | Tejun Heo <tj@kernel.org> | 2022-07-23 04:28:28 -1000 |
|---|---|---|
| committer | Tejun Heo <tj@kernel.org> | 2022-07-23 04:29:02 -1000 |
| commit | 6a010a49b63ac8465851a79185d8deff966f8e1a (patch) | |
| tree | 98368122cf356fc26b4545176031481c42f649bd /kernel/cgroup/cgroup-internal.h | |
| parent | 30312730bd029f567045c38098d7e5a62e9aa658 (diff) | |
| download | linux-6a010a49b63ac8465851a79185d8deff966f8e1a.tar.gz linux-6a010a49b63ac8465851a79185d8deff966f8e1a.tar.bz2 linux-6a010a49b63ac8465851a79185d8deff966f8e1a.zip | |
cgroup: Make !percpu threadgroup_rwsem operations optional
3942a9bd7b58 ("locking, rcu, cgroup: Avoid synchronize_sched() in
__cgroup_procs_write()") disabled percpu operations on threadgroup_rwsem
because the impiled synchronize_rcu() on write locking was pushing up the
latencies too much for android which constantly moves processes between
cgroups.
This makes the hotter paths - fork and exit - slower as they're always
forced into the slow path. There is no reason to force this on everyone
especially given that more common static usage pattern can now completely
avoid write-locking the rwsem. Write-locking is elided when turning on and
off controllers on empty sub-trees and CLONE_INTO_CGROUP enables seeding a
cgroup without grabbing the rwsem.
Restore the default percpu operations and introduce the mount option
"favordynmods" and config option CGROUP_FAVOR_DYNMODS for users who need
lower latencies for the dynamic operations.
Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Christian Brauner <brauner@kernel.org>
Cc: Michal Koutn� <mkoutny@suse.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: John Stultz <john.stultz@linaro.org>
Cc: Dmitry Shmidt <dimitrysh@google.com>
Cc: Oleg Nesterov <oleg@redhat.com>
Diffstat (limited to 'kernel/cgroup/cgroup-internal.h')
| -rw-r--r-- | kernel/cgroup/cgroup-internal.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/kernel/cgroup/cgroup-internal.h b/kernel/cgroup/cgroup-internal.h index 5da09c74228d..36b740cb3d59 100644 --- a/kernel/cgroup/cgroup-internal.h +++ b/kernel/cgroup/cgroup-internal.h @@ -233,6 +233,7 @@ void cgroup_kn_unlock(struct kernfs_node *kn); int cgroup_path_ns_locked(struct cgroup *cgrp, char *buf, size_t buflen, struct cgroup_namespace *ns); +void cgroup_favor_dynmods(struct cgroup_root *root, bool favor); void cgroup_free_root(struct cgroup_root *root); void init_cgroup_root(struct cgroup_fs_context *ctx); int cgroup_setup_root(struct cgroup_root *root, u16 ss_mask); |
