From: Balbir Singh <balbir@linux.vnet.ibm.com>
To: Ingo Molnar <mingo@elte.hu>
Cc: linux-kernel@vger.kernel.org,
Linus Torvalds <torvalds@linux-foundation.org>,
Andrew Morton <akpm@linux-foundation.org>,
Con Kolivas <kernel@kolivas.org>, Nick Piggin <npiggin@suse.de>,
Mike Galbraith <efault@gmx.de>,
Arjan van de Ven <arjan@infradead.org>,
Peter Williams <pwil3058@bigpond.net.au>,
Thomas Gleixner <tglx@linutronix.de>,
caglar@pardus.org.tr, Willy Tarreau <w@1wt.eu>,
Gene Heskett <gene.heskett@gmail.com>, Mark Lord <lkml@rtr.ca>,
Zach Carter <linux@zachcarter.com>,
buddabrod <buddabrod@gmail.com>
Subject: Re: [patch] CFS scheduler, -v8
Date: Wed, 02 May 2007 16:29:55 +0530 [thread overview]
Message-ID: <46386F2B.9050307@linux.vnet.ibm.com> (raw)
In-Reply-To: <20070502100545.GA6857@elte.hu>
Ingo Molnar wrote:
> * Balbir Singh <balbir@linux.vnet.ibm.com> wrote:
>
>> With -v7 I would run the n/n+1 test. Basically on a system with n
>> cpus, I would run n+1 tasks and see how their load is distributed. I
>> usually find that the last two tasks would get stuck on one CPU on the
>> system and would get half the cpu time as their other peers. I think
>> this issue has been around for long even before CFS. But while I was
>> investigating that, I found that with -v8, all the n+1 tasks are stuck
>> on the same cpu.
>
> i believe this problem is specific to powerpc - load is distributed fine
> on i686/x86_64 and your sched_debug shows a cpu_load[0] == 0 on CPU#2
> which is 'impossible'. (I sent a few suggestions off-Cc about how to
> debug this.)
>
> Ingo
Hi, Ingo
The suggestions helped, here is a fix tested on PowerPC only.
Patch and Description
=====================
Load balancing on PowerPC is broken. Running 5 tasks on a 4 cpu system
results in all 5 tasks running on the same CPU. Based on Ingo's feedback,
I instrumented and debugged update_load_fair().
The problem is with comparing a s64 values with (s64)ULONG_MAX, which
evaluates to -1. Then we check if exec_delta64 and fair_delta64 are greater
than (s64)ULONG_MAX (-1), if so we assign (s64)ULONG_MAX to the respective
values.
The fix is to compare these values against (s64)LONG_MAX and assign
(s64)LONG_MAX to exec_delta64 and fair_delta64 if they are greater than
(s64)LONG_MAX.
Tested on PowerPC, the regression is gone, tasks are load balanced as they
were in v7.
Output of top
5614 root 20 0 4912 784 252 R 52 0.0 3:27.49 3 bash
5620 root 20 0 4912 784 252 R 47 0.0 3:07.38 2 bash
5617 root 20 0 4912 784 252 R 47 0.0 3:08.18 0 bash
5624 root 20 0 4912 784 252 R 26 0.0 1:42.97 1 bash
5621 root 20 0 4912 784 252 R 26 0.0 1:43.14 1 bash
Tasks 5624 and 5621 getting half of their peer values is a separate issue
altogether.
Signed-off-by: Balbir Singh <balbir@linux.vnet.ibm.com>
---
kernel/sched.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff -puN kernel/sched.c~cfs-fix-load-balancing-arith kernel/sched.c
--- linux-2.6.21/kernel/sched.c~cfs-fix-load-balancing-arith 2007-05-02
16:16:20.000000000 +0530
+++ linux-2.6.21-balbir/kernel/sched.c 2007-05-02 16:16:47.000000000 +0530
@@ -1533,19 +1533,19 @@ static void update_load_fair(struct rq *
this_rq->prev_exec_clock = this_rq->exec_clock;
WARN_ON_ONCE(exec_delta64 <= 0);
- if (fair_delta64 > (s64)ULONG_MAX)
- fair_delta64 = (s64)ULONG_MAX;
+ if (fair_delta64 > (s64)LONG_MAX)
+ fair_delta64 = (s64)LONG_MAX;
fair_delta = (unsigned long)fair_delta64;
- if (exec_delta64 > (s64)ULONG_MAX)
- exec_delta64 = (s64)ULONG_MAX;
+ if (exec_delta64 > (s64)LONG_MAX)
+ exec_delta64 = (s64)LONG_MAX;
exec_delta = (unsigned long)exec_delta64;
if (exec_delta > TICK_NSEC)
exec_delta = TICK_NSEC;
idle_delta = TICK_NSEC - exec_delta;
- tmp = SCHED_LOAD_SCALE * exec_delta / fair_delta;
+ tmp = (SCHED_LOAD_SCALE * exec_delta) / fair_delta;
tmp64 = (u64)tmp * (u64)exec_delta;
do_div(tmp64, TICK_NSEC);
this_load = (unsigned long)tmp64;
_
--
Warm Regards,
Balbir Singh
Linux Technology Center
IBM, ISTL
next prev parent reply other threads:[~2007-05-02 11:00 UTC|newest]
Thread overview: 75+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-01 21:22 [patch] CFS scheduler, -v8 Ingo Molnar
2007-05-02 2:57 ` Ting Yang
2007-05-02 5:10 ` Willy Tarreau
2007-05-02 5:30 ` William Lee Irwin III
2007-05-02 10:05 ` Bill Huey
2007-05-02 10:27 ` Ingo Molnar
2007-05-02 17:36 ` Srivatsa Vaddagiri
2007-05-02 17:48 ` William Lee Irwin III
2007-05-02 18:15 ` Ingo Molnar
2007-05-02 18:56 ` William Lee Irwin III
2007-05-02 19:12 ` Ingo Molnar
2007-05-02 19:42 ` William Lee Irwin III
2007-05-03 2:48 ` Ting Yang
2007-05-03 3:18 ` Ting Yang
2007-05-03 10:19 ` Bill Huey
2007-05-02 23:41 ` Ting Yang
2007-05-02 18:42 ` Li, Tong N
2007-05-02 19:10 ` William Lee Irwin III
2007-05-03 3:07 ` Ting Yang
2007-05-03 8:50 ` Ingo Molnar
2007-05-03 14:26 ` Srivatsa Vaddagiri
2007-05-03 15:19 ` Ting Yang
2007-05-03 15:02 ` Ting Yang
2007-05-02 6:37 ` Mike Galbraith
2007-05-02 6:45 ` Ingo Molnar
2007-05-02 8:03 ` Gene Heskett
2007-05-02 8:12 ` Mike Galbraith
2007-05-02 8:48 ` Gene Heskett
2007-05-02 8:13 ` Ingo Molnar
2007-05-02 8:51 ` Gene Heskett
2007-05-02 7:59 ` Mike Galbraith
2007-05-02 8:11 ` Gene Heskett
2007-05-02 10:40 ` Ingo Molnar
2007-05-02 9:08 ` Balbir Singh
2007-05-02 10:05 ` Ingo Molnar
2007-05-02 10:59 ` Balbir Singh [this message]
2007-05-02 11:17 ` Ingo Molnar
2007-05-05 8:31 ` Esben Nielsen
2007-05-05 17:44 ` Linus Torvalds
2007-05-06 8:29 ` Ingo Molnar
2007-05-06 8:36 ` Willy Tarreau
2007-05-06 8:52 ` Ingo Molnar
2007-05-06 17:45 ` Linus Torvalds
2007-05-07 11:30 ` Esben Nielsen
2007-05-07 15:55 ` Ingo Molnar
2007-05-07 16:11 ` Linus Torvalds
2007-05-08 0:35 ` Peter Williams
2007-05-08 9:05 ` Esben Nielsen
2007-05-09 0:01 ` Peter Williams
2007-05-10 13:09 ` Pavel Machek
2007-05-11 16:50 ` Linus Torvalds
2007-05-11 19:18 ` Pavel Machek
2007-05-11 19:37 ` Willy Tarreau
2007-05-11 20:53 ` Kevin Bowling
2007-05-07 11:09 ` Esben Nielsen
2007-05-07 16:28 ` Linus Torvalds
2007-05-07 18:39 ` Johannes Stezenbach
2007-05-07 18:55 ` Linus Torvalds
2007-05-08 7:34 ` Esben Nielsen
2007-05-08 9:54 ` Johannes Stezenbach
2007-05-08 10:27 ` Esben Nielsen
2007-05-08 5:36 ` Matt Mackall
2007-05-02 12:58 ` Mark Lord
2007-05-02 12:58 ` Vegard Nossum
2007-05-02 16:41 ` Ingo Molnar
-- strict thread matches above, loose matches on Subject: below --
2007-05-03 8:20 Zoltan Boszormenyi
2007-05-03 13:02 ` Ingo Molnar
2007-05-03 13:29 ` Damien Wyart
2007-05-03 14:53 ` Srivatsa Vaddagiri
2007-05-03 15:53 ` William Lee Irwin III
2007-05-03 18:44 ` Li, Tong N
2007-05-03 19:52 ` William Lee Irwin III
2007-05-07 14:22 ` Srivatsa Vaddagiri
2007-05-07 20:54 ` Li, Tong N
2007-05-07 0:04 ` Bill Davidsen
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=46386F2B.9050307@linux.vnet.ibm.com \
--to=balbir@linux.vnet.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=arjan@infradead.org \
--cc=buddabrod@gmail.com \
--cc=caglar@pardus.org.tr \
--cc=efault@gmx.de \
--cc=gene.heskett@gmail.com \
--cc=kernel@kolivas.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@zachcarter.com \
--cc=lkml@rtr.ca \
--cc=mingo@elte.hu \
--cc=npiggin@suse.de \
--cc=pwil3058@bigpond.net.au \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=w@1wt.eu \
/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.