在基于 RAW-socket 的数据包发送测试期间,我发现了非常恼人的症状。使用默认的 RAW 套接字设置(特别是对于 SO_SNDBUF 大小),原始套接字发送 100,000 个数据包没有问题,但发送所有数据包大约需要 8 秒,并且数据包被接收进程正确接收。这意味着默认设置可实现约 10,000 pps(每秒数据包)。(我觉得这个数字太小了,出乎我的意料。)
无论如何,为了增加 pps 值,我通过调整 /proc/sys/net/core/{wmem_max, wmem_default} 来增加数据包发送缓冲区的大小。增加两个系统参数后,我已经确定了刺激性症状。100,000 个数据包被迅速发送,但接收进程(位于远程节点)仅接收 3,000 个数据包。
在发送 Linux 机器(Centos 5.2),我做了 netstat -a -s 和 ifconfig。Netstat 显示发出了 100,000 个请求,但 ifconfig 显示只有 3,000 个数据包被发送。
我想知道出现这种情况的原因,也想知道如何解决这个问题(当然不知道是不是真的有问题)。
有人能给我一些建议、例子或对这个问题的参考吗?
最好的问候, bjlee