我遇到了select()的延迟问题。 实际上我不确定这是否是select()的问题。
故事如下。
但......存在延迟问题...... 我有NIC tcpdump时间戳,Application的select()唤醒时间戳。 这些时间戳与“15us”相比有很大的不同。
我的应用程序中没有大的逻辑,只需执行select()socket fd并在select()唤醒后立即获取gettimeofday()函数的时间戳。 我不知道,为什么唤醒select()需要很长时间。
我测试过以确定select()是否是问题。 1.没有选择,只需循环到recv()套接字fd,直到我得到第一个数据。 2. NIC获取数据流,我得到tcpdump timestmap 3. recv()获取第一个数据流。 4.我在第一次recv()成功后立即获得时间戳。
此测试显示NIC时间戳和recv()第一个时间戳之间的巨大差异。
...摘要 NIC获取数据流后。 1. select()检测socket fd,我认为它需要15us。 2.否select()检测到套接字fd,只有recv()循环才会得到第一个数据, 它也需要超过15us。
请有人帮助我......这是可接受的号码吗? (我的意思是超过15us。)或者有一个我不知道的检查点?
服务器HP,OS redhat 6.2内核2.6
答案 0 :(得分:0)
这是通用OS中的调度延迟。您唯一的选择可能是切换到实时操作系统。