【问题标题】:Linux: UDP receive message slower than that is send outLinux:UDP接收消息比发送慢
【发布时间】:2015-03-28 09:17:00
【问题描述】:

我正在使用基于 arm-cpu 的板,运行带有内核 Linux 版本 2.6.12.3-a9-17 的 uclinux,以使用 UDP 协议通过任一网络从 PC 接收数据。

我的问题是,在板子上,虽然我可以接收到所有的消息(没有丢失),但传入消息之间的时间间隔最多限制在 20 毫秒。也就是说,如果我每 30 毫秒发送一次消息,则一切正常。但是,如果我每 10 毫秒发送一次消息,则板子每 20 毫秒显示一次传入的 UDP 包(因此 PC 接收所有消息所需的时间是 PC 的两倍)。

我正在使用这些代码来测量两个传入消息之间的时间间隔:

struct timeval tnew, told, dt;
gettimeofday(&tnew,0);
told = tnew;

while (1) {
    memset(buf, 100, 0);
    int recvlen = recvfrom(fd, buf, 100 , 0,
                           (struct sockaddr *)&addr_recv, &addr_len);
    if (recvlen>0) {
        gettimeofday(&tnew ,0);
        timersub(&tnew,&told,&dt);
        told = tnew;
        printf("UDP intput: %fms, string:%s\n", (float)dt.tv_usec / 1000.0,buf);
    }

结果如下:

在电脑上:

UDP output: 10.019000ms, string: 353:ABCDEFG
UDP output: 10.067000ms, string: 354:ABCDEFG
UDP output: 10.068000ms, string: 355:ABCDEFG
UDP output: 10.068000ms, string: 356:ABCDEFG
UDP output: 10.004000ms, string: 357:ABCDEFG
UDP output: 10.120000ms, string: 358:ABCDEFG

在船上:

UDP intput: 20.000000ms, string: 353:ABCDEFG, 
UDP intput: 20.002000ms, string: 354:ABCDEFG, 
UDP intput: 19.998000ms, string: 355:ABCDEFG, 
UDP intput: 20.051000ms, string: 356:ABCDEFG, 
UDP intput: 19.953000ms, string: 357:ABCDEFG, 
UDP intput: 19.996000ms, string: 358:ABCDEFG, 

我认为这个间隔应该由linux系统中的某些东西定义。我该如何解决?

顺便说一句,板子的iptables显示(EXT = eth0):

 iptables -A INPUT -i $EXT -p udp -d 0/0 --dport 1024:65535 -j ACCEPT

非常感谢。

【问题讨论】:

  • 你可以阅读TCP如何处理同样的问题,sliding windows
  • 只是猜测。您是否尝试过提高接收进程的优先级?试试 RT 优先。
  • 板子输出printf字符串需要多长时间?它有快速视频控制器还是慢速串行链路?
  • @MartinJames:通过 ssh,printf 使用 0.4ms,通过串口,我将输出重定向到一个文件,printf 使用 0.17ms。
  • @Marian 我试着把它改成 -20 但问题仍然存在

标签: c linux sockets udp


【解决方案1】:

感谢您的友好回复。我发现问题是由于睡眠(10)和一段时间的结束。在板上,usleep(10) 需要 20 毫秒,而在另一台 PC 上需要 0.1 毫秒。

【讨论】:

    猜你喜欢
    • 2011-05-04
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多