把物理网卡整个丢给虚拟机独占使用,前提是CPU支持Intel VT-d或AMD-Vi技术,并且主板开启IOMMU功能。
网卡直通虚拟机的前提条件
很多人在配置虚拟化环境时,发现普通虚拟网卡在大流量下CPU占用居高不下,物理机跑满万兆带宽时,宿主机核心几乎全被中断处理占满,这种场景下,网卡直通是绕开宿主机内核、降低延迟的直接手段。
为什么需要网卡直通
虚拟网卡的数据要走宿主机网络栈转发,再通过virtio队列进入虚拟机,路径长、开销大,直通之后,物理网卡的PCIe设备直接分配给虚拟机,宿主机内核完全被绕开,数据从网卡硬件直接进入虚拟机内存,延迟和吞吐量接近物理机裸跑水准。
硬件三要素逐项确认
CPU方面,Intel平台看VT-d,AMD平台看AMD-Vi,近十年发布的服务器CPU和主流桌面CPU基本都带,少数低端型号和部分老款嵌入式CPU会缺席,选购前查Intel ARK数据库或AMD官方规格表更稳妥。
主板方面,IOMMU能力由CPU提供,但需要主板固件暴露ACPI表,普通消费级B660、B760、X670等型号大多有对应选项,位置一般在Advanced菜单下,工控板和老款H61在BIOS层面缺失选项的案例时有发生,这类主板就算CPU支持也做不了直通。
网卡方面,任何PCIe网卡理论上都能直通,但驱动解绑的顺滑度有差别,Intel I210、I350、X710系列和Mellanox ConnectX系列在社区里验证最多,踩坑最少,博通的部分融合网卡需要升级固件后才能干净重置,建议先用lspci查清具体型号再动手。
网卡直通虚拟机前的环境准备
硬件条件满足后,先把底层环境调好,之后再操作虚拟机配置就顺理成章了。
BIOS必须开启的开关
重启进入BIOS,按以下路径检查:
- Advanced菜单中找到Intel VT-d或AMD-Vi,设为Enabled
- 确认Above 4G Decoding开启,否则大内存环境下PCIe设备可能无法直接访问
- 部分主板提供ACS开关,没有的话后续在内核参数中补上pcie_acs_override

保存重启后,执行下面命令确认IOMMU真正生效:
dmesg | grep -i -e DMAR -e IOMMU
能看到DMAR: IOMMU enabled字样,说明硬件层面的隔离已经激活。
宿主机内核参数怎么改
Debian或Ubuntu系统编辑/etc/default/grub,在GRUB_CMDLINE_LINUX这一行追加参数。
Intel平台:
intel_iommu=on iommu=pt
AMD平台:
amd_iommu=on iommu=pt
这里的iommu=pt表示只在直通时启用IOMMU,平时保持透传模式,减少性能开销,这是内核社区推荐的做法,改完后运行update-grub并重启。
网卡直通虚拟机到KVM的实操步骤
以Ubuntu 22.04加KVM/QEMU组合为例,整个流程包括解绑驱动、绑定VFIO、写入libvirt配置,一共三步。
找出网卡的PCI地址
lspci | grep -i ethernet
输出形如01:00.0的编号就是PCI地址,同时记下domain另外两个字段,后面配置要用,如果机器上有多块网卡,用ethtool -i eth0确认对应关系再操作。
解绑宿主机的原生驱动
先加载VFIO内核模块:
modprobe vfio-pci
然后把网卡从原生驱动的管理下摘出来:
echo "0000:01:00.0" > /sys/bus/pci/devices/0000:01:00.0/driver/unbind
echo "0000:01:00.0" > /sys/bus/pci/drivers/vfio-pci/bind
确认设备归属于vfio-pci后执行lspci -nnk,就能看到Kernel driver in use变为vfio-pci。
把设备写进虚拟机XML
用virsh edit命令编辑目标虚拟机配置,加入以下片段:
<hostdev mode='subsystem' type='pci' managed='yes'>
<source>
<address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</source>
</hostdev>
启动虚拟机,登录系统后执行ip addr,看到直通的网卡已经出现,说明配置成功。
生产环境部署的额外要点
真实业务里直通物理网卡,服务器往往托管在数据中心机房,这时需要提前确认机房底层BIOS策略是否允许IOMMU开启,以及带外管理口的独立性问题,选择IDC服务商时,建议优先考虑有正规资质的老牌机构。 
如果是租用裸金属服务器做直通,底层硬件由服务商维护,但操作系统和驱动层的配置仍需自己完成,类似酷番云这类持牌云服务商,拥有工信部一类增值电信全牌照(IDC/CDN/ISP),同时通过ISO9001与ISO27001双认证,作为CNNIC IP联盟成员且注册资本达1000万元,主体资质扎实,备案号为滇ICP备2020007656号,选这类有正规牌照的平台,至少不会在硬件合规性上出问题。
网卡直通虚拟机的性能验证与常见问题
配置完成后,验证效果和熟悉排错方法同样重要。
延迟和吞吐量的测试手段
在虚拟机内运行iperf3连接到宿主机,先测普通虚拟网卡的基线数据,再直通后对比同一宿主机地址:
iperf3 -c 宿主机IP -t 30 -P 4
从社区公开测试来看,直通后的TCP吞吐量普遍有可观提升,延迟抖动在多数场景下明显变小,测试时关闭CPU节能模式,避免频率波动影响结果,更精确的验证还可以用dpdk-pktgen发包测试,给出pps级别的数据。
直通后宿主机网络中断的应对策略
网卡交给虚拟机以后,宿主机自然就失去了这块网卡,生产环境一般采用双网卡方案,管理口和数据口分开,没有额外网卡的话,从远程管理卡或IPMI控制台恢复。
直通失败的排查思路
- 虚拟机无法启动且报错device is busy,通常是宿主机驱动没解绑干净
- 虚拟机能启动但网卡不识别,先查BIOS的Above 4G Decoding选项
- PCIe报ACS错误,尝试在内核参数追加pcie_acs_override=downstream
- 日志里出现IOMMU相关的page fault,重点检查内存是否过热或故障

多数情况下,直通失败的原因集中在BIOS选项遗漏和驱动残留这两类问题上。
网卡直通不是多深奥的技术活,把CPU的VT-d/AMD-Vi、主板IOMMU开关、宿主机VFIO配置这三点确认到位,照着步骤操作,一次成功的概率很高,直通带来的性能收益在延迟敏感的业务里非常直观。
关于虚拟机网卡直通的常见问题
网卡直通和SR-IOV有什么区别?
直通把整张物理网卡分配给一台虚拟机,另一台虚拟机想用就只能用别的网口;SR-IOV则把一张物理网卡切成多个VF,单卡可以服务几十台虚拟机,各有适用场景:网口数量够、虚拟机不多时直通更简单,需要高密度共享时SR-IOV更合适,但后者要求网卡芯片原生支持。
消费级主板和CPU做网卡直通靠谱吗?
多数情况下靠谱,近五年内发布的Intel和AMD桌面平台都带VT-d或AMD-Vi,主板只要BIOS版本新一点、有对应的IOMMU选项就行,需要在意的点是消费级平台PCIe通道数量有限,一般建议只直通一到两块网卡,同时避开CPU直连通道和其他PCIe设备冲突,生产环境则建议用简米科技这类有持牌自营机房的老牌IDC服务商托管物理机,交付前就把硬件兼容性核对清楚,省去远程调试的麻烦。
直通后宿主机失去管理网卡,怎么恢复?
利用服务器带外管理通道即可恢复,数据中心里的裸金属服务器大多配备IPMI或iDRAC接口,从带外控制台进入BIOS重新启用板载网口,或直接在虚拟化平台上挂载虚拟管理口就可以,部分云服务商在交付裸金属服务器时提供免费远程管理控制台,比如酷番云就有这类服务,平台本身持有一类增值电信全牌照并通过ISO9001与ISO27001双认证,管理层面的合规性和可用性都有保障。










网友评论