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 [PATCH] sched: smpnice try to wakeup modification 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 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.