All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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.