HOOOS

PVE 8.0 升级后 i226-V 网卡直通频繁断网?排查思路与终极解决方法

0 16 软路由折腾家 Proxmox VEi226-V网卡直通
Apple

在将 Proxmox VE (PVE) 升级到 8.0 甚至更高版本(内核升级至 6.2 / 6.5 / 6.8)后,不少将 Intel i226-V 网卡直通给 OpenWrt、iStoreOS 或 pfSense 等软路由系统的用户,都会遇到网卡无故断开、瞬间丢包、甚至彻底死机的问题。

在系统日志(dmesglogread)中,通常伴随着以下报错:

igc 0000:01:00.0 eth0: Reset adapter unexpectedly
igc 0000:01:00.0 eth0: Tx Unit Hang
pcieport 0000:00:1c.0: AER: Uncorrected (Fatal) error received

这一问题的根源在于 PVE 8.0 的高版本内核启用了更激进的 PCIe 活动状态电源管理(ASPM)和节能以太网(EEE)策略,而 i226-V 网卡在直通(VFIO)状态下,无法很好地处理这些低功耗状态的转换,导致网卡控制器挂起。

以下是经过验证的彻底解决方案,建议按照步骤依次排查和配置。


一、 物理层与 BIOS 基础设置(首要步骤)

在调整系统软件之前,必须确保主板 BIOS 的节能设置不会干扰 PCIe 设备的正常运行。

  1. 进入主板 BIOS
  2. 关闭 PCIe ASPM:找到 ASPMActive State Power ManagementPCI Express One Link Standby,将其设置为 Disabled(禁用)。
  3. 关闭全局节能设置:将 C-StatesGlobal C-state Control 暂时设为 Disabled,或者至少确保 PCIe 相关的节能选项处于关闭状态。
  4. VT-d 与 SR-IOV:确保 Intel Virtualization TechnologyVT-d 保持 Enabled(开启)。

二、 PVE 宿主机配置:禁用内核 ASPM

即使在 BIOS 中关闭了 ASPM,Linux 内核在启动时仍可能自行接管并启用。我们需要在 PVE 宿主机的 GRUB/systemd-boot 中强制禁用 PCIe 电源管理。

1. 确定引导方式

在 PVE 命令行执行:

[ -d /sys/firmware/efi ] && echo "EFI 引导" || echo "Legacy 引导"

2. 修改引导参数

如果是 GRUB 引导(大多数情况):

编辑 /etc/default/grub 文件:

nano /etc/default/grub

找到 GRUB_CMDLINE_LINUX_DEFAULT 这一行,在末尾添加 pcie_aspm=offpcie_port_pm=off
修改后的效果类似于:

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt pcie_aspm=off pcie_port_pm=off"

保存退出后,更新 GRUB:

update-grub

如果是 systemd-boot 引导:

编辑 /etc/kernel/cmdline 文件:

nano /etc/kernel/cmdline

在整行内容的末尾空一格,添加 pcie_aspm=off pcie_port_pm=off
保存退出后,更新内核配置:

proxmox-boot-tool refresh

修改完成后,务必重启 PVE 宿主机。


三、 虚拟机配置优化(关键步骤)

直通 i226-V 网卡给虚拟机(如 OpenWrt)时,虚拟机的硬件配置不当也会导致 PCIe 链路不稳定。

1. 检查机型(Machine)

  • 不要使用默认的 i440fx
  • 进入 PVE 网页后台 -> 选择你的虚拟机 -> 硬件 -> 机型
  • 将其修改为 q35q35 架构能够更好地支持 PCIe 直通及相关的现代 PCI 设备特性。

2. 检查 PCI 设备直通参数

在虚拟机的硬件中双击你的 i226-V PCI 设备,确保以下设置:

  • 全部功能 (All Functions):如果你的网卡是多口的(如双口 i226),且你想把这一组网卡都给这个虚拟机,请勾选此项。
  • ROM-Bar必须保持勾选。不勾选 ROM-Bar 可能会导致网卡初始化失败。
  • PCI-Express必须勾选。将设备挂载在虚拟的 PCIe 总线上,而不是传统的 PCI 总线上,这对于 i226-V 这种 2.5G 现代网卡至关重要。

四、 虚拟机内部:关闭 EEE 节能与 ASPM(最核心修复)

当网卡被直通给虚拟机后,实际控制该网卡的是虚拟机的内核驱动(如 OpenWrt 的 igc 驱动)。如果虚拟机内核依然尝试让网卡进入休眠,网卡依旧会断网。

OpenWrt 虚拟机为例,进行如下操作:

1. 禁用虚拟机内部的 ASPM

如果你的 OpenWrt 使用了 GRUB 引导(x86_64 常见),编辑 OpenWrt 引导分区下的 grub.cfg,在内核启动参数中同样加入:

pcie_aspm=off

这能防止虚拟机系统对直通网卡实施链路状态省电。

2. 彻底禁用 EEE(节能以太网)

节能以太网(Energy Efficient Ethernet, EEE)是 i226-V 在 Linux 下断网的超级元凶。网卡在没有流量时会降频省电,一旦有流量涌入,唤醒延迟会导致驱动判定“Tx Unit Hang”从而重置网卡。

在虚拟机中,安装 ethtool 工具:

# OpenWrt 环境
opkg update
opkg install ethtool

查询你的直通网卡(假设为 eth1)的 EEE 状态:

ethtool --show-eee eth1

你会看到 EEE status: enabled

立即关闭 EEE:

ethtool --set-eee eth1 eee off

配置开机自动关闭 EEE

由于 ethtool 的设置在重启后会失效,需要将其写入开机自启脚本中。
在 OpenWrt 中,编辑 /etc/rc.local

nano /etc/rc.local

exit 0 之前,加入以下命令(根据你的直通网卡实际接口名称修改,如 eth1, eth2):

# 禁用所有直通网卡的 EEE
ethtool --set-eee eth1 eee off
ethtool --set-eee eth2 eee off

保存退出。


五、 替代方案:退回到 VirtIO 半虚拟化网卡

如果你完成了上述所有调整,由于某些特定的硬件兼容性(如特定的 N100/N305 迷你主机主板布线问题),i226-V 依然存在极低概率的断线,建议放弃物理直通,转为使用 PVE 桥接的 VirtIO 半虚拟化网卡

现代 CPU 的性能足够强劲,在 2.5G 吞吐下,VirtIO 网卡与直通网卡的性能损耗差异在伯仲之间,但稳定性有质的提升。

  1. 在 PVE 宿主机上,为 i226-V 网卡创建 Linux Bridge(如 vmbr1)。
  2. 在虚拟机硬件中,添加网络设备,模式选择 VirtIO (semi-virtualized),桥接至对应的 vmbrX
  3. 开启 PVE 网卡的多队列(Multiqueue),充分释放多核 CPU 性能。

总结

PVE 8.0 升级带来的 i226-V 断网,90% 归咎于 PCIe ASPMEEE 节能 冲突。通过在 BIOS 禁用节能 -> PVE 命令行禁用 ASPM -> 虚拟机内用 ethtool 禁用 EEE 这三板斧,基本可以完美解决直通断网的问题,让你的软路由重新恢复 7x24 小时稳定运行。

点评评价

captcha
健康