From: Glauber Costa <glommer@parallels.com> To: <linux-kernel@vger.kernel.org> Cc: <cgroups@vger.kernel.org>, <linux-mm@kvack.org>, davej@redhat.com, ben@decadent.org.uk, a.p.zijlstra@chello.nl, pjt@google.com, lennart@poettering.net, kay.sievers@vrfy.org, tj@kernel.org, Glauber Costa <glommer@parallels.com> Subject: [RFC 1/5] cgroup: allow some comounts to be forced. Date: Tue, 4 Sep 2012 18:18:16 +0400 [thread overview] Message-ID: <1346768300-10282-2-git-send-email-glommer@parallels.com> (raw) In-Reply-To: <1346768300-10282-1-git-send-email-glommer@parallels.com> One of the pain points we have today with cgroups, is the excessive flexibility coming from the fact that controllers can be mounted at will, without any relationship with each other. Although this is nice in principle, this comes with a cost that is not always welcome in practice. The very fact of this being possible is already enough to trigger those costs. We cannot assume a common hierarchy between controllers, and then hierarchy walks have to be done more than once. This happens in hotpaths as well. This patch introduces a Kconfig option, default n, that will force some controllers to be comounted. After some time, we may be able to deprecate this mode of operation. Signed-off-by: Glauber Costa <glommer@parallels.com> CC: Dave Jones <davej@redhat.com> CC: Ben Hutchings <ben@decadent.org.uk> CC: Peter Zijlstra <a.p.zijlstra@chello.nl> CC: Paul Turner <pjt@google.com> CC: Lennart Poettering <lennart@poettering.net> CC: Kay Sievers <kay.sievers@vrfy.org> CC: Tejun Heo <tj@kernel.org> --- include/linux/cgroup.h | 6 ++++++ init/Kconfig | 4 ++++ kernel/cgroup.c | 29 ++++++++++++++++++++++++++++- 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h index d3f5fba..f986ad1 100644 --- a/include/linux/cgroup.h +++ b/include/linux/cgroup.h @@ -531,6 +531,12 @@ struct cgroup_subsys { /* should be defined only by modular subsystems */ struct module *module; + +#ifdef CONFIG_CGROUP_FORCE_COMOUNT + /* List of groups that we must be comounted with */ + int comounts; + int must_comount[3]; +#endif }; #define SUBSYS(_x) extern struct cgroup_subsys _x ## _subsys; diff --git a/init/Kconfig b/init/Kconfig index f64f888..d7d693d 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -680,6 +680,10 @@ config CGROUP_CPUACCT Provides a simple Resource Controller for monitoring the total CPU consumed by the tasks in a cgroup. +config CGROUP_FORCE_COMOUNT + bool + default n + config RESOURCE_COUNTERS bool "Resource counters" help diff --git a/kernel/cgroup.c b/kernel/cgroup.c index b303dfc..137ac62 100644 --- a/kernel/cgroup.c +++ b/kernel/cgroup.c @@ -1058,6 +1058,33 @@ static int rebind_subsystems(struct cgroupfs_root *root, if (root->number_of_cgroups > 1) return -EBUSY; +#ifdef CONFIG_CGROUP_FORCE_COMOUNT + /* + * Some subsystems should not be allowed to be freely mounted in + * separate hierarchies. They may not be present, but if they are, they + * should be together. For compatibility with older kernels, we'll allow + * this to live inside a separate Kconfig option. Each subsys will be + * able to tell us which other subsys it expects to be mounted with. + * + * We do a separate path for this, to avoid unwinding our modifications + * in case of an error. + */ + for (i = 0; i < CGROUP_SUBSYS_COUNT; i++) { + unsigned long bit = 1UL << i; + int j; + + if (!(bit & added_bits)) + continue; + + for (j = 0; j < subsys[i]->comounts; j++) { + int comount_id = subsys[i]->must_comount[j]; + struct cgroup_subsys *ss = subsys[comount_id]; + if ((ss->root != &rootnode) && (ss->root != root)) + return -EINVAL; + } + } +#endif + /* Process each subsystem */ for (i = 0; i < CGROUP_SUBSYS_COUNT; i++) { struct cgroup_subsys *ss = subsys[i]; @@ -1634,7 +1661,7 @@ static struct dentry *cgroup_mount(struct file_system_type *fs_type, goto unlock_drop; ret = rebind_subsystems(root, root->subsys_bits); - if (ret == -EBUSY) { + if ((ret == -EBUSY) || (ret == -EINVAL)) { free_cg_links(&tmp_cg_links); goto unlock_drop; } -- 1.7.11.4
next prev parent reply other threads:[~2012-09-04 14:22 UTC|newest] Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top 2012-09-04 14:18 [RFC 0/5] forced comounts for cgroups Glauber Costa 2012-09-04 14:18 ` Glauber Costa [this message] 2012-09-04 14:18 ` [RFC 2/5] sched: adjust exec_clock to use it as cpu usage metric Glauber Costa 2012-09-04 14:18 ` [RFC 3/5] sched: do not call cpuacct_charge when cpu and cpuacct are comounted Glauber Costa 2012-09-04 14:18 ` [RFC 4/5] cpuacct: do not gather cpuacct statistics when not mounted Glauber Costa 2012-09-04 14:18 ` [RFC 5/5] sched: add cpusets to comounts list Glauber Costa 2012-09-04 21:46 ` [RFC 0/5] forced comounts for cgroups Tejun Heo 2012-09-05 8:03 ` Glauber Costa 2012-09-05 8:14 ` Tejun Heo 2012-09-05 8:17 ` Glauber Costa 2012-09-05 8:29 ` Tejun Heo 2012-09-05 8:35 ` Glauber Costa 2012-09-05 8:47 ` Tejun Heo 2012-09-05 8:55 ` Glauber Costa 2012-09-05 9:07 ` Tejun Heo 2012-09-05 9:06 ` Glauber Costa 2012-09-05 9:14 ` Tejun Heo 2012-09-05 9:06 ` Peter Zijlstra 2012-09-05 9:07 ` Peter Zijlstra 2012-09-05 9:22 ` Tejun Heo 2012-09-05 9:11 ` Tejun Heo 2012-09-05 9:12 ` Glauber Costa 2012-09-05 9:19 ` Tejun Heo 2012-09-05 9:30 ` Glauber Costa 2012-09-05 9:26 ` Peter Zijlstra 2012-09-05 9:31 ` Glauber Costa 2012-09-05 9:45 ` Tejun Heo 2012-09-05 9:48 ` Glauber Costa 2012-09-05 9:56 ` Tejun Heo 2012-09-05 10:20 ` Peter Zijlstra 2012-09-06 20:38 ` Tejun Heo 2012-09-06 22:39 ` Glauber Costa 2012-09-06 22:45 ` Tejun Heo 2012-09-05 9:32 ` Tejun Heo 2012-09-05 10:04 ` Peter Zijlstra 2012-09-06 20:46 ` Tejun Heo 2012-09-06 21:11 ` Paul Turner 2012-09-06 22:36 ` Glauber Costa 2012-09-08 13:36 ` Dhaval Giani
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1346768300-10282-2-git-send-email-glommer@parallels.com \ --to=glommer@parallels.com \ --cc=a.p.zijlstra@chello.nl \ --cc=ben@decadent.org.uk \ --cc=cgroups@vger.kernel.org \ --cc=davej@redhat.com \ --cc=kay.sievers@vrfy.org \ --cc=lennart@poettering.net \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=pjt@google.com \ --cc=tj@kernel.org \ --subject='Re: [RFC 1/5] cgroup: allow some comounts to be forced.' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).