在PVE8中安装RTL8125网卡驱动

起因

近期使用sensors命令查看CPU温度时,发现有一个核心的温度明显高于其他核心,连接数上升后温差更高。

排障

获取网卡地址:

1
lspci | grep Ethernet
1
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. Killer E3000 2.5GbE Controller (rev 06)

查看网卡加载的驱动:

1
lspci -s 03:00.0 -k
1
2
3
4
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. Killer E3000 2.5GbE Controller (rev 06)
Subsystem: ASRock Incorporation Killer E3000 2.5GbE Controller
Kernel driver in use: r8169
Kernel modules: r8169

查看网卡中断数量

1
cat /proc/interrupts | grep -P 'enp3|CPU0' #我的网卡叫enp3s0
1
2
           CPU0	...	CPU3		...	CPU23
181: 0 ... 391472182 ... 0 IR-PCI-MSIX-0000:03:00.0 0-edge enp3s0

分析

这是一块瑞昱的2.5G板载网卡,且加载了r8169驱动,怀疑是RTL8125换皮。

中断大量集中在单个核心上,默认的网卡驱动可能没有开启多队列支持。

准备

获取内核版本

1
uname -a
1
Linux *** 6.5.13-1-pve #1 SMP PREEMPT_DYNAMIC PMX 6.5.13-1 (2024-02-05T13:50Z) x86_64 GNU/Linux

可以看到我的是6.5版本的pve内核

安装依赖

1
2
apt update
apt install dkms proxmox-headers-6.5

安装驱动

快速安装

已经有大佬编译打包好了驱动,启用了TX多队列和RSS,禁用了ASPM。devome/realtek-r8125-dkms

1
2
#自行下载需要的deb包
dpkg -i realtek-r8125-dkms_*_amd64.deb

手动编译

⚠本节内容未经过验证,不保证可用,仅供参考⚠

获取并解压源代码

瑞昱驱动发布页下载对应的驱动源码,并上传至目标主机。

解压源码

1
tar -jxvf <文件名>

假设下载的源码是r8125-9.012.04.tar.bz2

1
tar -jxvf r8125-9.012.04.tar.bz2

参数修改

修改Makefile

1
nano ./r8125-9.012.04/src/Makefile

修改以下内容

1
2
3
CONFIG_ASPM = n
ENABLE_MULTIPLE_TX_QUEUE = y
ENABLE_RSS_SUPPORT = y

移动源码

1
mv ./r8125-9.012.04 /usr/src

构建并安装

1
2
3
dkms add -m r8125 -v 9.012.04
dkms build -m r8125 -v 9.012.04
dkms install -m r8125 -v 9.012.04

配置

禁用自带的r8169驱动

1
echo "blacklist r8169" >> /etc/modprobe.d/dkms.conf

应用修改并重启

1
2
3
update-grub
update-initramfs -u -k all
reboot

效果

1
2
3
4
5
6
lspci -s 03:00.0 -k

03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. Killer E3000 2.5GbE Controller (rev 06)
Subsystem: ASRock Incorporation Killer E3000 2.5GbE Controller
Kernel driver in use: r8125
Kernel modules: r8169, r8125
1
2
3
4
5
6
7
8
9
10
11
12
13
cat /proc/interrupts | grep -P 'enp3|CPU0'

CPU0 ... CPU3 CPU4 CPU5 CPU6 ... CPU19 CPU20 CPU21 CPU22 CPU23
181: 0 ... 1472182 0 0 0 ... 0 0 0 0 0 IR-PCI-MSIX-0000:03:00.0 0-edge enp3s0-0
182: 0 ... 0 1517626 0 0 ... 0 0 0 0 0 IR-PCI-MSIX-0000:03:00.0 1-edge enp3s0-1
183: 0 ... 0 0 1599632 0 ... 0 0 0 0 0 IR-PCI-MSIX-0000:03:00.0 2-edge enp3s0-2
184: 0 ... 0 0 0 1101283 ... 0 0 0 0 0 IR-PCI-MSIX-0000:03:00.0 3-edge enp3s0-3
...
197: 0 ... 0 0 0 0 ... 4680739 0 0 0 0 IR-PCI-MSIX-0000:03:00.0 16-edge enp3s0-16
...
199: 0 ... 0 0 0 0 ... 0 0 1512270 0 0 IR-PCI-MSIX-0000:03:00.0 18-edge enp3s0-18
...
212: 0 ... 0 0 0 0 ... 0 0 0 0 0 IR-PCI-MSIX-0000:03:00.0 31-edge enp3s0-31

可以看到中断确实分散在多个核心上,根据这个帖子,队列配置是1RX/2TX。