看着可以让吐槽君的软路由性能得到很大提升,就是最近没空,先转来万事屋收藏。
RTL8125B是realtek作为PC上使用的2.5G网卡芯片,2020年和 2021年,这芯片作为好多软路由设备或者轻NAS设备板载芯片很受欢迎。
realtek官方发布了r8125 驱动,最新版本是9.007.01,很可惜官方驱动默认关闭了RSS(rx 的多队列支持,)也关闭了TX的多队列。
RTL8125B硬件上设计是支持32个队列的,这个可以通过lspci -vv | grep MSI-X确认,观察/proc/interrupts 可以发现每块网卡都有32个队列,只有0和16号对了有数据而且都集中在cpu0上,这是典型的单队列运行模式。
刚开始的时候我通过脚本来手动调整几块网卡的软中断分配到几个cpu核心上,前些时候处理ikuai 端口断开再连接的毛病的时候仔细看了一下官方驱动。驱动代码是支持RSS和TX驱动的,而且代码中对于RX使用4个队列。
TX使用2个队列, 参见r8125_n.c中rtl8125_init_software_variable函数。
switch (tp->mcfg) {
case CFG_METHOD_4:
case CFG_METHOD_5:
case CFG_METHOD_7:
tp->HwSuppNumTxQueues = 2;
tp->HwSuppNumRxQueues = 4;
break;
default:
tp->HwSuppNumTxQueues = 1;
tp->HwSuppNumRxQueues = 1;
break;
}
这样就简单了,只需要更改官方代码的src目录下Makefile文件 再编译驱动就好了,Makefile中找到ENABLE_MULTIPLE_TX_QUEUE和 ENABLE_RSS_SUPPORT 后面更改为y就好
ENABLE_MULTIPLE_TX_QUEUE = y
ENABLE_RSS_SUPPORT = y
如果要同时关闭ASPM,修改CONFIG_ASPM 就好
CONFIG_ASPM = n
这样使用RTL8125B作为软路由或者ALLINONE的可以更改官方驱动文件 自编译驱动就可以更完美了。
如果使用pve或者unraid 且使用了DKMS,比如awesometic/realtek-r8125-dkms的deb包安装驱动的话,可以执行一下命令来完成修改
cd /usr/src/r8125-9.007.01
sed -i ‘s/ENABLE_MULTIPLE_TX_QUEUE = n/ENABLE_MULTIPLE_TX_QUEUE = y/g’ src/Makefile
sed -i ‘s/ENABLE_RSS_SUPPORT = n/ENABLE_RSS_SUPPORT = y/g’ src/Makefile
dkms remove r8125/9.007.01 -k 5.13.19-2-pve
dkms build r8125/9.007.01 -k 5.13.19-2-pve –force-version-override
dkms install r8125/9.007.01 -k 5.13.19-2-pve –force-version-override
中 5.13.19-2-pve为对应的内核名称 -k之后可以用Tab键补齐。这个时候modinfo r8125 应该可以看到输出信息version: 9.007.01-NAPI-RSS,在NAPI后面多了RSS。
重启后生效。
重启之后可以 grep -E enp* /proc/interrupts 来查看效果,cpu0 cpu1 cpu2 cpu3 都有中断了。
这样开启rx tx的多队列支持。
我的J4125 CPU 和PVE7.1-8 拷机12小时稳定无错误。PVE对虚拟机开启多队列支持之后,虚拟机里面ethtool -L也可以开始多队列了。
补 自编译 dkms deb包(回复本文可获得下载链接)
本文转自恩山:阅读原文
回复一下看看
666
回复一下看看