Re: [PATCH v3 0/3] epoll: introduce round robin wakeup mode

2 messages, 2 authors, 2015-02-25 · open the first message on its own page

Re: [PATCH v3 0/3] epoll: introduce round robin wakeup mode

From: Ingo Molnar <hidden>
Date: 2015-02-25 07:38:14

* 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

Re: [PATCH v3 0/3] epoll: introduce round robin wakeup mode

From: Jason Baron <jbaron@akamai.com>
Date: 2015-02-25 16:27:04

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help