在c ++ tcp客户端linux上接收高频数据

时间:2017-10-23 12:17:19

标签: c++ linux sockets

我正在尝试从非阻塞,无延迟的tcp客户端套接字读取高频数据。我在旋转循环中进行读取,基本上看起来像这样:

while(true)
{
    r = recv(socket,some_buffer,20000);
    if (r > 0) 
    {         
        cout << calculate_delay() << endl;
    }
}

这个线程单独在一个专用的核心上运行,而整个操作系统(在我的情况下是centos)在核心0上运行。所以没有任何东西可以干扰我的读取循环。我还使用带有openonload驱动程序的内核旁路网络板(solarflare)在读取网络数据时完全绕过内核。数据来自一个服务器,该服务器以恒定的500usec延迟线与我交叉连接。我的问题是,0.1%的时间里calculate_delay()返回10,15,100ms的延迟,这是荒谬和巨大的。为什么会发生这种情况?

服务器发送250bytes数据包,有时在1毫秒内发送5-10条消息。我还注意到我可以在接收套接字上同时接收500,1000,2000 ...字节的缓冲数据。    如果我在没有延迟的自旋循环中读取,为什么这种缓冲甚至会发生呢?

谢谢

0 个答案:

没有答案