* Jason Baron [off-list ref] wrote:
Hi,
When we are sharing a wakeup source among multiple epoll
fds, we end up with thundering herd wakeups, since there
is currently no way to add to the wakeup source
exclusively. This series introduces a new EPOLL_ROTATE
flag to allow for round robin exclusive wakeups.
I believe this patch series addresses the two main
concerns that were raised in prior postings. Namely, that
it affected code (and potentially performance) of the
core kernel wakeup functions, even in cases where it was
not strictly needed, and that it could lead to wakeup
starvation (since we were are no longer waking up all
waiters). It does so by adding an extra layer of
indirection, whereby waiters are attached to a 'psuedo'
epoll fd, which in turn is attached directly to the
wakeup source.
sched/wait: add __wake_up_rotate()
include/linux/wait.h | 1 +
kernel/sched/wait.c | 27 ++++++++++++++++++++++
So the scheduler bits are looking good to me in principle,
because they just add a new round-robin-rotating wakeup
variant and don't disturb the others.
Is there consensus on the epoll ABI changes? With Davide
Libenzi inactive eventpoll appears to be without a
dedicated maintainer since 2011 or so. Is there anyone who
knows the code and its usages in detail and does final ABI
decisions on eventpoll - Andrew, Al or Linus?
Thanks,
Ingo
On 02/25/2015 02:38 AM, Ingo Molnar wrote:
* Jason Baron [off-list ref] wrote:
quoted
Hi,
When we are sharing a wakeup source among multiple epoll
fds, we end up with thundering herd wakeups, since there
is currently no way to add to the wakeup source
exclusively. This series introduces a new EPOLL_ROTATE
flag to allow for round robin exclusive wakeups.
I believe this patch series addresses the two main
concerns that were raised in prior postings. Namely, that
it affected code (and potentially performance) of the
core kernel wakeup functions, even in cases where it was
not strictly needed, and that it could lead to wakeup
starvation (since we were are no longer waking up all
waiters). It does so by adding an extra layer of
indirection, whereby waiters are attached to a 'psuedo'
epoll fd, which in turn is attached directly to the
wakeup source.
sched/wait: add __wake_up_rotate()
include/linux/wait.h | 1 +
kernel/sched/wait.c | 27 ++++++++++++++++++++++
So the scheduler bits are looking good to me in principle,
because they just add a new round-robin-rotating wakeup
variant and don't disturb the others.
Is there consensus on the epoll ABI changes? With Davide
I'm not sure there is a clear consensus on this change,
but I'm hoping that I've addressed the outstanding
concerns in this latest version.
I also think the addition of a way to do a 'wakeup policy'
here will open up other 'policies', such as taking into
account cpu affinity as you suggested. So, I think its
potentially an interesting direction for this code.
Libenzi inactive eventpoll appears to be without a
dedicated maintainer since 2011 or so. Is there anyone who
knows the code and its usages in detail and does final ABI
decisions on eventpoll - Andrew, Al or Linus?
Generally, Andrew and Al do more 'final' reviews here,
and a lot of others on lkml are always very helpful in
looking at this code. However, its not always clear, at
least to me, who I should pester.
Thanks,
-Jason