select watch socket fd醒得太慢了

时间:2013-06-03 00:46:53

标签: linux select latency tcpdump recv

我遇到了select()的延迟问题。 实际上我不确定这是否是select()的问题。

故事如下。

  1. 我正在使用select()来检测套接字fd事件。
  2. select()唤醒后,我执行recv()从套接字缓冲区获取数据流。
  3. 没问题,效果很好。
  4. 但......存在延迟问题...... 我有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

1 个答案:

答案 0 :(得分:0)

这是通用OS中的调度延迟。您唯一的选择可能是切换到实时操作系统。