On Wed, Apr 28, 2010 at 9:21 PM, Jamie Lokier <jamie@xxxxxxxxxxxxx> wrote: > Changli Gao wrote: >> >> fs/eventpoll.c: 1443. >> wait.flags |= WQ_FLAG_EXCLUSIVE; >> __add_wait_queue(&ep->wq, &wait); > > The same thing about assumptions applies here. The userspace process > may be waiting for an epoll condition to get access to a resource, > rather than being a worker thread interchangeable with others. Oh, the lines above are the current ones. So the assumptions applies and works here. > > For example, userspace might be using a pipe as a signal-safe lock, or > signal-safe multi-token semaphore, and epoll to wait for that pipe. > > WQ_FLAG_EXCLUSIVE means there is no point waking all tasks, to avoid a > pointless thundering herd. It doesn't mean unfairness is ok. The users should not make any assumption about the waking up sequence, neither LIFO nor FIFO. > > The LIFO idea _might_ make sense for interchangeable worker-thread > situations - including userspace. It would make sense for pipe > waiters, socket waiters (especially accept), etc. Yea, and my following patches are for socket waiters. > > Do you have any measurements which showing the LIFO mode performing > better than FIFO, and by how much? > I didn't do any test yet. But some work done by LSE project years ago showed that it is better. http://lse.sourceforge.net/io/aionotes.txt " Also in view of better cache utilization the wake queue mechanism is LIFO by default. (A new exclusive LIFO wakeup option has been introduced for this purpose)" -- Regards, Changli Gao(xiaosuo@xxxxxxxxx) -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html