cgroup: Make !percpu threadgroup_rwsem operations optional
authorTejun Heo <tj@kernel.org>
Sat, 23 Jul 2022 14:28:28 +0000 (04:28 -1000)
committerTejun Heo <tj@kernel.org>
Sat, 23 Jul 2022 14:29:02 +0000 (04:29 -1000)
commit6a010a49b63ac8465851a79185d8deff966f8e1a
tree98368122cf356fc26b4545176031481c42f649bd
parent30312730bd029f567045c38098d7e5a62e9aa658
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>
Documentation/admin-guide/cgroup-v2.rst
include/linux/cgroup-defs.h
init/Kconfig
kernel/cgroup/cgroup-internal.h
kernel/cgroup/cgroup-v1.c
kernel/cgroup/cgroup.c