[patch] O(1) scheduler, -G1, 2.5.2-pre10, 2.4.17 (fwd)

Ingo Molnar (mingo@elte.hu)
Thu, 10 Jan 2002 15:19:49 +0100 (CET)


this is my latest update of the O(1) scheduler:

http://redhat.com/~mingo/O(1)-scheduler/sched-O1-2.5.2-pre11-H1.patch

(i'll release the -H1 2.4 patch later today.)

this patch does two things:

First it cleans up the load balancer's interaction with the timer tick.
There are now two functions called from the timer tick: busy_cpu_tick()
and idle_cpu_tick(). It's completely up to the scheduler to use them
appropriately. There is IDLE_REBALANCE_TICK and BUSY_REBALANCE_TICK. We do
a busy rebalance every 250 msecs, and we do an idle rebalance on idle CPUs
every 1 msec. (or 10 msec on HZ=100 systems.) The point is to not leave
CPUs idle for a long time, but still not take tasks from well-affinized
runqueues at a too high frequency.

the other change is to use the 'interactivity' output of the load
estimator more agressively. This results in a usable X while more extreme
compilation jobs like 'make -j40 bzImage' are running. In fact i'm writing
this email while an infinite loop of 'make -j40' kernel compilation was
running (default priority, not reniced), on a dual-CPU box, and completely
forgot about it - until i tried to recompile the -H1 tree :-|

Changes in -H1 relative to 2.5.2-pre11:

- Rusty Russel: get the alignment of the runqueues right and reduce array
indexing overhead.

- Kevin O'Connor, Robert Love: fix locking order bug in set_cpus_allowed()
which bug is able to cause boot-time lockups on SMP systems.

- Rusty Russell: fix rebalance tick definition if HZ < 100 in UML.

- Rusty Russell: check for new_mask in set_cpus_allowed(), to be sure.

- Rusty Russell: clean up rq_ macros so that HT can be done by changing
just one of the macros.

- Rusty Russell: remove rq->cpu.

- Rusty Russell: remove cacheline padding from runqueue_t, it's pointless
now.

- Rusty Russell: sched.c comment fixes.

- increase minimum timeslice length by 10 msec.

- fix comments in sched.h

- make rq->bitmap big-endian safe. (Anton Blanchard)

- documented and cleaned up the load estimator bits, no functional
changes apart from small speedups.

- do init_idle() before starting up the init thread, this removes a race
where we'd run the init thread on CPU#0 before init_idle() has been
called.

(please let me know if i dropped any patch from anyone along the way, or
forgot to credit anyone.)

Comments, bug reports, suggestions welcome,

Ingo

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/