欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-01-18 08:39:04
...

起因

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

问题

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. 有些人会想在 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