我的应用程序在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
非常不准确?
答案 0 :(得分:1)
请注意,超时间隔将向上舍入为系统时钟 粒度和内核调度延迟意味着阻塞 间隔可能会少量超支。
换句话说,超时是最小值。
但是当机器闲置时,不会发生如此大的延迟。 如果您有实时约束,请确保您的代码可以实际运行,即设置适当的调度策略,防止其被换出等等。