From: vincent.guittot@linaro.org (Vincent Guittot)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 08/11] sched: get CPU's activity statistic
Date: Wed, 28 May 2014 15:15:03 +0200 [thread overview]
Message-ID: <CAKfTPtDxeBfZK1AxCRqEG91pi--Ti1RYFoQPDhvMVnGTCspQ-g@mail.gmail.com> (raw)
In-Reply-To: <20140528121001.GI19967@e103034-lin>
On 28 May 2014 14:10, Morten Rasmussen <morten.rasmussen@arm.com> wrote:
> On Fri, May 23, 2014 at 04:53:02PM +0100, Vincent Guittot wrote:
>> Monitor the activity level of each group of each sched_domain level. The
>> activity is the amount of cpu_power that is currently used on a CPU or group
>> of CPUs. We use the runnable_avg_sum and _period to evaluate this activity
>> level. In the special use case where the CPU is fully loaded by more than 1
>> task, the activity level is set above the cpu_power in order to reflect the
>> overload of the CPU
>>
>> Signed-off-by: Vincent Guittot <vincent.guittot@linaro.org>
>> ---
>> kernel/sched/fair.c | 22 ++++++++++++++++++++++
>> 1 file changed, 22 insertions(+)
>>
>> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
>> index b7c51be..c01d8b6 100644
>> --- a/kernel/sched/fair.c
>> +++ b/kernel/sched/fair.c
>> @@ -4044,6 +4044,11 @@ static unsigned long power_of(int cpu)
>> return cpu_rq(cpu)->cpu_power;
>> }
>>
>> +static unsigned long power_orig_of(int cpu)
>> +{
>> + return cpu_rq(cpu)->cpu_power_orig;
>> +}
>> +
>> static unsigned long cpu_avg_load_per_task(int cpu)
>> {
>> struct rq *rq = cpu_rq(cpu);
>> @@ -4438,6 +4443,18 @@ done:
>> return target;
>> }
>>
>> +static int get_cpu_activity(int cpu)
>> +{
>> + struct rq *rq = cpu_rq(cpu);
>> + u32 sum = rq->avg.runnable_avg_sum;
>> + u32 period = rq->avg.runnable_avg_period;
>> +
>> + if (sum >= period)
>> + return power_orig_of(cpu) + rq->nr_running - 1;
>> +
>> + return (sum * power_orig_of(cpu)) / period;
>> +}
>
> The rq runnable_avg_{sum, period} give a very long term view of the cpu
> utilization (I will use the term utilization instead of activity as I
> think that is what we are talking about here). IMHO, it is too slow to
> be used as basis for load balancing decisions. I think that was also
> agreed upon in the last discussion related to this topic [1].
>
> The basic problem is that worst case: sum starting from 0 and period
> already at LOAD_AVG_MAX = 47742, it takes LOAD_AVG_MAX_N = 345 periods
> (ms) for sum to reach 47742. In other words, the cpu might have been
> fully utilized for 345 ms before it is considered fully utilized.
> Periodic load-balancing happens much more frequently than that.
I agree that it's not really responsive but several statistics of the
scheduler use the same kind of metrics and have the same kind of
responsiveness.
I agree that it's not enough and that's why i'm not using only this
metric but it gives information that the unweighted load_avg_contrib
(that you are speaking about below) can't give. So i would be less
contrasted than you and would say that we probably need additional
metrics
>
> Also, if load-balancing actually moves tasks around it may take quite a
> while before runnable_avg_sum actually reflects this change. The next
> periodic load-balance is likely to happen before runnable_avg_sum has
> reflected the result of the previous periodic load-balance.
runnable_avg_sum uses a 1ms unit step so i tend to disagree with your
point above
>
> To avoid these problems, we need to base utilization on a metric which
> is updated instantaneously when we add/remove tasks to a cpu (or a least
> fast enough that we don't see the above problems). In the previous
> discussion [1] it was suggested that a sum of unweighted task
> runnable_avg_{sum,period} ratio instead. That is, an unweighted
> equivalent to weighted_cpuload(). That isn't a perfect solution either.
Regarding the unweighted load_avg_contrib, you will have similar issue
because of the slowness in the variation of each sched_entity load
that will be added/removed in the unweighted load_avg_contrib.
The update of the runnable_avg_{sum,period} of an sched_entity is
quite similar to cpu utilization. This value is linked to the CPU on
which it has run previously because of the time sharing with others
tasks, so the unweighted load of a freshly migrated task will reflect
its load on the previous CPU (with the time sharing with other tasks
on prev CPU).
I'm not saying that such metric is useless but it's not perfect as well.
Vincent
> It is fine as long as the cpus are not fully utilized, but when they are
> we need to use weighted_cpuload() to preserve smp_nice. What to do
> around the tipping point needs more thought, but I think that is
> currently the best proposal for a solution for task and cpu utilization.
>
> rq runnable_avg_sum is useful for decisions where we need a longer term
> view of the cpu utilization, but I don't see how we can use as cpu
> utilization metric for load-balancing decisions at wakeup or
> periodically.
>
> Morten
>
> [1] https://lkml.org/lkml/2014/1/8/251
next prev parent reply other threads:[~2014-05-28 13:15 UTC|newest]
Thread overview: 108+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-23 15:52 [PATCH v2 00/11] sched: consolidation of cpu_power Vincent Guittot
2014-05-23 15:52 ` [PATCH v2 01/11] sched: fix imbalance flag reset Vincent Guittot
2014-05-25 10:33 ` Preeti U Murthy
2014-05-26 7:49 ` Vincent Guittot
2014-05-26 9:16 ` Preeti U Murthy
2014-05-26 10:14 ` Vincent Guittot
2014-05-23 15:52 ` [PATCH v2 02/11] sched: remove a wake_affine condition Vincent Guittot
2014-05-27 12:48 ` Peter Zijlstra
2014-05-27 15:19 ` Vincent Guittot
2014-05-27 15:39 ` Peter Zijlstra
2014-05-27 16:14 ` Vincent Guittot
2014-05-28 6:49 ` Vincent Guittot
2014-05-28 15:09 ` Dietmar Eggemann
2014-05-28 15:25 ` Vincent Guittot
2014-05-27 13:43 ` Peter Zijlstra
2014-05-27 13:45 ` Peter Zijlstra
2014-05-27 15:20 ` Vincent Guittot
2014-05-23 15:52 ` [PATCH v2 03/11] sched: fix avg_load computation Vincent Guittot
2014-05-27 13:48 ` Peter Zijlstra
2014-05-23 15:52 ` [PATCH v2 04/11] sched: Allow all archs to set the power_orig Vincent Guittot
2014-05-30 14:04 ` Dietmar Eggemann
2014-05-30 14:46 ` Peter Zijlstra
2014-05-30 20:50 ` Vincent Guittot
2014-06-04 9:42 ` Dietmar Eggemann
2014-06-04 11:15 ` Vincent Guittot
2014-06-05 8:59 ` Dietmar Eggemann
2014-06-16 9:01 ` Vincent Guittot
2014-06-03 13:22 ` Morten Rasmussen
2014-06-03 14:02 ` Vincent Guittot
2014-06-04 11:17 ` Morten Rasmussen
2014-06-06 7:01 ` Vincent Guittot
2014-05-23 15:52 ` [PATCH v2 05/11] ARM: topology: use new cpu_power interface Vincent Guittot
2014-05-25 13:22 ` Preeti U Murthy
2014-05-26 8:25 ` Vincent Guittot
2014-05-26 9:19 ` Preeti U Murthy
2014-05-23 15:53 ` [PATCH v2 06/11] sched: add per rq cpu_power_orig Vincent Guittot
2014-05-23 15:53 ` [PATCH v2 07/11] Revert "sched: Put rq's sched_avg under CONFIG_FAIR_GROUP_SCHED" Vincent Guittot
2014-05-23 15:53 ` [PATCH v2 08/11] sched: get CPU's activity statistic Vincent Guittot
2014-05-27 17:32 ` Peter Zijlstra
2014-05-28 7:01 ` Vincent Guittot
2014-05-28 12:10 ` Morten Rasmussen
2014-05-28 13:15 ` Vincent Guittot [this message]
2014-05-28 15:47 ` Morten Rasmussen
2014-05-28 16:39 ` Vincent Guittot
2014-06-03 12:03 ` Morten Rasmussen
2014-06-03 15:59 ` Peter Zijlstra
2014-06-03 17:41 ` Morten Rasmussen
2014-06-03 15:50 ` Peter Zijlstra
2014-06-03 17:20 ` Morten Rasmussen
2014-06-04 7:47 ` Vincent Guittot
2014-06-04 8:08 ` Peter Zijlstra
2014-06-04 8:55 ` Morten Rasmussen
2014-06-04 9:23 ` Peter Zijlstra
2014-06-04 9:35 ` Vincent Guittot
2014-06-04 10:25 ` Morten Rasmussen
2014-06-04 9:44 ` Morten Rasmussen
2014-06-04 9:32 ` Vincent Guittot
2014-06-04 10:00 ` Morten Rasmussen
2014-06-04 10:17 ` Peter Zijlstra
2014-06-04 10:36 ` Morten Rasmussen
2014-06-04 10:55 ` Peter Zijlstra
2014-06-04 11:07 ` Vincent Guittot
2014-06-04 11:23 ` Morten Rasmussen
2014-06-04 11:52 ` Vincent Guittot
2014-06-04 13:09 ` Morten Rasmussen
2014-06-04 13:23 ` Morten Rasmussen
2014-05-28 15:17 ` Peter Zijlstra
2014-06-03 15:40 ` Peter Zijlstra
2014-06-03 17:16 ` Morten Rasmussen
2014-06-03 17:37 ` Peter Zijlstra
2014-06-03 17:39 ` Peter Zijlstra
2014-06-03 23:11 ` Yuyang Du
2014-05-30 9:50 ` Dietmar Eggemann
2014-05-30 19:20 ` Vincent Guittot
2014-06-01 11:33 ` Dietmar Eggemann
2014-06-02 14:07 ` Vincent Guittot
2014-05-23 15:53 ` [PATCH v2 09/11] sched: test the cpu's capacity in wake affine Vincent Guittot
2014-05-28 10:58 ` Peter Zijlstra
2014-05-28 11:15 ` Vincent Guittot
2014-11-24 0:34 ` Wanpeng Li
2014-11-24 13:23 ` Vincent Guittot
2014-05-23 15:53 ` [PATCH v2 10/11] sched: move cfs task on a CPU with higher capacity Vincent Guittot
2014-05-29 9:50 ` Peter Zijlstra
2014-05-29 19:37 ` Vincent Guittot
2014-05-30 6:29 ` Peter Zijlstra
2014-05-30 20:05 ` Vincent Guittot
2014-06-02 17:06 ` Vincent Guittot
2014-06-03 11:15 ` Peter Zijlstra
2014-06-03 12:31 ` Vincent Guittot
2014-05-29 14:04 ` Peter Zijlstra
2014-05-29 19:44 ` Vincent Guittot
2014-05-30 13:26 ` Dietmar Eggemann
2014-05-30 19:24 ` Vincent Guittot
2014-05-30 19:45 ` Nicolas Pitre
2014-05-30 20:07 ` Vincent Guittot
2014-05-23 15:53 ` [PATCH v2 11/11] sched: replace capacity by activity Vincent Guittot
2014-05-29 13:55 ` Peter Zijlstra
2014-05-29 19:51 ` Vincent Guittot
2014-06-02 6:21 ` Preeti U Murthy
2014-06-03 9:50 ` Vincent Guittot
2014-05-29 14:02 ` Peter Zijlstra
2014-05-29 19:56 ` Vincent Guittot
2014-05-30 6:34 ` Peter Zijlstra
2014-05-30 19:13 ` Vincent Guittot
2014-05-26 9:44 ` [PATCH v2 00/11] sched: consolidation of cpu_power Preeti U Murthy
2014-05-26 10:04 ` Vincent Guittot
2014-05-26 15:54 ` Vincent Guittot
2014-05-27 5:47 ` Preeti U Murthy
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=CAKfTPtDxeBfZK1AxCRqEG91pi--Ti1RYFoQPDhvMVnGTCspQ-g@mail.gmail.com \
--to=vincent.guittot@linaro.org \
--cc=linux-arm-kernel@lists.infradead.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).