[Devel] [PATCH RHEL9 COMMIT] ms/cgroup: no need for cgroup_mutex for /proc/cgroups

Konstantin Khorenko khorenko at virtuozzo.com
Tue Apr 26 14:16:27 MSK 2022


The commit is pushed to "branch-rh9-5.14.0-42.vz9.15.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git
after rh9-5.14.0-42.vz9.15.1
------>
commit 8f06bdaac90996b40a40b656c4904c0e425225c8
Author: Shakeel Butt <shakeelb at google.com>
Date:   Sun Oct 24 23:19:16 2021 -0700

    ms/cgroup: no need for cgroup_mutex for /proc/cgroups
    
    On the real systems, the cgroups hierarchies are setup early and just
    once by the node controller, so, other than number of cgroups, all
    information in /proc/cgroups remain same for the system uptime. Let's
    remove the cgroup_mutex usage on reading /proc/cgroups. There is a
    chance of inconsistent number of cgroups for co-mounted cgroups while
    printing the information from /proc/cgroups but that is not a big
    issue. In addition /proc/cgroups is a v1 specific interface, so the
    dependency on it should reduce over time.
    
    The main motivation for removing the cgroup_mutex from /proc/cgroups is
    to reduce the avenues of its contention. On our fleet, we have observed
    buggy application hammering on /proc/cgroups and drastically slowing
    down the node controller on the system which have many negative
    consequences on other workloads running on the system.
    
    Signed-off-by: Shakeel Butt <shakeelb at google.com>
    Signed-off-by: Tejun Heo <tj at kernel.org>
    
    https://jira.sw.ru/browse/PSBM-139206
    (cherry picked from ms commit 822bc9bac9e9a2f76a772a34f745962dfc223353)
    Signed-off-by: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
    Signed-off-by: Konstantin Khorenko <khorenko at virtuozzo.com>
    
    Feature: fix ms/cgroup
---
 kernel/cgroup/cgroup-v1.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/kernel/cgroup/cgroup-v1.c b/kernel/cgroup/cgroup-v1.c
index 87129fa3abe2..373de35e68b6 100644
--- a/kernel/cgroup/cgroup-v1.c
+++ b/kernel/cgroup/cgroup-v1.c
@@ -730,11 +730,9 @@ int proc_cgroupstats_show(struct seq_file *m, void *v)
 
 	seq_puts(m, "#subsys_name\thierarchy\tnum_cgroups\tenabled\n");
 	/*
-	 * ideally we don't want subsystems moving around while we do this.
-	 * cgroup_mutex is also necessary to guarantee an atomic snapshot of
-	 * subsys/hierarchy state.
+	 * Grab the subsystems state racily. No need to add avenue to
+	 * cgroup_mutex contention.
 	 */
-	mutex_lock(&cgroup_mutex);
 
 	for_each_subsys(ss, i) {
 #ifdef CONFIG_VE
@@ -748,7 +746,6 @@ int proc_cgroupstats_show(struct seq_file *m, void *v)
 			   cgroup_ssid_enabled(i));
 	}
 
-	mutex_unlock(&cgroup_mutex);
 	return 0;
 }
 


More information about the Devel mailing list