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
如此不准确?
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.
换句话说,超时是一个最小值。
但是机器闲置时不会出现这么大的延迟。
如果你有实时约束,请确保你的代码实际上可以运行,即设置适当的调度策略,防止它被换出等
我的应用程序等待 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
如此不准确?
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.
换句话说,超时是一个最小值。
但是机器闲置时不会出现这么大的延迟。 如果你有实时约束,请确保你的代码实际上可以运行,即设置适当的调度策略,防止它被换出等