From: Peter Williams <pwil3058@bigpond.net.au>
To: Tim Chen <tim.c.chen@linux.intel.com>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [PATCH] sched: smpnice try to wakeup modification
Date: Thu, 30 Mar 2006 09:49:52 +1100 [thread overview]
Message-ID: <442B0F10.9000606@bigpond.net.au> (raw)
In-Reply-To: <4429F5AC.4000103@linux.intel.com>
Tim Chen wrote:
> Peter,
>
> If there is no load on this_cpu, (i.e. tl_per_task is 0), we will fail
> the "tl + target_load(cpu, idx) <= tl_per_task" check.
This isn't the case. If this_cpu is idle tl_per_task will be set to
SCHED_LOAD_SCALE (see implementation of cpu_avg_load_per_task()) and
that expression should succeed unless the value returned by
target_load(cpu, idx) is bigger than SCHED_LOAD_SCALE. This is exactly
the same as would have happened with the original code.
(BTW cpu_avg_load_per_task()'s original implementation would have had
the effect you describe but it was modified when it was realized that it
would break the code in a lot of places (not just here). The thinking
now is that if there isn't enough data available to calculate the
average load per task for a run queue then the correct value to use is
the theoretical average i.e. SCHED_LOAD_SCALE.)
> I think the
> original intention was
> to put task on this_cpu if it has no load and when there's already one
> task on cpu. This helps spread tasks out for low load condition.
>
> Thanks.
>
> Tim
>
> Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com>
>
> --- linux-2.6.16-mm2-a/kernel/sched.c 2006-03-28 16:00:37.091779904
> -0800
> +++ linux-2.6.16-mm2-b/kernel/sched.c 2006-03-28 16:09:08.237074008
> -0800
> @@ -1393,7 +1393,7 @@ static int try_to_wake_up(task_t *p, uns
>
> if (this_sd->flags & SD_WAKE_AFFINE) {
> unsigned long tl = this_load;
> - unsigned long tl_per_task = cpu_avg_load_per_task(this_cpu);
> + unsigned long sl_per_task = cpu_avg_load_per_task(cpu);
>
> /*
> * If sync wakeup then subtract the (maximum possible)
> @@ -1404,7 +1404,7 @@ static int try_to_wake_up(task_t *p, uns
> tl -= current->load_weight;
>
> if ((tl <= load &&
> - tl + target_load(cpu, idx) <= tl_per_task) ||
> + tl + target_load(cpu, idx) <= sl_per_task) ||
> 100*(tl + p->load_weight) <= imbalance*load) {
> /*
> * This domain has SD_WAKE_AFFINE and
Nevertheless, in some cases, it was difficult to decide which run
queue's average load per task should be used to replace SCHED_LOAD_SCALE
and a careful review of the code by those with expertise in this area
would be appreciated as I may have made mistakes.
Peter
--
Peter Williams pwil3058@bigpond.net.au
"Learning, n. The kind of ignorance distinguishing the studious."
-- Ambrose Bierce
next prev parent reply other threads:[~2006-03-29 22:49 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-03-29 2:49 Tim Chen
2006-03-29 22:49 ` Peter Williams [this message]
2006-03-29 23:13 ` Tim Chen
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=442B0F10.9000606@bigpond.net.au \
--to=pwil3058@bigpond.net.au \
--cc=linux-kernel@vger.kernel.org \
--cc=tim.c.chen@linux.intel.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
Powered by JetHome