使用内核转发时是非常消耗cpu中断的因此,内核转发的性能往往是比较低的这个时候我们就要通过对网卡相关参数的调整来达到提高网卡性能的目的
起初我们发现两个网口在做内核转发时的转发效率极低在大包(1518)吞吐时只有30%,且网口有大量errors和overruns产生测试方法如下:
brctl addbr br2
brctl addif br2 eth4 eth5
ifconfig br2 192.168.3.1 netmask 255.255.255.0 broadcast 192.168.3.255 up
执行:
ethtool -S eth4
ethtool -S eth5
查看详细报错均为:rx_resource_errors(此项报错为cpu性能达到瓶颈时产生)。
观察网口中断发现中断均在cpu 0核上触发。已知该cpu有四个核心,0,1为小核主频相对较低,2,3为大核主频稍高,我们考虑将网口中断重新绑定至cpu大核上。
echo 8 > /proc/irq/89/smp_affinity
echo 8 > /proc/irq/90/smp_affinity
echo 8 > /proc/irq/91/smp_affinity
echo 8 > /proc/irq/92/smp_affinity
echo 4 > /proc/irq/93/smp_affinity
echo 4 > /proc/irq/94/smp_affinity
echo 4 > /proc/irq/95/smp_affinity
echo 4 > /proc/irq/96/smp_affinity
以上为网口中断绑核操作,请参考:绑定中断到CPU_smp_affinity_list_放学有种别跑、的博客-CSDN博客
这样以1518包长测试时速率有所提高,但将速率提升至50%时发现流量仪少量丢包,网口RX error还是存在。
我们查看网卡队列发现,两个网RX队列较小只有512TX队列为8192 。
此时我们调整网卡RX队列做尝试
ethtool -G eth4 rx 4096
ethtool -G eth5 rx 4096
至此速率提升至65%,在升高时会发现流量仪检测到丢包,此时网口errors已经消失,但是性能还是没有达到预期,我们考虑将TX队列长度和RX队列长度调整一致
ethtool -G eth4 rx 4096 tx 4096
ethtool -G eth5 rx 4096 tx 4096
至此,1518吞吐量达到线速完美解决性能差问题。