This comment at sched.c:843 is a bit confusing:
* We fend off statistical fluctuations in runqueue lengths by
* saving the runqueue length during the previous load-balancing
* operation and using the smaller one the current and saved lengths.
First, it's ungrammatical ("...the smaller one the..."). Second,
the code immediately following it seems to be choosing the _larger_
of the two values, not the smaller:
if (idle || (this_rq->nr_running > this_rq->prev_nr_running[this_cpu]))
nr_running = this_rq->nr_running;
else
nr_running = this_rq->prev_nr_running[this_cpu];