From: Alex Shi <alex.shi@linaro.org>
To: Daniel Lezcano <daniel.lezcano@linaro.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Mike Galbraith <efault@gmx.de>
Subject: Re: [question] sched: idle_avg and migration latency
Date: Tue, 10 Dec 2013 23:20:01 +0800 [thread overview]
Message-ID: <52A73121.30309@linaro.org> (raw)
In-Reply-To: <52A6FB5C.7010706@linaro.org>
CC to MikeG, he written this part. :)
I try to explain sth I know. I am sorry if my understanding incorrect.
On 12/10/2013 07:30 PM, Daniel Lezcano wrote:
>
> Hi All,
>
> I am trying to understand how is computed the idle_avg and how it is
> used regarding the migration latency.
>
> 1. What is the sysctl_sched_migration_cost value ? It is initialized to
> 500000UL. Is it an arbitrarily chosen value ? Could it change depending
> on the hardware performances ?
current sysctl_sched_mirgration_cost is 0.5ms, used to limit
overscheduling. Guess it is a kind of arbitrary. But it can be rewrite
at /proc/sys/kernel/sched_migration_cost_ns.
So if you find some new suitable value in particular scenario. guess
PeterZ like to modify it. :)
>
>
> 2. The idle_balance function checks:
>
> if (this_rq->avg_idle < sysctl_sched_migration_cost)
> return 0;
>
> IIUC, it is not worth to migrate a task to this cpu as we expect to run
> another task before we can pull a task to the current cpu, right ?
No, that used to prevent every idle_balance cause a task migration if
idle balance happens too much and too quick, -- frequency more than task
migration limitation.
>
> Then if there is no task to balance we will enter idle, thus we
> initialize the idle_stamp to the current clock.
If we pulled task, we will restart frequency calculation by set
idle_stamp = 0;
or if new task adding this rq, allow more idle_balance.
>
> When another task is woken up with the ttwu_do_wakeup, the duration of
> the idle time is computed in there:
>
> if (rq->idle_stamp) {
> u64 delta = rq_clock(rq) - rq->idle_stamp;
> u64 max = 2*sysctl_sched_migration_cost;
>
> if (delta > max)
> rq->avg_idle = max;
> else
> update_avg(&rq->avg_idle, delta);
> rq->idle_stamp = 0;
> }
>
> Why is the 'delta' leveraged by 'max' ?
>
>
> 3. And finally the function update_avg does:
>
> s64 diff = sample - *avg;
> *avg += diff >> 3;
>
> Why is diff >> 3 used instead of the number of values ?
It is a kind of decay. but has no idea of why this value '3'. Guess
MikeG has some reason.
>
> Thanks in advance for any answers
>
> -- Daniel
>
--
Thanks
Alex
next prev parent reply other threads:[~2013-12-10 15:20 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-10 11:30 [question] sched: idle_avg and migration latency Daniel Lezcano
2013-12-10 15:11 ` Mike Galbraith
2013-12-10 18:31 ` Daniel Lezcano
2013-12-11 1:25 ` Alex Shi
2013-12-11 6:44 ` Mike Galbraith
2013-12-10 15:20 ` Alex Shi [this message]
2013-12-10 19:07 ` Daniel Lezcano
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=52A73121.30309@linaro.org \
--to=alex.shi@linaro.org \
--cc=daniel.lezcano@linaro.org \
--cc=efault@gmx.de \
--cc=linux-kernel@vger.kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.