Linux kernel UDP数据包突发丢失和“SndbufErrors”增加

Linux kernel UDP数据包突发丢失和“SndbufErrors”增加,linux-kernel,udp,packet-loss,Linux Kernel,Udp,Packet Loss,我有一个服务器应用程序,它以200Mbps的速度发送UDP数据包。输出以太网接口为1000Mbps。但是UDP数据包在不规则的时间间隔内突发丢失。我注意到只要发生数据包丢失问题,/proc/net/snmp中的SndbufErrors字段就会增加。如果UDP数据包被发送到环回接口,则数据包丢失不存在 udp没有返回任何错误。发送 我已经深入研究了Linux内核,但是当我到达路由子系统时,我就不知道了 SndbufErrors是什么意思?为什么数量会增加?数据包的大小是多少?大多数网络接口都有“每

我有一个服务器应用程序,它以200Mbps的速度发送UDP数据包。输出以太网接口为1000Mbps。但是UDP数据包在不规则的时间间隔内突发丢失。我注意到只要发生数据包丢失问题,
/proc/net/snmp
中的
SndbufErrors
字段就会增加。如果UDP数据包被发送到
环回
接口,则数据包丢失不存在

udp没有返回任何错误。发送

我已经深入研究了Linux内核,但是当我到达路由子系统时,我就不知道了


SndbufErrors
是什么意思?为什么数量会增加?

数据包的大小是多少?大多数网络接口都有“每秒数据包数”限制和“Mbps”限制。数据包大小约为1140字节。如何在Linux中检查“每秒数据包数”?在这种数据包大小下,它不太可能与数据包大小相关-这通常只是非常小的数据包(例如<100字节)的问题啊,也有许多小数据包正好小于100字节。使用
tcpdump
捕获数据包的现象是,操作系统在大约960ms内突然暂停发送UDP数据包。然后操作系统继续发送UDP数据包,但会发生突发数据包丢失。“每秒数据包数”的限制是否会导致这种现象?我认为,如果发送缓冲区中没有足够的空间,那么SndbufErrors将被计算在内。如果通过环回发送时不存在数据包丢失,则1G卡使用的驱动程序存在一些问题。您可以在UDP部分下检查#netstat-S,看看它是否真的被删除了。您可以调整net.core.rmem_default net.core.wmem_default net.core.rmem_max net.core.wmem_max的值,并查看它是否消失。如果没有,则驱动程序会出现一些问题,例如