Messages in this thread | | | Date | Wed, 28 Mar 2012 12:21:08 -0400 | From | Jason Baron <> | Subject | Re: [PATCH Resend] epoll: add EPOLLEXCLUSIVE support |
| |
On Wed, Mar 28, 2012 at 04:09:24PM +0200, richard -rw- weinberger wrote: > On Wed, Mar 28, 2012 at 3:57 PM, Hagen Paul Pfeifer <hagen@jauu.net> wrote: > > High performance server sometimes create one listening socket (e.g. port > > 80), create a epoll file descriptor and add the socket. Afterwards > > create SC_NPROCESSORS_ONLN threads and wait for events. This often > > result in a thundering herd problem because all CPUs are scheduled. > > > > This patch add an additional flag to epoll_ctl(2) called EPOLLEXCLUSIVE. > > If a descriptor is added with this flag only one CPU is scheduled in. > > > > Signed-off-by: Hagen Paul Pfeifer <hagen@jauu.net> > > --- > > Dave rejected the patch and said not network specific. Because there > > is no epoll maintainer this time directly. > > CC'ing maintainers for you... > Please use scripts/get_maintainer.pl. >
Hmmm...Looking at ep_poll() it does an '__add_wait_queue_exclusive()'. So, I *think* epoll_wait() should do what you want, if you are waiting on the same epfd in all the threads.
I think the case you are describing is where each thread does its own ep_create(), and then a subsequent epoll_wait() on the fd from the create?
So, I *think* you can get what you want without adding this flag.
Thanks,
-Jason
| |