iperf3 UDP发包测试网口出现大量丢包的一种情况!
程序员文章站
2024-01-18 08:39:04
...
起因
在两台电脑之间连接一块隔离卡,前后两个隔离口分别映射成为网口,通过网口来进行数据传输。
问题
UDP发包的时候出现大量的丢包情况!
总结
配置过程
- 首先需要一个驱动,把隔离口映射成网口,这个驱动需要硬件厂商提供。
insmod Modul.ko
加载模块到内核中。
2. 然后隔离口被映射成为网口,我这里是eth0
ifconfig eth0 10.0.0.1
配置IP。配置好IP后,网卡才会启动,开始调用驱动,这是内核也会给驱动分配中断。
问题就出在这里:系统有一个irqbalance
的服务,这个服务是自动优化分配内核中断的,而有可能是驱动写的不好的缘故,导致我们驱动需要的4个中断都分配到一个CPU Core
(核)上去了,CPU处理不过来,top
一下看到飙升至100%。
3. 处理方法:
systemctl stop irqbalance.service
先关闭服务,
echo 1 > /proc/irq/125/smp_affinity
echo 2 > /proc/irq/126/smp_affinity
echo 4 > /proc/irq/127/smp_affinity
echo 8 > /proc/irq/128/smp_affinity
而后将中断分配到4个核中,这里你有可能要修改的是125,126,127,128
这几个。
如何修改:
cat /proc/interrupts
在打印的信息里查看你的加载的驱动名称,对应的行头的数字就是你的那几个核。对应改一改就行。
还有问题
- 有些人会想在 A:
/etc/sysconfig/network-scripts/
下配好IP,让开机自动配置,但其实是有问题的。要想配eth0,要先加载驱动,驱动要想自动加载,一般放在 B:/etc/rc.d/rc.local
中开机自动运行,但是偏偏开机运行脚本的次序是先A后B。 - 而且如果不配好
eth0
的IP,network起不来,是不会给驱动分配中断的,导致根本没有125、126
这些文件,所以,次序是要求比较严格的。 - 我的方法是全部放在
rc.local
里用脚本处理
iperf的一般用法
服务器端
iperf -s // tcp
iperf -u -c // udp
客户端
// udp发包,服务器端IP,以800Mbps发送数据,时间60s
iperf -u -c 172.16.105.15 -b 800M -t 60
上一篇: android布局属性大全