PVE 经典踩坑:网卡 PCI 直通后虚拟机随机断网、丢包、卡死
很多人折腾 PVE 网卡直通,只为给虚拟机独享物理网卡、降低延迟、提升性能。
但绝大多数人直通完都会遇到一个玄学问题:网络时不时抖动、深夜莫名断流、虚拟机网卡卡死、重启恢复,问题完全无规律,日志看不出异常。
网上大部分教程只教怎么开启直通,完全不提隐藏坑点,导致很多人折腾很久都找不到原因。
本文整理实测故障原因、排查思路和最终稳定方案,适合所有做网卡直通的用户直接套用。
一、典型直通故障
如果开启网卡直通后,出现下面任意现象,基本就是踩了本文说的通用坑:
- 虚拟机网络不定期卡顿,SSH 突然卡住不动
- 带宽跑满后直接断流,必须重启虚拟机或重启网卡
- 深夜闲置时随机断网,白天使用又一切正常
- 宿主机长期运行几天后,所有直通设备稳定性下降
- 虚拟机网卡无报错、无掉线日志,但流量死活不通
很多人误以为是网卡硬件问题、网线问题、交换机问题,实际上 99% 都是 PVE 直通配置和电源管理导致。
二、真正根因:PCIe ASPM 节能休眠
绝大多数主板默认开启 PCIe ASPM 电源管理。
这项功能会让 PCIe 设备在闲置时自动降频、休眠、省电。
对普通显卡、硬盘控制器没有明显影响,但对直通网卡是致命问题。
直通给虚拟机的物理网卡一旦进入休眠状态,Linux 内核和虚拟机驱动无法正常唤醒,直接表现为:
- 网卡假死
- 流量中断
- 随机丢包
- 高负载卡死
这也是为什么很多人负载低、闲置过夜必炸,高负载长时间跑也会炸。
三、第二个隐藏坑:ACS 强制拆分 IOMMU
很多人为了解决直通分组问题,会添加如下内核参数:
pcie_acs_override=downstream,multifunction
这个参数确实能强行拆分 IOMMU 分组,让原本不支持直通的设备可以单独直通。
但它属于非官方补丁,副作用非常明显:
- 破坏 PCIe 链路稳定性
- 引发设备随机超时、复位
- 网卡、NVMe、控制器都会受到牵连
- 长期运行稳定性大幅下降
这也是很多人直通能用,但不稳定的核心原因。
四、第三个坑:未屏蔽宿主机自带网卡驱动
部分主板板载网卡,宿主机依然保留驱动占用。
开启直通后,设备理论上交由虚拟机接管,但宿主机驱动偶尔会抢访设备。
底层冲突会导致网卡间歇性卡死、丢包、断流。
五、一步到位根治方案
下面是全网最稳的网卡直通稳定配置,实测长期运行零丢包、零断网。
1. 关闭 PCIe 节能
编辑 GRUB 内核启动参数
nano /etc/default/grub
修改默认启动参数,加入关闭 ASPM 节能配置
GRUB_CMDLINE_LINUX_DEFAULT="quiet pcie_aspm=off"
更新引导
update-grub
如果是 systemd-boot 架构执行
proxmox-boot-tool refresh
2. 尽量删除 ACS 强制拆分参数
如果你的设备原生 IOMMU 分组正常,直接删掉
pcie_acs_override=downstream,multifunction
只有实在无法分组的老旧设备才保留该参数。保留就必须接受稳定性下降。
3. 宿主机屏蔽直通网卡驱动
查看网卡设备
lspci -nnk
找到对应网卡的内核驱动,在宿主机黑名单屏蔽,避免抢占设备。
以常见 r8169、e1000e、igb 为例
echo "blacklist r8169" >> /etc/modprobe.d/blacklist.conf
update-initramfs -u
4. 直通网卡不混用、不共享
稳定直通的铁律:
- 直通网卡全程只给虚拟机使用
- 不做宿主机管理口
- 不做桥接复用
- 不混用多设备同组直通
只要做到独占设备,稳定性直接拉满。
六、验证是否修复成功
重启服务器后持续观察:
- 高负载跑满带宽几小时不断流
- 闲置过夜不断网、不卡死
- SSH 长时间连接不中断
- 虚拟机网卡无超时、无复位日志
满足以上条件,说明问题彻底解决。
- 点赞
- 收藏
- 关注作者
评论(0)