dominic 发表于 2021-12-14 09:56

开启RTL8125B的多队列支持和关闭ASPM。PVE 下J4125 测试有效

本帖最后由 dominic 于 2022-12-30 13:27 编辑


2022-12-30更新:从9.008代码开始realtek 发布的代码又关闭了RSS功能,
r8125_n.c 代码以下代码片段确定了EnableRss 为0,也就是关闭了RSS功能。所以最后效果是1个rx队列 2个tx队列了,HwSuppNumTxQueues还是2。

#ifndef ENABLE_LIB_SUPPORT
      switch (tp->mcfg) {
      case CFG_METHOD_4:
      case CFG_METHOD_5:
      case CFG_METHOD_7:
                if (tp->HwSuppIsrVer == 2) {
                        tp->RequireRduNonStopPatch = 1;
                        tp->EnableRss = 0;
                }
                break;
      }
#endif

ENABLE_LIB_SUPPORT 如果设置为y的话,源代码中却有缺少r8125_lib.h和r8125_lib.c文件。只能凑合用用吧。
========================

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包:
2022.03.18更新 :
2022.05.01更新:



墨色之月 发表于 2021-12-14 10:11

这个不错!
话说普通的8111F之类也是支持RSS的吧(好像4队列?),不知能不能也这么改。

dominic 发表于 2021-12-14 10:33

墨色之月 发表于 2021-12-14 10:11
这个不错!
话说普通的8111F之类也是支持RSS的吧(好像4队列?),不知能不能也这么改。

如果通过lspci确认硬件支持,那么查看驱动源代码看看代码是否支持。一般来说都可以这样改。
我仔细阅读了代码,代码本身就处理了多队列,改成这样并无啥毛病。
realtek把这些芯片默认作为pc网卡芯片,没有开启多队列可以理解。

whoweasn 发表于 2021-12-14 11:08

这样做的好处是 更适合做软路由了吗回降低cpu占用吗还是要和多核cpu配合

yc01121 发表于 2021-12-14 11:17

mark一下,这个日后会需要的。

刚开始Unraid用2.5g驱动有点问题。现在更新系统就已经很完善了

smdx 发表于 2021-12-14 12:02

请问PVE7.0自带8125B驱动的怎么搞啊?谢谢

dominic 发表于 2021-12-14 13:18

smdx 发表于 2021-12-14 12:02
请问PVE7.0自带8125B驱动的怎么搞啊?谢谢

pve 7.0 不自带r8125驱动的,应该是有安装的。
你看看你的是不是用dkms安装,如果是,按照操作就好。如果不是dkms安装,建议使用dkms安装r8125驱动。这样更新kernel的时候会一般来说自动更新。

dominic 发表于 2021-12-14 13:20

whoweasn 发表于 2021-12-14 11:08
这样做的好处是 更适合做软路由了吗回降低cpu占用吗还是要和多核cpu配合

多核cpu 会让CPU处理网卡的中断更加均衡,理论上讲会提高性能。同

dominic 发表于 2021-12-14 13:26

yc01121 发表于 2021-12-14 11:17
mark一下,这个日后会需要的。

刚开始Unraid用2.5g驱动有点问题。现在更新系统就已经很完善了

开启RSS 和TX 队列会锦上添花。

smdx 发表于 2021-12-14 13:34

本帖最后由 smdx 于 2021-12-14 13:38 编辑

dominic 发表于 2021-12-14 13:18
pve 7.0 不自带r8125驱动的,应该是有安装的。
你看看你的是不是用dkms安装,如果是,按照操作就好。如 ...
就官方的7.0安装包装完pve后直接识别网卡了不是应该自带驱动了吗?就下载你提供的安装包用dkms安装就行了对吧?谢谢

pve版本:

dominic 发表于 2021-12-14 13:36

smdx 发表于 2021-12-14 13:34
就官方的7.0安装包装完pve后直接识别网卡了不是应该自带驱动了吗?

要么有人帮你处理了,要么目前使用的linux官方的r8169驱动。

smdx 发表于 2021-12-14 13:49

dominic 发表于 2021-12-14 13:36
要么有人帮你处理了,要么目前使用的linux官方的r8169驱动。

按你说的用modinfo r8125命令没有输出信息,应该是用r8169驱动了。马上安装试试,谢谢

dominic 发表于 2021-12-14 13:59

smdx 发表于 2021-12-14 13:49
按你说的用modinfo r8125命令没有输出信息,应该是用r8169驱动了。马上安装试试,谢谢

记得black r8169驱动

smdx 发表于 2021-12-14 14:10

dominic 发表于 2021-12-14 13:59
记得black r8169驱动

楼主请教一下,貌似安装不了....

------------------------------
Deleting module version: 9.007.01
completely from the DKMS tree.
------------------------------
Done.
Unpacking realtek-r8125-dkms (9.007.01-1) over (9.007.01-1) ...
Setting up realtek-r8125-dkms (9.007.01-1) ...
Loading new realtek-r8125-9.007.01 DKMS files...
Building for 5.11.22-4-pve
Building for architecture amd64
Module build for kernel 5.11.22-4-pve was skipped since the
kernel headers for this kernel does not seem to be installed.

dominic 发表于 2021-12-14 16:25

smdx 发表于 2021-12-14 14:10
楼主请教一下,貌似安装不了....

------------------------------


你没有安装header。

apt update && apt install pve-headers-$(uname -r)
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 开启RTL8125B的多队列支持和关闭ASPM。PVE 下J4125 测试有效