From: Li Zefan <lizefan-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
To: Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
Cc: cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCHSET cgroup/for-3.16] cgroup: implement unified hierarchy, v2
Date: Wed, 16 Apr 2014 10:35:39 +0800 [thread overview]
Message-ID: <534DEC7B.3070300@huawei.com> (raw)
In-Reply-To: <1397511430-2673-1-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
On 2014/4/15 5:36, Tejun Heo wrote:
> Hello,
>
> This is v2 of the unified hierarchy patchset. Changes from v1[1] are,
>
> * Rebased on top of v3.15-rc1
>
> * Interface file "cgroup.controllers" which was only available in the
> root is now available in all cgroups. This allows, e.g., a
> sub-manager in charge of a subtree to tell which controllers are
> available to it.
>
> cgroup currently allows creating arbitrary number of hierarchies and
> any number of controllers may be associated with a given tree. This
> allows for huge amount of variance how tasks are associated with
> various cgroups and controllers; unfortunately, the variance is
> extreme to the extent that it unnecessarily complicates capabilities
> which can otherwise be straight-forward and hinders implementation of
> features which can benefit from coordination among different
> controllers.
>
> Here are some of the issues which we're facing with the current
> multiple hierarchies.
>
> * cgroup membership of a task can't be described in finite number of
> paths. As there can be arbitrary number of hierarchies, the key
> describing a task's cgroup membership can be arbitrarily long. This
> is painful when userland or other parts of the kernel needs to take
> cgroup membership into account and leads to proliferation of
> controllers which are just there to identify membership rather than
> actually control resources, which in turn exacerbates the problem.
>
> * Different controllers may or may not reside on the same hierarchy.
> Features or optimizations which can benefit from sharing the
> hierarchical organization either can't be implemented or becomes
> overly complicated.
>
> * Tasks of a process may belong to different cgroups, which doesn't
> make any sense for some controllers. Those controllers end up
> ignoring such configurations in their own ways leading to
> inconsistent behavior. In addition, in-process resource control
> fundamentally isn't something which belongs to cgroup. As it has to
> be visible to the binary for the process, it must be part of the
> stable programming interface which is easily accessible to the
> process proper in an easy race-free way.
>
> * The current cgroup allows cgroups which have child cgroups to have
> tasks in it. This means that the child cgroups end up competing
> against the internal tasks. This introduces inherent ambiguity as
> the two are separate types of entities and the latter doesn't have
> the same control knobs assigned to them.
>
> Different controllers are dealing with the issue in different ways.
> cpu treats internal tasks and child cgroups as equivalents, which
> makes giving a child cgroup a given ratio of the parent's cpu time
> difficult as the number of competing entities may fluctuate without
> any indication. blkio, in my misguided attempt to deal with the
> issue, introduced a whole duplicate set of knobs for internal tasks
> and deal with them as if they belong to a separate child cgroup
> making the interface and implementation a mess. memcg seems
> somewhat ambiguous on the issue but there are attempts to introduce
> ad-hoc modifications to tilt the way it's handled to suit specific
> use cases.
>
> This is an inherent problem. All of the solutions that different
> controllers came up with are unsatisfactory, the different behaviors
> greatly increases the level of inconsistency and complicates the
> controller implementations.
>
> This patchset finally implements the default unified hierarchy. The
> goal is providing enough flexibility while enforcing stricter common
> structure where appropriate to address the above listed issues.
>
> Controllers which aren't bound to other hierarchies are
> automatically attached to the unified hierarchy, which is different in
> that controllers are enabled explicitly for each subtree.
> "cgroup.subtree_control" controls which controllers are enabled on the
> child cgroups. Let's assume a hierarchy like the following.
>
> root - A - B - C
> \ D
>
> root's "cgroup.subtree_control" determines which controllers are
> enabled on A. A's on B. B's on C and D. This coincides with the
> fact that controllers on the immediate sub-level are used to
> distribute the resources of the parent. In fact, it's natural to
> assume that resource control knobs of a child belong to its parent.
> Enabling a controller in "cgroup.subtree_control" declares that
> distribution of the respective resources of the cgroup will be
> controlled. Note that this means that controller enable states are
> shared among siblings.
>
> The default hierarchy has an extra restriction - only cgroups which
> don't contain any task may have controllers enabled in
> "cgroup.subtree_control". Combined with the other properties of the
> default hierarchy, this guarantees that, from the view point of
> controllers, tasks are only on the leaf cgroups. In other words, only
> leaf csses may contain tasks. This rules out situations where child
> cgroups compete against internal tasks of the parent.
>
> This patchset contains the following twelve patches.
>
> 0001-cgroup-update-cgroup-subsys_mask-to-child_subsys_mas.patch
> 0002-cgroup-introduce-effective-cgroup_subsys_state.patch
> 0003-cgroup-implement-cgroup-e_csets.patch
> 0004-cgroup-make-css_next_child-skip-missing-csses.patch
> 0005-cgroup-reorganize-css_task_iter.patch
> 0006-cgroup-teach-css_task_iter-about-effective-csses.patch
> 0007-cgroup-cgroup-subsys-should-be-cleared-after-the-css.patch
> 0008-cgroup-allow-cgroup-creation-and-suppress-automatic-.patch
> 0009-cgroup-add-css_set-dfl_cgrp.patch
> 0010-cgroup-update-subsystem-rebind-restrictions.patch
> 0011-cgroup-prepare-migration-path-for-unified-hierarchy.patch
> 0012-cgroup-implement-dynamic-subtree-controller-enable-d.patch
>
Acked-by: Li Zefan <lizefan-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
next prev parent reply other threads:[~2014-04-16 2:35 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-14 21:36 [PATCHSET cgroup/for-3.16] cgroup: implement unified hierarchy, v2 Tejun Heo
[not found] ` <1397511430-2673-1-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2014-04-14 21:36 ` [PATCH 01/12] cgroup: update cgroup->subsys_mask to ->child_subsys_mask and restore cgroup_root->subsys_mask Tejun Heo
2014-04-14 21:37 ` [PATCH 02/12] cgroup: introduce effective cgroup_subsys_state Tejun Heo
2014-04-14 21:37 ` [PATCH 03/12] cgroup: implement cgroup->e_csets[] Tejun Heo
2014-04-14 21:37 ` [PATCH 04/12] cgroup: make css_next_child() skip missing csses Tejun Heo
2014-04-14 21:37 ` [PATCH 05/12] cgroup: reorganize css_task_iter Tejun Heo
2014-04-14 21:37 ` [PATCH 06/12] cgroup: teach css_task_iter about effective csses Tejun Heo
2014-04-14 21:37 ` [PATCH 07/12] cgroup: cgroup->subsys[] should be cleared after the css is offlined Tejun Heo
2014-04-14 21:37 ` [PATCH 08/12] cgroup: allow cgroup creation and suppress automatic css creation in the unified hierarchy Tejun Heo
2014-04-14 21:37 ` [PATCH 09/12] cgroup: add css_set->dfl_cgrp Tejun Heo
2014-04-14 21:37 ` [PATCH 10/12] cgroup: update subsystem rebind restrictions Tejun Heo
2014-04-14 21:37 ` [PATCH 11/12] cgroup: prepare migration path for unified hierarchy Tejun Heo
2014-04-14 21:37 ` [PATCH 12/12] cgroup: implement dynamic subtree controller enable/disable on the default hierarchy Tejun Heo
2014-04-14 21:45 ` [PATCHSET cgroup/for-3.16] cgroup: implement unified hierarchy, v2 Tejun Heo
2014-04-15 2:23 ` Li Zefan
[not found] ` <534C983B.7080701-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2014-04-15 22:08 ` Tejun Heo
2014-04-15 22:06 ` [PATCH 0.5/12] cgroup: cgroup_apply_cftypes() shouldn't skip the default hierarhcy Tejun Heo
2014-04-16 2:35 ` Li Zefan [this message]
2014-04-23 15:14 ` [PATCHSET cgroup/for-3.16] cgroup: implement unified hierarchy, v2 Tejun Heo
2014-04-30 10:52 ` Raghavendra KT
[not found] ` <1397511430-2673-13-git-send-email-tj@kernel.org>
[not found] ` <1397511430-2673-13-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2014-04-17 18:03 ` [PATCH 12/12] cgroup: implement dynamic subtree controller enable/disable on the default hierarchy Raghavendra KT
[not found] ` <CAC4Lta0tD=FbtVpGnLw2sKMY69+AnqYqaOvCQdFs88JeR5Pemw@mail.gmail.com>
[not found] ` <CAC4Lta0tD=FbtVpGnLw2sKMY69+AnqYqaOvCQdFs88JeR5Pemw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-04-18 20:41 ` Tejun Heo
[not found] ` <20140418204108.GL23576@htj.dyndns.org>
[not found] ` <20140418204108.GL23576-Gd/HAXX7CRxy/B6EtB590w@public.gmane.org>
2014-04-21 8:17 ` Raghavendra K T
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=534DEC7B.3070300@huawei.com \
--to=lizefan-hv44wf8li93qt0dzr+alfa@public.gmane.org \
--cc=cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
/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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox