epoll_wait 阻塞时间超过超时

epoll_wait blocks for longer then timeout

我的应用程序等待 epoll_wait 的时间比我在超时中指定的时间长得多:

22578 09:33:46.959791 epoll_wait(5,  <unfinished ...>
22578 09:33:50.010794 <... epoll_wait resumed> [], 128, 1498) = 0
...
22034 09:35:07.686896 epoll_wait(5,  <unfinished ...>
22034 09:35:09.482526 <... epoll_wait resumed> [{EPOLLIN, {u32=151458248, u64=151458248}}], 128, 362) = 1
...
22036 09:35:41.433241 epoll_wait(5,  <unfinished ...>
22036 09:35:43.176881 <... epoll_wait resumed> [], 128, 97) = 0

我已经要求超时一个值,但时间显示它等待更长的时间间隔。

来自日志的时间是可靠的 - 我从 strace 输出中得到它。 我该怎么做才能使 epoll 中的超时更细化? 为什么 epoll_wait 如此不准确?

documentation 说:

Note that the timeout interval will be rounded up to the system clock granularity, and kernel scheduling delays mean that the blocking interval may overrun by a small amount.

换句话说,超时是一个最小值。

但是机器闲置时不会出现这么大的延迟。 如果你有实时约束,请确保你的代码实际上可以运行,即设置适当的调度策略,防止它被换出等