Messages in this thread | | | Subject | Re: [PATCH] sched: Add logic to handle parallel try_to_wake_up() of the same task | From | Mike Galbraith <> | Date | Sun, 14 Jul 2013 07:55:16 +0200 |
| |
On Sat, 2013-07-13 at 19:45 +0400, Kirill Tkhai wrote: > This patch adds optimization of try_to_wake_up() function > for cases when the system is doing parallel wake_up > of the same task on the different cpus. Also it adds > accounting the statistics of these situations. > > We check the status of the task we want to wake up. > If it is TASK_WAKING then the task is manipulated > by try_to_wake_up() on another cpu. And after this > check it will be a moment when the task is queued > and his status is TASK_RUNNING. We just return > earlier when we are sure the task will be TASK_RUNNING > in the future (maybe right after the check). The profit is > we don't loop while we are waiting the spinlock.
Hm, you're adding cycles to the common case to shave spin cycles in the very rare case, then spending some to note that a collision happened. What makes recording worth even 1 cycle? What am I gonna do with the knowledge that $dinkynum wakeups intersected at a some random task?
-Mike
| |