From: Mike Galbraith <umgwanakikbuti-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
torvalds-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org,
akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org,
a.p.zijlstra-/NLkJaSkS4VmR6Xm/wNWPw@public.gmane.org,
mingo-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
lizefan-hv44wF8Li93QT0dZR+AlfA@public.gmane.org,
hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org,
pjt-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
kernel-team-b10kYP2dOMg@public.gmane.org
Subject: Re: [PATCHSET RFC cgroup/for-4.6] cgroup, sched: implement resource group and PRIO_RGRP
Date: Sat, 12 Mar 2016 07:26:59 +0100 [thread overview]
Message-ID: <1457764019.10402.72.camel@gmail.com> (raw)
In-Reply-To: <1457710888-31182-1-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
On Fri, 2016-03-11 at 10:41 -0500, Tejun Heo wrote:
> Hello,
>
> This patchset extends cgroup v2 to support rgroup (resource group) for
> in-process hierarchical resource control and implements PRIO_RGRP for
> setpriority(2) on top to allow in-process hierarchical CPU cycle
> control in a seamless way.
>
> cgroup v1 allowed putting threads of a process in different cgroups
> which enabled ad-hoc in-process resource control of some resources.
> Unfortunately, this approach was fraught with problems such as
> membership ambiguity with per-process resources and lack of isolation
> between system management and in-process properties. For a more
> detailed discussion on the subject, please refer to the following
> message.
>
> [1] [RFD] cgroup: thread granularity support for cpu controller
>
> This patchset implements the mechanism outlined in the above message.
> The new mechanism is named rgroup (resource group). When explicitly
> designating a non-rgroup cgroup, the term sgroup (system group) is
> used. rgroup has the following properties.
>
> * A rgroup is a cgroup which is invisible on and transparent to the
> system-level cgroupfs interface.
>
> * A rgroup can be created by specifying CLONE_NEWRGRP flag, along with
> CLONE_THREAD, during clone(2). A new rgroup is created under the
> parent thread's cgroup and the new thread is created in it.
>
> * A rgroup is automatically destroyed when empty.
>
> * A top-level rgroup of a process is a rgroup whose parent cgroup is a
> sgroup. A process may have multiple top-level rgroups and thus
> multiple rgroup subtrees under the same parent sgroup.
>
> * Unlike sgroups, rgroups are allowed to compete against peer threads.
> Each rgroup behaves equivalent to a sibling task.
>
> * rgroup subtrees are local to the process. When the process forks or
> execs, its rgroup subtrees are collapsed.
>
> * When a process is migrated to a different cgroup, its rgroup
> subtrees are preserved.
>
> * Subset of controllers available on the parent sgroup are available
> to rgroup subtrees. Controller management on rgroups is automatic
> and implicit and doesn't interfere with system-level cgroup
> controller management. If a controller is made unavailable on the
> parent sgroup, it's automatically disabled from child rgroup
> subtrees.
>
> rgroup lays the foundation for other kernel mechanisms to make use of
> resource controllers while providing proper isolation between system
> management and in-process operations removing the awkward and
> layer-violating requirement for coordination between individual
> applications and system management. On top of the rgroup mechanism,
> PRIO_RGRP is implemented for {set|get}priority(2).
>
> * PRIO_RGRP can only be used if the target task is already in a
> rgroup. If setpriority(2) is used and cpu controller is available,
> cpu controller is enabled until the target rgroup is covered and the
> specified nice value is set as the weight of the rgroup.
>
> * The specified nice value has the same meaning as for tasks. For
> example, a rgroup and a task competing under the same parent would
> behave exactly the same as two tasks.
>
> * For top-level rgroups, PRIO_RGRP follows the same rlimit
> restrictions as PRIO_PROCESS; however, as nested rgroups only
> distribute CPU cycles which are allocated to the process, no
> restriction is applied.
>
> PRIO_RGRP allows in-process hierarchical control of CPU cycles in a
> manner which is a straight-forward and minimal extension of existing
> task and priority management.
Hrm. You're showing that per-thread groups can coexist just fine,
which is good given need and usage exists today out in the wild. Why
do such groups have to be invisible with a unique interface though?
Given the core has to deal with them whether they're visible or not,
and given they exist to fulfill a need, seems they should be first
class citizens, not some Quasimodo like creature sneaking into the
cathedral via a back door and slinking about in the shadows.
-Mike
next prev parent reply other threads:[~2016-03-12 6:26 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-11 15:41 [PATCHSET RFC cgroup/for-4.6] cgroup, sched: implement resource group and PRIO_RGRP Tejun Heo
2016-03-11 15:41 ` [PATCH 02/10] cgroup: un-inline cgroup_path() and friends Tejun Heo
2016-03-11 15:41 ` [PATCH 04/10] signal: make put_signal_struct() public Tejun Heo
2016-03-11 15:41 ` [PATCH 06/10] cgroup, fork: add @child and @clone_flags to threadgroup_change_begin/end() Tejun Heo
[not found] ` <1457710888-31182-1-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2016-03-11 15:41 ` [PATCH 01/10] cgroup: introduce cgroup_[un]lock() Tejun Heo
2016-03-11 15:41 ` [PATCH 03/10] cgroup: introduce CGRP_MIGRATE_* flags Tejun Heo
2016-03-11 15:41 ` [PATCH 05/10] cgroup, fork: add @new_rgrp_cset[p] and @clone_flags to cgroup fork callbacks Tejun Heo
2016-03-11 15:41 ` [PATCH 07/10] cgroup: introduce resource group Tejun Heo
2016-03-11 15:41 ` [PATCH 08/10] cgroup: implement rgroup control mask handling Tejun Heo
2016-03-11 15:41 ` [PATCH 10/10] cgroup, sched: implement PRIO_RGRP for {set|get}priority() Tejun Heo
2016-03-12 6:26 ` Mike Galbraith [this message]
[not found] ` <1457764019.10402.72.camel-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2016-03-12 17:04 ` [PATCHSET RFC cgroup/for-4.6] cgroup, sched: implement resource group and PRIO_RGRP Mike Galbraith
[not found] ` <1457802262.3628.129.camel-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2016-03-12 17:13 ` cgroup NAKs ignored? " Ingo Molnar
[not found] ` <20160312171318.GD1108-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2016-03-13 14:42 ` Tejun Heo
2016-03-13 15:00 ` Tejun Heo
[not found] ` <20160313150012.GB13405-piEFEHQLUPpN0TnZuCh8vA@public.gmane.org>
2016-03-13 17:40 ` Mike Galbraith
[not found] ` <1457890835.3859.72.camel-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2016-04-07 0:00 ` Tejun Heo
[not found] ` <20160407000034.GL24661-piEFEHQLUPpN0TnZuCh8vA@public.gmane.org>
2016-04-07 3:26 ` Mike Galbraith
2016-03-14 2:23 ` Mike Galbraith
2016-03-14 11:30 ` Peter Zijlstra
[not found] ` <20160314113013.GM6344-ndre7Fmf5hadTX5a5knrm8zTDFooKrT+cvkQGrU6aU0@public.gmane.org>
2016-04-06 15:58 ` Tejun Heo
[not found] ` <20160406155830.GI24661-piEFEHQLUPpN0TnZuCh8vA@public.gmane.org>
2016-04-07 6:45 ` Peter Zijlstra
[not found] ` <20160407064549.GH3430-ndre7Fmf5hadTX5a5knrm8zTDFooKrT+cvkQGrU6aU0@public.gmane.org>
2016-04-07 7:35 ` Johannes Weiner
[not found] ` <20160407073547.GA12560-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2016-04-07 8:05 ` Mike Galbraith
2016-04-07 8:08 ` Peter Zijlstra
[not found] ` <20160407080833.GK3430-ndre7Fmf5hadTX5a5knrm8zTDFooKrT+cvkQGrU6aU0@public.gmane.org>
2016-04-07 9:28 ` Johannes Weiner
[not found] ` <20160407092824.GA13839-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2016-04-07 10:42 ` Peter Zijlstra
2016-04-07 19:45 ` Tejun Heo
[not found] ` <20160407194555.GI7822-qYNAdHglDFBN0TnZuCh8vA@public.gmane.org>
2016-04-07 20:25 ` Peter Zijlstra
[not found] ` <20160407202542.GD3448-ndre7Fmf5hadTX5a5knrm8zTDFooKrT+cvkQGrU6aU0@public.gmane.org>
2016-04-08 20:11 ` Tejun Heo
[not found] ` <20160408201135.GO24661-piEFEHQLUPpN0TnZuCh8vA@public.gmane.org>
2016-04-09 6:16 ` Mike Galbraith
2016-04-09 13:39 ` Peter Zijlstra
[not found] ` <20160409133917.GV3448-ndre7Fmf5hadTX5a5knrm8zTDFooKrT+cvkQGrU6aU0@public.gmane.org>
2016-04-12 22:29 ` Tejun Heo
[not found] ` <20160412222915.GT24661-piEFEHQLUPpN0TnZuCh8vA@public.gmane.org>
2016-04-13 7:43 ` Mike Galbraith
2016-04-13 15:59 ` Tejun Heo
[not found] ` <20160413155952.GU24661-piEFEHQLUPpN0TnZuCh8vA@public.gmane.org>
2016-04-13 19:15 ` Mike Galbraith
2016-04-14 6:07 ` Mike Galbraith
[not found] ` <1460614057.5100.150.camel-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2016-04-14 19:57 ` Tejun Heo
[not found] ` <20160414195748.GK7822-qYNAdHglDFBN0TnZuCh8vA@public.gmane.org>
2016-04-15 2:42 ` Mike Galbraith
2016-04-09 16:02 ` Peter Zijlstra
2016-04-07 8:28 ` Peter Zijlstra
[not found] ` <20160407082810.GN3430-ndre7Fmf5hadTX5a5knrm8zTDFooKrT+cvkQGrU6aU0@public.gmane.org>
2016-04-07 19:04 ` Johannes Weiner
[not found] ` <20160407190424.GA20407-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2016-04-07 19:31 ` Peter Zijlstra
[not found] ` <20160407193127.GB3448-ndre7Fmf5hadTX5a5knrm8zTDFooKrT+cvkQGrU6aU0@public.gmane.org>
2016-04-07 20:23 ` Johannes Weiner
[not found] ` <20160407202344.GA22509-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2016-04-08 3:13 ` Mike Galbraith
2016-03-15 17:21 ` Michal Hocko
[not found] ` <20160315172136.GA6114-2MMpYkNvuYDjFM9bn6wA6Q@public.gmane.org>
2016-04-06 21:53 ` Tejun Heo
[not found] ` <20160406215307.GJ24661-piEFEHQLUPpN0TnZuCh8vA@public.gmane.org>
2016-04-07 6:40 ` Peter Zijlstra
2016-03-11 15:41 ` [PATCH 09/10] cgroup: implement rgroup subtree migration Tejun Heo
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=1457764019.10402.72.camel@gmail.com \
--to=umgwanakikbuti-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
--cc=a.p.zijlstra-/NLkJaSkS4VmR6Xm/wNWPw@public.gmane.org \
--cc=akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org \
--cc=cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org \
--cc=kernel-team-b10kYP2dOMg@public.gmane.org \
--cc=linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=lizefan-hv44wF8Li93QT0dZR+AlfA@public.gmane.org \
--cc=mingo-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=pjt-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
--cc=tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=torvalds-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@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;
as well as URLs for NNTP newsgroup(s).