epoll_wait阻塞更长时间然后超时

时间:2016-12-02 10:55:49

标签: linux linux-kernel timeout epoll

我的应用程序在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非常不准确?

1 个答案:

答案 0 :(得分:1)

documentation说:

  

请注意,超时间隔将向上舍入为系统时钟   粒度和内核调度延迟意味着阻塞   间隔可能会少量超支。

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

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