在基于RAW套接字的数据包发送测试中,我发现了非常刺激的症状。 使用默认的RAW套接字设置(特别是对于SO_SNDBUF大小), 原始套接字可毫无问题地发送100,000个数据包,但发送所有数据包需要大约8秒的时间,并且数据包被接收器进程正确接收。 这意味着通过默认设置可以实现大约10,000pps(每秒数据包)。 (我认为这是太小了数字出乎我的意料。)RAW套接字发送:数据包丢失
无论如何,增加PPS值,我增加了数据包通过调整在/ proc/SYS /网/核心/ {wmem_max,wmem_default发送缓冲区大小 }。 增加两个系统参数后,我确定了刺激症状。 尽快发送100,000个数据包,但只有3,000个数据包由接收器进程(位于远程节点)接收到 。
在发送的Linux机器上(Centos 5.2),我做了netstat -a -s和ifconfig。 Netstat显示发出了100,000个请求,但ifconfig显示 只有3000个数据包被发送。
我想知道为什么发生这种情况,我也想知道 我该如何解决这个问题(当然我不知道它是否真的是一个问题)。
有没有人可以给我一些建议,例子或对这个问题的引用?
最好的问候, bjlee
感谢您的评论。 我试过ethtool -G rx 4096 tx 4096和 观察到tx troughput增加了一倍。 但是最显着的增强是通过/ sbin/ifconfig eth1 txqueuelen 65536实现的 。 使用此设置,tx吞吐量最大化为 (在0.16秒内发送大约70,000个数据包)。 谢谢! –
只是好奇,但没有很多吃进内核内存或不能交换的内存。只是想知道什么是权衡,否则我们都希望Linux内核预先调整到你所做的。 – selbie
我同意。但我不知道权衡。我需要来自内核专家的评论。 –