That rapidly gets you thrashing around as I suspect you've found.
I'm currently using the following rule in wake up
if(current->mm->runnable > 0) /* One already running ? */
cpu = current->mm->last_cpu;
else
cpu = idle_cpu();
else
cpu = cpu_num[fast_fl1(runnable_set)]
that is
If we are running threads with this mm on a cpu throw them at the
same core
If there is an idle CPU use it
Take the mask of currently executing priority levels, find the last
set bit (lowest pri) being executed, and look up a cpu running at
that priority
Then the idle stealing code will do the rest of the balancing, but at least
it converges towards each mm living on one cpu core.
Alan
-
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/