[Linux-ia64] O(1) scheduler for 2.4.18-ia64

From: Erich Focht <efocht_at_ess.nec.de>
Date: 2002-07-17 02:23:52

for those working with IA64 systems: at
you can find a port of the O(1) scheduler. It is the "old" one, i.e.
not having SCHED_BATCH, etc. But it has some important changes compared
to my last port:

  - Uses the "complex" macros which release the RQ lock before switching
    context. This is a MUST on IA64, as there is a potential deadlock
    when the context numbers are wrapped around.

  - cpu_idle() is changed such that platforms which just return from
    pm_idle() don't call schedule() in a tight loop. This was the reason
    for massive cache line bouncings when some CPUs were idle as they
    not only locked their RQs but also loaded nr_running (on the same cache
    line as the lock) for every other RQ. The position of nr_running inside
    the RQ structure is changed, such that it doesn't share the cacheline
    with lock.

  - load_balance() only steals at most one task. Before it could sometimes
    steal half of the tasks of the most loaded CPU. This is OK on small
    machines but on large ones the tasks were bounced around a while until
    "settling" on a particular CPU. Maybe this is not yet optimal, but it
    improves hackbench results.

The patch applies to  2.4.18  +  4th ia64 patch from David. It also can
be applied to the vanilla 2.4.18, (kernel/timer.c needs to be edited by
hand), but this port is not intended to be an alternative to Robert Love's
backports... It is for IA64 and/or the node affine scheduler.

Best regards,

Received on Tue Jul 16 09:24:29 2002

This archive was generated by hypermail 2.1.8 : 2005-08-02 09:20:09 EST