Mercurial > hg > nginx-quic
comparison src/event/modules/ngx_epoll_module.c @ 6635:6acaa638fa07
Events: support for EPOLLEXCLUSIVE.
This flag appeared in Linux 4.5 and is useful for avoiding thundering herd
problem.
The current Linux kernel implementation walks the list of exclusive waiters,
and queues an event to each epfd, until it finds the first waiter that has
threads blocked on it via epoll_wait().
author | Valentin Bartenev <vbart@nginx.com> |
---|---|
date | Fri, 15 Jul 2016 15:18:57 +0300 |
parents | 18f6120e3b7a |
children | 75dbab4ea930 |
comparison
equal
deleted
inserted
replaced
6634:18f6120e3b7a | 6635:6acaa638fa07 |
---|---|
25 #define EPOLLWRBAND 0x200 | 25 #define EPOLLWRBAND 0x200 |
26 #define EPOLLMSG 0x400 | 26 #define EPOLLMSG 0x400 |
27 | 27 |
28 #define EPOLLRDHUP 0x2000 | 28 #define EPOLLRDHUP 0x2000 |
29 | 29 |
30 #define EPOLLEXCLUSIVE 0x10000000 | |
30 #define EPOLLONESHOT 0x40000000 | 31 #define EPOLLONESHOT 0x40000000 |
31 #define EPOLLET 0x80000000 | 32 #define EPOLLET 0x80000000 |
32 | 33 |
33 #define EPOLL_CTL_ADD 1 | 34 #define EPOLL_CTL_ADD 1 |
34 #define EPOLL_CTL_DEL 2 | 35 #define EPOLL_CTL_DEL 2 |
608 | 609 |
609 } else { | 610 } else { |
610 op = EPOLL_CTL_ADD; | 611 op = EPOLL_CTL_ADD; |
611 } | 612 } |
612 | 613 |
614 #if (NGX_HAVE_EPOLLEXCLUSIVE && NGX_HAVE_EPOLLRDHUP) | |
615 if (flags & NGX_EXCLUSIVE_EVENT) { | |
616 events &= ~EPOLLRDHUP; | |
617 } | |
618 #endif | |
619 | |
613 ee.events = events | (uint32_t) flags; | 620 ee.events = events | (uint32_t) flags; |
614 ee.data.ptr = (void *) ((uintptr_t) c | ev->instance); | 621 ee.data.ptr = (void *) ((uintptr_t) c | ev->instance); |
615 | 622 |
616 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ev->log, 0, | 623 ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ev->log, 0, |
617 "epoll add event: fd:%d op:%d ev:%08XD", | 624 "epoll add event: fd:%d op:%d ev:%08XD", |