侧边栏壁纸
  • 累计撰写 99 篇文章
  • 累计创建 54 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

PVE 8 安装 ReakTEK RTL8125B 2.5G网卡驱动

FlyingEagle
2024-09-25 / 0 评论 / 0 点赞 / 52 阅读 / 3,074 字

近期在PVE中发现,只要连接数一多,PVE会有两个单核的使用率明显比其他核超过一大截。经过查询资料发现,这是因为我的 RealTEK RTL8125 2.5GB 网卡默认加载的驱动是r8169,它并没有开启网卡多队列等特性。导致一个网卡的软中断只能使用固定的一个核心开接收和发送数据。

查看网卡加载的是什么驱动:

## 看看网卡的pci编号
$ lspci | grep RTL8125 
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 04)


## 看看网卡加载的驱动
$ lspci -s 01:00.0 -k # 01:00.0这块网卡
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: r8169
        Kernel modules: r8169

$ lspci -s 01:00.0 -k # 01:00.0这块网卡
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)
        Subsystem: Micro-Star International Co., Ltd. [MSI] RTL8125 2.5GbE Controller
        Kernel driver in use: r8169
        Kernel modules: r8169

查看网卡软中断数量:

$ cat /proc/interrupts | grep -P 'enp1s0|CPU0'  # 我的网卡名叫enp1s0、enp2s0
            CPU0       CPU1       CPU2       CPU3       CPU4       CPU5       CPU6       CPU7       CPU8       CPU9       CPU10      CPU11      CPU12      CPU13      CPU14      CPU15      
  51:          0          0          0          0          0          0          0          0          0  631894756          0          0          0          0          0          0  IR-PCI-MSIX-0000:22:00.0    eth0
  59:          0          0          0          0          0          0          0          0          0          0          0  932824696          0          0          0          0  IR-PCI-MSIX-0000:2a:00.0    eth1

也可以用这个命令看看软件中断(%soft)是不是大量集中在某个核心上。

$ mpstat -P ALL 1 5

连接数多的时候,甚至这两个核心的使用率能达到80%,而其他核心才不到20%。所以还是有必要将该网卡驱动从Linux默认的r8169切换到官方驱动上。

使用官方驱动
已经有大佬把官方驱动打包成了dkms deb包:https://github.com/awesometic/realtek-r8125-dkms,
不过该deb包并没有打开网卡多队列,所以我FORK了一份,启用TX多队列及RSS,禁用ASPM,发布在:
https://github.com/devome/r8125-dkms
直接使用即可。先下载Release中最新的deb文件,再按下方流程安装即可:

首先仓库添加pve-no-subscription 仓库,

echo "deb https://mirrors.ustc.edu.cn/proxmox/debian bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list

## 更新内核、安装依赖
$ 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

---------
## 8125b和8111网卡使用 
echo 'alias r8169 off' >> /etc/modprobe.d/dkms.conf
echo 'r8125' >> /etc/initramfs-tools/modules
update-initramfs -k all -u
reboot
-------

## 单8125网卡使用,会屏蔽8111网卡驱动, 如果管理口是8111千万不要用这个,机器会失联,会搞的要重装
echo "blacklist r8169" >> /etc/modprobe.d/dkms.conf
update-initramfs -u -k all
reboot
--------

## 重启
$ update-grub
$ update-initramfs -u -k all
$ reboot

## 再次查看网卡加载的驱动,现在加载的是r8125了
$ lspci -s 01:00.0 -k
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 04)
        Subsystem: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller
        Kernel driver in use: r8125
        Kernel modules: r8169, r8125

参考至:
https://evine.win/p/pve-install-realtek-8125-driver/
https://www.geekxw.top/1142/
https://github.com/devome/r8125-dkms

0

评论区