Messages in this thread | | | Date | Wed, 25 Sep 2002 22:24:22 -0700 | From | Andrew Morton <> | Subject | Re: [patch 1/4] prepare_to_wait/finish_wait sleep/wakeup API |
| |
Linus Torvalds wrote: > > On Wed, 25 Sep 2002, David S. Miller wrote: > > > > Ok, so if the condition retest fails at wakeup (someone got to the > > event before us), it's ok because we add ourselves back to the wait > > queue first, mark ourselves as sleeping, _then_ retest. > > Right. The looping case (if somebody else was first) is slowed down > marginally, but the common case is sped up and needs one less time through > the waitqueue lock. >
Most of the gain I saw in Badari's profiles (dd to 60 disks) was in fact in __wake_up. 60 tasks parked on a waitqueue, waiting for memory to come clean, wakeups being delivered to them faster than they can wake up and get off the queue.
Yeah, my code is bust ;) The heavy __wake_up cost in there seems to be specific to the profusion chipset, which is two quads joined by wet string, but the principle still applies.
I expect a decent win would come from using this technique in select/poll, but that code relies on the remains-on-the-waitqueue semantics, and would need some fiddling. - 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/
| |