[RC5] [PATCH] small scheduling optimization

Rik van Riel riel at nl.linux.org
Sun Apr 11 20:36:08 EDT 1999


Hi,

trying to keep my promise, I'm coding Linux kernel patches again.

The first patch today was an update to the sysctl documentation,
sent to Alan, Linus and the kernel-doc mailing list.

This second patch is just a small optimization to the code calling
the scheduling code.  With a program like rc5des running (nice +19)
in the background and NOTHING in the foreground Linux still goes
through the scheduler 50 times a second!

This small patch solves that problem by simply not rescheduling
if there's nothing else to be run.  A quite similar change has
increased someone's rc5des keyrate by 3%, but it's probably
somewhat less on modern systems.  The effect is too small to
really care about the change, but IMHO it's the Right Thing(tm)!

You can always grab my latest patches from:
	http://www.nl.linux.org/~riel/patches/

have fun,

Rik -- Open Source: you deserve to be in control of your data.
+-------------------------------------------------------------------+
| Le Reseau netwerksystemen BV:               http://www.reseau.nl/ |
| Linux Memory Management site:  http://humbolt.geo.uu.nl/Linux-MM/ |
| Nederlandse Linux documentatie:          http://www.nl.linux.org/ |
+-------------------------------------------------------------------+

diff -u sched.c.old linux/kernel/sched.c
--- linux/kernel/sched.c.old	1999/03/24 02:38:01
+++ linux/kernel/sched.c	1999/04/11 17:17:58
@@ -1367,7 +1367,7 @@
 	unsigned long user = ticks - system;
 	if (p->pid) {
 		p->counter -= ticks;
-		if (p->counter < 0) {
+		if (p->counter < 0 && nr_running > 1) {
 			p->counter = 0;
 			p->need_resched = 1;
 		}
diff -u smp.c.old linux/arch/i386/kernel/smp.c
--- linux/arch/i386/kernel/smp.c.old	1999/03/24 02:44:14
+++ linux/arch/i386/kernel/smp.c	1999/04/11 17:20:54
@@ -1709,7 +1709,7 @@
 			update_one_process(p, 1, user, system, cpu);
 
 			p->counter -= 1;
-			if (p->counter < 0) {
+			if (p->counter < 0 && nr_running > smp_num_cpus) {
 				p->counter = 0;
 				p->need_resched = 1;
 			}

--
To unsubscribe, send 'unsubscribe rc5' to majordomo at lists.distributed.net
rc5-digest subscribers replace rc5 with rc5-digest



More information about the rc5 mailing list