LibPCap&数据包丢弃 - Linux

时间:2015-05-14 02:24:26

标签: c sockets udp libpcap centos7

我的应用程序使用libpcap从各种来源捕获UDP数据包。有时应用程序必须做一些繁重的计算工作(球场~2秒)...在此期间应用程序不是从libpcap“读取”。这导致数据包丢失,但我很难理解为什么。内核没有丢弃数据包&我认为套接字缓冲区应该足够大。

接口每秒接收~1000个数据包。最大数据包大小约为600字节。所以我们称它为1MB / s(高估)。

我将libpcap缓冲区大小设置为4MiB(以字节为单位传递给libpcap),快照长度为~600字节。

我还修改了一些操作系统参数(Centos7):

    /proc/sys/net/core/netdev_max_backlog: 10000
    /proc/sys/net/core/optmem_max: 8388608
    /proc/sys/net/core/rmem_default: 8388608
    /proc/sys/net/core/rmem_max: 8388608

来自netstat -i的结果:

    Iface  MTU  RX-OK     RX-ERR RX-DRP RX-OVR    
    eno2   1500 558672786 0      0      0

我已经尝试使所有这些值更大,但丢弃的数据包数量似乎没有减少。

可能值得一提的东西......我也有tcpdump在捕获相同UDP数据包的同一个盒子上运行(数据包是多播的)。当数据包从某些缓冲区(或堆栈的某些部分)中删除时,它会从问题中提出。

我迷失在这里。任何帮助将不胜感激。

感谢。

0 个答案:

没有答案