软硬件改造记录:PVE8替换软件源,安装8125和8111驱动
背景介绍
- 硬件
小主机,板载Realtek RTL8111HSH-CG GbE千兆网卡,机身自带m.2 WLAN接口可扩展; - 软件
裸机:MikroTik ROS+container
虚拟化:PVE8 - 实现功能
家庭主路由+智能DNS+广告过滤等
扩展方案
- m.2 WLAN接口扩展8125B的2.5G硬网卡接口上联光猫(或者2.5GB的光纤收发器+猫棒)
- 内存扩充至8+8=16GB以上双通道;
- CPU更换为带T的6400以上。
- 或者m.2接口上个BCM943224PCIEBT2弄个黑苹果耍耍也不错(黑苹果EFI)
替换缘由
RealTEK RTL8125 2.5GB 网卡默认加载的驱动是r8169,它并没有开启网卡多队列等特性。导致一个网卡的软中断只能使用固定的一个核心开接收和发送数据。升级驱动解决具体方案如后续。
由于本机自带的千兆网卡为8111在PVE下同样使用r8169作为默认驱动,升级8125驱动时会禁用r8169,故采用手动添加r8168驱动(同样可驱动8111)方式。
升级路线图如下:
硬件 | PVE初始化时 | 升级8125B-dkms | 重启后 | 安装R8168 | 再次重启 |
---|---|---|---|---|---|
8125B | 8169 | 8125 | 8125 | 8125 | 8125 |
8111 | 8169 | 8169 | --- | 8168 | 8168 |
由于在升级过程中8111网卡会断网,建议后续升级驱动的话在实体机进行。
需下载的驱动文件(更新时间为24年12月):
8125B:r8125-dkms_9.014.01-1_all.deb
8168:r8168-8.054.00.tar.bz2
PVE安装8125网卡驱动
看看网卡的pci编号
lspci | grep RTL8125
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)
看看网卡加载的驱动
lspci -s 22:00.0 -k # 02:00.0这块网卡
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)
Subsystem: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller
Kernel driver in use: r8169
Kernel modules: r8169
查看网卡软中断数量:
cat /proc/interrupts | grep -P 'eth|CPU0' # 我的网卡名叫eth
查看软中断
也可以用这个命令看看软件中断(%soft)是不是大量集中在某个核心上。
mpstat -P ALL 1 5
更新内核、安装依赖
apt update
apt upgrade
apt install -y dkms pve-headers #pve 8.0.4+建议将pve-headers替换为proxmox-default-headers
安装headers
headers=$(dpkg -l | awk '/^ii.+kernel-[0-9]+\.[0-9]+\.[0-9]/{gsub(/-signed/, ""); gsub(/kernel/, "headers"); print $2}' | tr "\n" " ")
eval apt install -y $headers
安装及检查内核加载情况
## 安装刚刚下载好的deb包,此命令只会为当前系统所使用的内核以及刚刚安装的最新内核(也可能当前所使用的内核就是最新内核)安装驱动
$ dpkg -i r8125-dkms_*.deb # 如通配符会匹配多个时亦可指定具体的文件名
## 如果想为那些既不是系统当前所使用的内核,也不是刚刚安装的最新内核安装驱动,需要手动指定安装
## 看看哪些内核安装好了驱动
$ dkms status
## 列出全部内核版本kernel_version,找出那些还没有安装驱动的内核
$ dpkg -l | awk '/^ii.+kernel-[0-9]+\.[0-9]+\.[0-9]/{gsub(/proxmox-kernel-|pve-kernel-|-signed/, ""); print $2}'
## 手动指定驱动版本(在deb文件名中有体现)和内核版本(从上一句命令的输出中),zsh按tab可自动补全,比如:dkms install r8125/9.011.01 -k 6.2.16-5-pve
$ dkms install r8125/<driver_version> -k <kernel_version>
卸载不再需要的headers
eval apt-mark auto $headers
apt autopurge
禁用r8169驱动
echo "blacklist r8169" >> /etc/modprobe.d/dkms.conf
重启
update-grub
update-initramfs -u -k all
reboot
注意:此时8111网卡会中断连接!!!!!
再次检查网卡驱动
查看网卡加载的驱动,现在加载的是r8125了
lspci -s 22:00.0 -k
22:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)
Subsystem: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller
Kernel driver in use: r8125
Kernel modules: r8169, r8125
安装8168驱动恢复8111网卡连接
下载解压后重命名文件夹名称为8168,上传至root文件夹
cd /root/8168
编译驱动
make && make install
安装驱动
可能没有执行脚本权限,先赋权限,执行完毕后重启
chmod +X autorun.sh
sudo sh autorun.sh
重启
reboot
查看8111网卡驱动加载情况
ethtool -i enp3s0
再次查看网卡加载的驱动,现在加载的是r8168了