iperf3 UDP发包测试网口出现大量丢包的一种情况!

起因

在两台电脑之间连接一块隔离卡,前后两个隔离口分别映射成为网口,通过网口来进行数据传输。

问题

UDP发包的时候出现大量的丢包情况!

总结

配置过程

  1. 首先需要一个驱动,把隔离口映射成网口,这个驱动需要硬件厂商提供。
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

在打印的信息里查看你的加载的驱动名称,对应的行头的数字就是你的那几个核。对应改一改就行。
iperf3 UDP发包测试网口出现大量丢包的一种情况!_第1张图片

还有问题

  1. 有些人会想在 A:/etc/sysconfig/network-scripts/下配好IP,让开机自动配置,但其实是有问题的。要想配eth0,要先加载驱动,驱动要想自动加载,一般放在 B:/etc/rc.d/rc.local中开机自动运行,但是偏偏开机运行脚本的次序是先A后B。
  2. 而且如果不配好eth0的IP,network起不来,是不会给驱动分配中断的,导致根本没有125、126这些文件,所以,次序是要求比较严格的。
  3. 我的方法是全部放在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

你可能感兴趣的:(新手的项目日记)