On Tue, Oct 09, 2007 at 01:59:37PM -0400, Steven Rostedt wrote:
I did something like this a while ago for another scheduling project.
A couple 'possible' optimizations to think about are:
1) Only scan the remote runqueues once and keep a local copy of the
remote priorities for subsequent 'scans'. Accessing the remote
runqueus (CPU specific cache lines) can be expensive.
2) When verifying priorities, just perform spin_trylock() on the remote
runqueue. If you can immediately get it great. If not, it implies
someone else is messing with the runqueue and there is a good chance
the data you pre-fetched (curr->Priority) is invalid. In this case
it might be faster to just 'move on' to the next candidate runqueue/CPU.
i.e. The next highest priority that the new task can preempt.
Of course, these 'optimizations' would change the algorithm. Trying to
make any decision based on data that is changing is always a crap shoot. :)
--
Mike
-