mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* Poor scheduling when not loaded at 100% (Was: [PATCH] sched.c: Be a bit more conservative in SMP)
@ 2006-09-22 14:24 Al Boldi
  0 siblings, 0 replies; 2+ messages in thread
From: Al Boldi @ 2006-09-22 14:24 UTC (permalink / raw)
  To: linux-kernel

Ludovic Drolez wrote:
> Ludovic Drolez <ldrolez <at> linbox.com> writes:
> > In fact, I tested the 1st patch on our cluster (Finite elements
> > computing on 8 CPUs):
> > - Under Windows: 875 seconds
> > - Linux 2.6.16 : 1019 s
> > - Linux 2.6.16 + manual taskset : 842 s
> > - Linux 2.6.16 + Vincent's patch : 1373 s
>
> Anyone has an idea why the scheduling is poor when processes don't use all
> CPU ?
>
> In the above example, we have 4 processes on 4 processors which use about
> 40% of the CPU (computing and waiting for network packets).
> 1- If taskset is not used : CPU0 is used at 80%, and the 3 others at 30%.
> The tasks are constantly migrated between cores -> poor performance
> (1019s), Windows does better :-(
> 2- If taskset is used : All CPUs have 1 process and are used at 40%. No
> migration -> high performance (842s), better than Windows :-)
>
> I tried to play with the 'migration_cost' kernel parameter but it did not
> help. By default, on the Bi-Xeon Dual Core MB (Dell 1855),
> migration_cost=1600, and trying values up to 200000, did not improve
> performance...
>
> Any Ideas ?

Did you try PlugSched?  The spa scheds work wonders, once tuned properly.


Thanks!


--
Al


^ permalink raw reply	[flat|nested] 2+ messages in thread
* [PATCH] sched.c: Be a bit more conservative in SMP
@ 2006-09-03 13:41 Vincent Pelletier
  2006-09-03 17:10 ` Vincent Pelletier
  0 siblings, 1 reply; 2+ messages in thread
From: Vincent Pelletier @ 2006-09-03 13:41 UTC (permalink / raw)
  To: linux-kernel

[-- Attachment #1: Type: text/plain, Size: 2139 bytes --]

I've often seen the following use case happening on the few linux SMP boxes
I have access to : one process eats one cpu becaus eit has a big
computation to do, all cpu being idle, and the process keeps on hopping
from one cpu to another.
This patch is a quick try to make this behaviour disapear without requiring
to bind all processes manually with taskset.
I don't know if there is any practical performance increase (although I
believe there locally is).

Patch principle is simple :
When calculating the load of "source" cpu (the one the process is on)
substract one to the number of runing processes so we don't count the
process to be balanced.
As I only know sched.c for 5 minutes, I added a max(..., 0) to make sure the
load can't be negative if the function happens to be called on a cpu with
only idle tasks. No idea if it can actually happen.

I tested its efficiency this way :
Before :
-start a command eating one full cpu on an idle smp machine.
I used dd if=/dev/urandom of=/dev/null.
-wait for ~30 seconds, and see that it switched to another cpu.
After :
-repeat the same test and see that it does not switch to another cpu (the
patch does what it's meant to).
-start a second dd, and bind both to the same cpu with taskset, then free
one of them (allow it to use 2 cpus, including the one it can already
access) and see that the task gets moved to the second cpu (load balancing
still works).

Disclaimer : 
This patch is just the result of a 5 minutes hacking rush. Although I think
it technically work, I'm no SMP expert.

--- linux-2.6-2.6.17/kernel/sched.c     2006-06-18 03:49:35.000000000 +0200
+++ linux-2.6-2.6.17-conservative/kernel/sched.c        2006-09-03
13:18:11.000000000 +0200
@@ -952,7 +952,7 @@ void kick_process(task_t *p)
 static inline unsigned long source_load(int cpu, int type)
 {
        runqueue_t *rq = cpu_rq(cpu);
-       unsigned long load_now = rq->nr_running * SCHED_LOAD_SCALE;
+       unsigned long load_now = (max(rq->nr_running - 1, 0)) *
SCHED_LOAD_SCALE;
        if (type == 0)
                return load_now;

-- 
Vincent Pelletier

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2006-09-22 14:22 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-09-22 14:24 Poor scheduling when not loaded at 100% (Was: [PATCH] sched.c: Be a bit more conservative in SMP) Al Boldi
  -- strict thread matches above, loose matches on Subject: below --
2006-09-03 13:41 [PATCH] sched.c: Be a bit more conservative in SMP Vincent Pelletier
2006-09-03 17:10 ` Vincent Pelletier
2006-09-06 23:30   ` Vincent Pelletier
2006-09-19 14:06     ` Ludovic Drolez
2006-09-19 17:50       ` Antonio Vargas
2006-09-20  7:42         ` Ludovic Drolez
2006-09-20 16:26           ` Poor scheduling when not loaded at 100% (Was: [PATCH] sched.c: Be a bit more conservative in SMP) Ludovic Drolez

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®