实时Linux中的TCP套接字响应时间

时间:2013-08-27 15:21:18

标签: c linux sockets tcp

我正在使用我的Debian Wheezy(带有实时补丁)进行实时项目,它需要使用TCP通信协议的强反应性。

当我发送请求时,响应时间太长(220us),我不明白为什么。 我的问题是,当我发送请求时,我的应用服务器对我的需求的回答太晚了。

所以,我决定使用TCP套接字编写一个简短的程序来获取服务器的响应时间。 (见下面的代码)

#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netinet/tcp.h>

int main(int argc, char* argv[])
{
    char sendBuffer [] = "OK";
    char buffer [10];
    int socket1;
    int workingSocket;
    socklen_t len;

    int nodelay = 1;

    struct sockaddr_in sa1;
    struct sockaddr sa2;
    socket1 = 0;
    workingSocket = 0;

    len = sizeof(sa1);
    memset(&sa1, 0, len);

    sa1.sin_addr.s_addr = htonl (INADDR_ANY);
    sa1.sin_family = AF_INET;
    sa1.sin_port = htons(12345);

    socket1 = socket(AF_INET, SOCK_STREAM, 0);

    bind(socket1, (struct sockaddr *)&sa1, len);

    listen(socket1, 10);

    workingSocket = accept(socket1, &sa2, &len);

    setsockopt (workingSocket, IPPROTO_TCP, TCP_NODELAY, &nodelay, sizeof(nodelay));

    // receive and send message back
    while (1)
    {
        recv(workingSocket, buffer, 5, MSG_WAITALL);

        send(workingSocket, sendBuffer, 2, 0);
    }
}

我检查响应时间,执行以下步骤:

  • 启动wireshark会话以跟踪网络流量
  • 启动我的C服务器。
  • 发送TCP请求,例如:$ echo'abcde'| netcat 192.168.0.1 12345

在发送字符串的时刻(abcde)和我在套接字上收到响应的时刻(OK)之间我的响应时间大约为200μs

这次似乎非常高。我在VxWorks上获得了相同的体验,并且响应时间接近10μs。

Linux内核真的很慢还是有提高系统反应性的技巧?

感谢您的帮助和建议。

0 个答案:

没有答案