public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: "Michael Kerrisk (man-pages)" <mtk.manpages@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>, Ingo Molnar <mingo@kernel.org>,
	linux-man <linux-man@vger.kernel.org>,
	lkml <linux-kernel@vger.kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>
Subject: Re: RFC: documentation of the autogroup feature [v2]
Date: Fri, 25 Nov 2016 17:04:56 +0100	[thread overview]
Message-ID: <20161125160456.GP3092@twins.programming.kicks-ass.net> (raw)
In-Reply-To: <ca16c155-22be-df06-4f2d-4337b72381de@gmail.com>

On Fri, Nov 25, 2016 at 04:04:25PM +0100, Michael Kerrisk (man-pages) wrote:
> >>        ┌─────────────────────────────────────────────────────┐
> >>        │FIXME                                                │
> >>        ├─────────────────────────────────────────────────────┤
> >>        │How do the nice value of  a  process  and  the  nice │
> >>        │value of an autogroup interact? Which has priority?  │
> >>        │                                                     │
> >>        │It  *appears*  that the autogroup nice value is used │
> >>        │for CPU distribution between task groups,  and  that │
> >>        │the  process nice value has no effect there.  (I.e., │
> >>        │suppose two  autogroups  each  contain  a  CPU-bound │
> >>        │process,  with  one  process  having nice==0 and the │
> >>        │other having nice==19.  It appears  that  they  each │
> >>        │get  50%  of  the CPU.)  It appears that the process │
> >>        │nice value has effect only with respect to  schedul‐ │
> >>        │ing  relative to other processes in the *same* auto‐ │
> >>        │group.  Is this correct?                             │
> >>        └─────────────────────────────────────────────────────┘
> > 
> > Yup, entity nice level affects distribution among peer entities.
> 
> Huh! I only just learned about this via my experiments while
> investigating autogroups. 
> 
> How long have things been like this? Always? (I don't think
> so.) Since the arrival of CFS? Since the arrival of
> autogrouping? (I'm guessing not.) Since some other point?
> (When?)

Ever since cfs-cgroup, this is a fundamental design point of cgroups,
and has therefore always been the case for autogroups (as that is
nothing more than an application of the cgroup code).

> It seems to me that this renders the traditional process
> nice pretty much useless. (I bet I'm not the only one who'd 
> be surprised by the current behavior.)

Its really rather fundamental to how the whole hierarchical things
works.

CFS is a weighted fair queueing scheduler; this means each entity
receives:

               w_i
  dt_i = dt --------
	    \Sum w_j


		CPU
	  ______/ \______
	 /    |     |	 \
        A     B     C     D


So if each entity {A,B,C,D} has equal weight, then they will receive
equal time. Explicitly, for C you get:


                      w_C
  dt_C = dt -----------------------
            (w_A + w_B + w_C + w_D)


Extending this to a hierarchy, we get:


		CPU
	  ______/ \______
	 /    |     |	 \
        A     B     C     D
	           / \
		  E   F

Where C becomes a 'server' for entities {E,F}. The weight of C does not
depend on its child entities. This way the time of {E,F} becomes a
straight product of their ratio with C. That is; the whole thing
becomes, where l denotes the level in the hierarchy and i an
entity on that level:

                 l      w_g,i
  dt_l,i = dt \Prod  ----------
                g=0  \Sum w_g,j


Or more concretely, for E:

                      w_E
  dt_1,E = dt_0,C -----------
                  (w_E + w_F)

                        w_C               w_E
         = dt ----------------------- -----------
              (w_A + w_B + w_C + w_D) (w_E + w_F)


And this 'trivially' extends to SMP, with the tricky bit being that the
sums over all entities end up being machine wide, instead of per CPU,
which is a real and royal pain for performance.


Note that this property, where the weight of the server entity is
independent from its child entities is a desired feature. Without that
it would be impossible to control the relative weights of groups, and
that is the sole parameter of the WFQ model.

It is also why Linus so likes autogroups, each session competes equally
amongst one another.

  parent reply	other threads:[~2016-11-25 16:06 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-11-22 15:59 RFC: documentation of the autogroup feature Michael Kerrisk (man-pages)
2016-11-23 10:33 ` [patch] sched/autogroup: Fix 64bit kernel nice adjustment Mike Galbraith
2016-11-23 13:47   ` Michael Kerrisk (man-pages)
2016-11-23 14:12     ` Mike Galbraith
2016-11-23 14:20       ` Michael Kerrisk (man-pages)
2016-11-23 15:55         ` Mike Galbraith
2016-11-24  6:24   ` [tip:sched/urgent] sched/autogroup: Fix 64-bit kernel nice level adjustment tip-bot for Mike Galbraith
2016-11-23 11:39 ` RFC: documentation of the autogroup feature Mike Galbraith
2016-11-23 13:54   ` Michael Kerrisk (man-pages)
2016-11-23 15:33     ` Mike Galbraith
2016-11-23 16:04       ` Michael Kerrisk (man-pages)
2016-11-23 17:11         ` Mike Galbraith
2016-11-24 21:41           ` RFC: documentation of the autogroup feature [v2] Michael Kerrisk (man-pages)
2016-11-25 12:52             ` Afzal Mohammed
2016-11-25 13:04               ` Michael Kerrisk (man-pages)
2016-11-25 13:02             ` Mike Galbraith
2016-11-25 15:04               ` Michael Kerrisk (man-pages)
2016-11-25 15:48                 ` Michael Kerrisk (man-pages)
2016-11-25 15:51                 ` Mike Galbraith
2016-11-25 16:08                   ` Michael Kerrisk (man-pages)
2016-11-25 16:18                     ` Peter Zijlstra
2016-11-25 16:34                       ` Michael Kerrisk (man-pages)
2016-11-25 20:54                         ` Michael Kerrisk (man-pages)
2016-11-25 21:49                           ` Peter Zijlstra
2016-11-29  7:43                             ` Michael Kerrisk (man-pages)
2016-11-29 11:46                               ` Peter Zijlstra
2016-11-29 13:44                                 ` Michael Kerrisk (man-pages)
2016-11-25 16:04                 ` Peter Zijlstra [this message]
2016-11-25 16:13                   ` Peter Zijlstra
2016-11-25 16:33                   ` Michael Kerrisk (man-pages)
2016-11-25 22:48                     ` Peter Zijlstra
2016-11-23 16:05       ` RFC: documentation of the autogroup feature Michael Kerrisk (man-pages)
2016-11-23 17:19         ` Mike Galbraith
2016-11-23 22:12           ` Michael Kerrisk (man-pages)
2016-11-27 21:13       ` Michael Kerrisk (man-pages)
2016-11-28  1:46         ` Mike Galbraith
     [not found]           ` <1127218a-dd9b-71a8-845d-3a83969632fc@gmail.com>
2016-11-29  9:10             ` Michael Kerrisk (man-pages)
2016-11-29 13:46               ` Mike Galbraith

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=20161125160456.GP3092@twins.programming.kicks-ass.net \
    --to=peterz@infradead.org \
    --cc=efault@gmx.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-man@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=mtk.manpages@gmail.com \
    --cc=tglx@linutronix.de \
    /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