sched, timers: move calc_load() to scheduler
authorThomas Gleixner <tglx@linutronix.de>
Sat, 11 Apr 2009 08:43:41 +0000 (10:43 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Fri, 15 May 2009 13:32:45 +0000 (15:32 +0200)
Dimitri Sivanich noticed that xtime_lock is held write locked across
calc_load() which iterates over all online CPUs. That can cause long
latencies for xtime_lock readers on large SMP systems.

The load average calculation is an rough estimate anyway so there is
no real need to protect the readers vs. the update. It's not a problem
when the avenrun array is updated while a reader copies the values.

Instead of iterating over all online CPUs let the scheduler_tick code
update the number of active tasks shortly before the avenrun update
happens. The avenrun update itself is handled by the CPU which calls
do_timer().

[ Impact: reduce xtime_lock write locked section ]

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Peter Zijlstra <peterz@infradead.org>

No differences found