On Thu, Oct 16, 2014 at 02:09:05PM +0200, Nev Ikte wrote:
Hi,
I've a server using epoll and I've noticed that when the traffic is low, the epoll_wait() latency goes up.
I've tried to reproduce it with a single client and basically, if ep_poll() is able to find an event or the timeout is 0, the latency is down to 5usec, otherwise if it enters the waitqueue the latency goes up to 10-25usec, which impact the application performance.
Looking at the code there is something like a todo ("Is it worth to try to dig for events ?") https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/fs/even...
Anyone knows how the situation can be improved? in theory having something like a 50usec spin loop checking for events before entering in the waitqueue should improve the situation.
suggestion? patches?
The epoll code is subtle, tricky, and very very difficult to modify. I suggest trying your suggestion and seeing if it helps any. But be prepared to go down a long rabbit-hole in this area of the kernel. Enjoy the trip! :) greg k-h