linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Paul Turner <pjt@google.com>
To: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: linux-kernel@vger.kernel.org, Venki Pallipadi <venki@google.com>,
	Srivatsa Vaddagiri <vatsa@in.ibm.com>,
	Mike Galbraith <efault@gmx.de>,
	Kamalesh Babulal <kamalesh@linux.vnet.ibm.com>,
	Ben Segall <bsegall@google.com>, Ingo Molnar <mingo@elte.hu>,
	Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>
Subject: Re: [RFC PATCH 13/14] sched: make __update_entity_runnable_avg() fast
Date: Fri, 17 Feb 2012 04:49:08 -0800	[thread overview]
Message-ID: <CAPM31RJ6jv-ERZ=kP2x3037z-iR+V96cS=MyFBC2Ohs-3Vq2WQ@mail.gmail.com> (raw)
In-Reply-To: <1328561306.2482.32.camel@laptop>

On Mon, Feb 6, 2012 at 12:48 PM, Peter Zijlstra <a.p.zijlstra@chello.nl> wrote:
> On Wed, 2012-02-01 at 17:38 -0800, Paul Turner wrote:
>> +/* Precomputed fixed inverse multiplies for multiplication by y^n */
>> +const static u32 runnable_avg_yN_inv[] = {
>> +       0xffffffff,0xfa83b2db,0xf5257d15,0xefe4b99b,0xeac0c6e7,0xe5b906e7,
>> +       0xe0ccdeec,0xdbfbb797,0xd744fcca,0xd2a81d91,0xce248c15,0xc9b9bd86,
>> +       0xc5672a11,0xc12c4cca,0xbd08a39f,0xb8fbaf47,0xb504f333,0xb123f581,
>> +       0xad583eea,0xa9a15ab4,0xa5fed6a9,0xa2704303,0x9ef53260,0x9b8d39b9,
>> +       0x9837f051,0x94f4efa8,0x91c3d373,0x8ea4398b,0x8b95c1e3,0x88980e80,
>> +       0x85aac367,0x82cd8698,
>> +};
>
> I wonder if modern Intel isn't at the point where computing this thing
> is cheaper than the cacheline miss. You can compute y^n in O(log n) time
> and with n < 32 that's 5 multiplications (see fixed_power_int). Add to
> that the division.
>
> Of course there's platforms, ARM?, where reverse is likely true. Bugger
> that.
>
>> +/* Precomputed \Sum y^k { 1<=k<=n } */
>> +const static u32 runnable_avg_yN_sum[] = {
>> +           0, 1002, 1982, 2941, 3880, 4798, 5697, 6576, 7437, 8279, 9103,
>> +        9909,10698,11470,12226,12966,13690,14398,15091,15769,16433,17082,
>> +       17718,18340,18949,19545,20128,20698,21256,21802,22336,22859,23371,
>> +};
>
> Right, can't see a fast way to compute this..
>
> The asymmetry in the tables annoys me though 32 vs 33 entries,

We could shrink yN sum to 32 entries but then
__compute_runnable_contrib() ends up a lot uglier with a bunch of
conditionals about the n=0 case.  (and if we did that the same
argument could then be made for making runnable_avg_yN_inv 31
entries.. at which point we're asymmetric again.. ahhhhh!! must go
sort my pencils..)

>hex vs dec :-)
>

So I personally think hex versus dec is somewhat reasonable in that:

\Sum y^n converges to a/(1-r) -- about ~47k -- which is a very human
readable number.  It's easy to do the mental math on what a given
entry in that table is going to do to your runnable_avg / runnable_sum
from just looking at it.

Conversely, for the inverse multiplies they're the completely
unintelligible ~0*y^k.  We could write them in decimal, but the table
would just be enormous.

Since the second case would be enormously ugly and we already have
precedent for using hex for inverses wmult; the only unified option is
then to use hex for both.  But then I personally certainly can't
eyeball the numbers for \Sum y^n in the same fashion.  But perhaps
this is something we can lose.

  reply	other threads:[~2012-02-17 12:49 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-02  1:38 [RFC PATCH 00/14] sched: entity load-tracking re-work Paul Turner
2012-02-02  1:38 ` [RFC PATCH 05/14] sched: account for blocked load waking back up Paul Turner
2012-02-16 15:57   ` Peter Zijlstra
2012-02-17 13:00     ` Paul Turner
2012-02-16 16:02   ` Peter Zijlstra
2012-02-17 11:39     ` Paul Turner
2012-02-02  1:38 ` [RFC PATCH 01/14] sched: track the runnable average on a per-task entitiy basis Paul Turner
2012-02-15 23:37   ` Peter Zijlstra
2012-02-17 11:43     ` Paul Turner
2012-02-16 13:27   ` Peter Zijlstra
2012-02-17 11:44     ` Paul Turner
2012-02-02  1:38 ` [RFC PATCH 07/14] sched: compute load contribution by a group entity Paul Turner
2012-02-02  1:38 ` [RFC PATCH 06/14] sched: aggregate total task_group load Paul Turner
2012-02-17  4:41   ` Nikunj A Dadhania
2012-02-17 10:52     ` Paul Turner
2012-02-02  1:38 ` [RFC PATCH 03/14] sched: aggregate load contributed by task entities on parenting cfs_rq Paul Turner
2012-02-02  1:38 ` [RFC PATCH 04/14] sched: maintain the load contribution of blocked entities Paul Turner
2012-02-16 12:25   ` Peter Zijlstra
2012-02-17 11:53     ` Paul Turner
2012-02-02  1:38 ` [RFC PATCH 02/14] sched: maintain per-rq runnable averages Paul Turner
2012-02-02  1:38 ` [RFC PATCH 08/14] sched: normalize tg load contributions against runnable time Paul Turner
2012-02-15 23:36   ` Peter Zijlstra
2012-02-17 12:32     ` Paul Turner
2012-02-20 16:10       ` Peter Zijlstra
2012-02-17 12:34     ` Peter Zijlstra
2012-02-15 23:38   ` Peter Zijlstra
2012-02-02  1:38 ` [RFC PATCH 09/14] sched: maintain runnable averages across throttled periods Paul Turner
2012-02-02  1:38 ` [RFC PATCH 12/14] sched: update_cfs_shares at period edge Paul Turner
2012-02-02  1:38 ` [RFC PATCH 13/14] sched: make __update_entity_runnable_avg() fast Paul Turner
2012-02-06 20:48   ` Peter Zijlstra
2012-02-17 12:49     ` Paul Turner [this message]
2012-02-02  1:38 ` [RFC PATCH 11/14] sched: refactor update_shares_cpu() -> update_blocked_avgs() Paul Turner
2012-02-02  1:38 ` [RFC PATCH 14/14] sched: implement usage tracking Paul Turner
2012-02-16 13:37   ` Peter Zijlstra
2012-02-17 10:54     ` Paul Turner
2012-02-20 16:11       ` Peter Zijlstra
2012-02-16 16:58   ` Peter Zijlstra
2012-02-17 11:32     ` Paul Turner
2012-02-20 16:30       ` Peter Zijlstra
2012-02-29 10:37   ` sched per task ARM fix Pantelis Antoniou
2012-02-29 10:37   ` [PATCH 1/2] sched: entity load-tracking re-work - Fix for ARM Pantelis Antoniou
2012-02-28 17:45     ` Morten Rasmussen
2012-02-28 17:52       ` Pantelis Antoniou
2012-02-29 10:37   ` [PATCH 2/2] sched: load-tracking compile when cgroup undefined Pantelis Antoniou
2012-03-13 16:57   ` [RFC PATCH 14/14] sched: implement usage tracking Vincent Guittot
2012-03-14 15:01     ` Peter Zijlstra
2012-03-14 15:45       ` Vincent Guittot
2012-03-14 15:47       ` Paul Turner
2012-03-15 10:52         ` Peter Zijlstra
2012-03-14 15:44     ` Paul Turner
2012-02-02  1:38 ` [RFC PATCH 10/14] sched: replace update_shares weight distribution with per-entity computation Paul Turner
2012-02-06 20:02 ` [RFC PATCH 00/14] sched: entity load-tracking re-work Peter Zijlstra
2012-02-17  9:07 ` Nikunj A Dadhania
2012-02-17 10:48   ` Paul Turner
2012-02-20  9:41     ` Nikunj A Dadhania
2012-02-21  2:33       ` Paul Turner
2012-02-20 17:01 ` Peter Zijlstra
2012-03-12 10:39 ` Morten Rasmussen
2012-03-13 16:44   ` Paul E. McKenney
2012-03-13 17:08     ` Anca Emanuel
2012-03-13 17:23       ` Paul E. McKenney
2012-03-14  9:03       ` Amit Kucheria
2012-03-14 19:19         ` Paul E. McKenney
2012-03-13 17:28   ` Peter Zijlstra
2012-03-12 10:57 ` Vincent Guittot
2012-03-14 15:59   ` Paul Turner
2012-03-15  9:59     ` Vincent Guittot
2012-04-25 13:07     ` Vincent Guittot

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='CAPM31RJ6jv-ERZ=kP2x3037z-iR+V96cS=MyFBC2Ohs-3Vq2WQ@mail.gmail.com' \
    --to=pjt@google.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=bsegall@google.com \
    --cc=efault@gmx.de \
    --cc=kamalesh@linux.vnet.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=svaidy@linux.vnet.ibm.com \
    --cc=vatsa@in.ibm.com \
    --cc=venki@google.com \
    /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).