Eric Dumazet 4938d7e023 poll: avoid extra wakeups in select/poll
After introduction of keyed wakeups Davide Libenzi did on epoll, we are
able to avoid spurious wakeups in poll()/select() code too.

For example, typical use of poll()/select() is to wait for incoming
network frames on many sockets.  But TX completion for UDP/TCP frames call
sock_wfree() which in turn schedules thread.

When scheduled, thread does a full scan of all polled fds and can sleep
again, because nothing is really available.  If number of fds is large,
this cause significant load.

This patch makes select()/poll() aware of keyed wakeups and useless
wakeups are avoided.  This reduces number of context switches by about 50%
on some setups, and work performed by sofirq handlers.

Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>
Acked-by: David S. Miller <davem@davemloft.net>
Acked-by: Andi Kleen <ak@linux.intel.com>
Acked-by: Ingo Molnar <mingo@elte.hu>
Acked-by: Davide Libenzi <davidel@xmailserver.org>
Cc: Christoph Lameter <cl@linux-foundation.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2009-06-16 19:47:48 -07:00
..
2009-06-11 21:36:14 -04:00
2009-06-11 21:36:14 -04:00
2009-06-11 21:36:07 -04:00
2009-06-11 21:36:01 -04:00
2009-06-11 21:36:01 -04:00
2009-06-11 21:36:07 -04:00
2009-06-11 21:36:14 -04:00
2009-06-11 21:36:07 -04:00
2009-05-15 11:24:59 -05:00
2009-06-11 21:36:07 -04:00
2009-06-12 10:02:03 -05:00
2009-06-11 21:36:11 -04:00
2009-06-11 21:36:11 -04:00
2009-06-11 21:36:15 -04:00
2009-06-11 21:36:07 -04:00
2009-06-11 21:36:15 -04:00
2009-06-11 21:36:16 -04:00
2009-06-11 21:36:11 -04:00
2009-05-22 18:40:59 +10:00
2009-06-11 21:36:07 -04:00
2009-06-11 21:36:11 -04:00
2009-06-11 21:36:12 -04:00
2009-06-11 21:36:07 -04:00
2009-06-11 21:36:11 -04:00
2009-06-11 21:36:01 -04:00
2009-06-11 21:36:11 -04:00
2009-06-11 21:36:13 -04:00
2009-06-11 21:36:12 -04:00
2009-06-14 17:58:25 -07:00
2009-06-11 21:36:07 -04:00
2009-06-11 21:36:07 -04:00
2009-06-11 21:36:16 -04:00
2009-06-11 21:36:11 -04:00
2009-06-11 21:36:13 -04:00
2009-06-11 21:36:16 -04:00
2009-06-11 21:36:06 -04:00
2009-06-11 21:36:07 -04:00
2009-06-11 21:36:11 -04:00
2009-06-11 21:36:01 -04:00
2009-06-11 21:36:08 -04:00
2009-06-11 21:36:02 -04:00
2009-06-11 21:36:11 -04:00
2009-06-11 21:36:02 -04:00