起因
近期使用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 | 03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. Killer E3000 2.5GbE Controller (rev 06) |
查看网卡中断数量
1 | cat /proc/interrupts | grep -P 'enp3|CPU0' #我的网卡叫enp3s0 |
1 | CPU0 ... CPU3 ... CPU23 |
分析
这是一块瑞昱的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 | apt update |
安装驱动
快速安装
已经有大佬编译打包好了驱动,启用了TX多队列和RSS,禁用了ASPM。devome/realtek-r8125-dkms
1 | 自行下载需要的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 | CONFIG_ASPM = n |
移动源码
1 | mv ./r8125-9.012.04 /usr/src |
构建并安装
1 | dkms add -m r8125 -v 9.012.04 |
配置
禁用自带的r8169驱动
1 | echo "blacklist r8169" >> /etc/modprobe.d/dkms.conf |
应用修改并重启
1 | update-grub |
效果
1 | lspci -s 03:00.0 -k |
1 | cat /proc/interrupts | grep -P 'enp3|CPU0' |
可以看到中断确实分散在多个核心上,根据这个帖子,队列配置是1RX/2TX。