软硬件改造记录:PVE8替换软件源,安装8125和8111驱动

背景介绍

  1. 硬件
    小主机,板载Realtek RTL8111HSH-CG GbE千兆网卡,机身自带m.2 WLAN接口可扩展;
  2. 软件
    裸机:MikroTik ROS+container
    虚拟化:PVE8
  3. 实现功能
    家庭主路由+智能DNS+广告过滤等

扩展方案

  1. m.2 WLAN接口扩展8125B的2.5G硬网卡接口上联光猫(或者2.5GB的光纤收发器+猫棒)
  2. 内存扩充至8+8=16GB以上双通道;
  3. CPU更换为带T的6400以上。
  4. 或者m.2接口上个BCM943224PCIEBT2弄个黑苹果耍耍也不错(黑苹果EFI)

替换缘由

RealTEK RTL8125 2.5GB 网卡默认加载的驱动是r8169,它并没有开启网卡多队列等特性。导致一个网卡的软中断只能使用固定的一个核心开接收和发送数据。升级驱动解决具体方案如后续。

由于本机自带的千兆网卡为8111在PVE下同样使用r8169作为默认驱动,升级8125驱动时会禁用r8169,故采用手动添加r8168驱动(同样可驱动8111)方式。

升级路线图如下:

硬件PVE初始化时升级8125B-dkms重启后安装R8168再次重启
8125B81698125812581258125
811181698169---81688168

由于在升级过程中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了