当前位置:首页 > 物理机 > 正文

如何直通物理网卡给虚拟机?

将物理网卡直接分配给虚拟机(如通过PCI直通技术),使其独占该网卡资源,绕过宿主机系统,从而获得接近物理机的网络性能和更低延迟,适用于虚拟机对网络吞吐量或延迟有极高要求的场景。

为什么需要将物理网卡直通给虚拟机?

当虚拟机需要高性能网络处理能力(如防火墙、流媒体服务器、低延迟交易系统)时,传统虚拟交换机的NAT或桥接模式可能成为瓶颈,物理网卡直通(Passthrough)技术允许虚拟机直接接管物理网卡硬件,实现:
接近原生硬件的网络性能(降低CPU占用30%-50%)
绕过Hypervisor层,减少数据包处理延迟
支持特殊网卡功能(如SR-IOV、硬件Offload)
避免虚拟交换机带来的安全隔离风险


关键前提条件验证

硬件支持检查

  • CPU与主板:必须支持 IOMMU(输入输出内存管理单元)
    • Intel平台:VT-d 技术(非VT-x)
    • AMD平台:AMD-Vi 技术
  • BIOS/UEFI设置:在固件中启用 VT-d/AMD-Vi(通常位于”Advanced > CPU Configuration”)
  • 网卡兼容性:主流Intel/博通/Broadcom网卡普遍支持,老旧或消费级网卡需查验驱动

系统环境确认

   # Linux下验证IOMMU是否启用
   dmesg | grep -e "DMAR" -e "IOMMU"
   # 若返回"DMAR: IOMMU enabled"则成功启用
   # 查看网卡所属IOMMU组(避免设备冲突)
   lspci -nnk -d [网卡设备ID]

虚拟机平台要求

  • 支持直通的Hypervisor
    • VMware ESXi (需Enterprise Plus许可证)
    • KVM/QEMU (Linux开源方案)
    • Proxmox VE (基于KVM)
    • Microsoft Hyper-V (需Discrete Device Assignment支持)

操作步骤详解(以KVM/QEMU为例)

▋ 步骤1:隔离物理网卡

# 1.1 查找网卡PCI地址(02:00.0)
lspci -nn | grep -i ethernet
# 1.2 解除内核驱动绑定(假设网卡为02:00.0)
echo 0000:02:00.0 > /sys/bus/pci/devices/0000:02:00.0/driver/unbind
# 1.3 将设备绑定到vfio-pci驱动(需提前加载vfio模块)
echo 8086 15b7 > /sys/bus/pci/drivers/vfio-pci/new_id

关键点:若网卡与其他设备(如USB控制器)同属一个IOMMU组,必须整组直通(需修改内核参数 iommu=pt

▋ 步骤2:配置虚拟机XML

<devices>
  <!-- 直通物理网卡 -->
  <hostdev mode='subsystem' type='pci' managed='yes'>
    <source>
      <address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
    </source>
    <!-- 启用ACS override解决IOMMU组限制 -->
    <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
  </hostdev>
  <!-- 必须配置vIOMMU(针对UEFI虚拟机) -->
  <iommu model='intel'>
    <driver intremap='on' eim='on'/>
  </iommu>
</devices>

▋ 步骤3:虚拟机内部配置

  1. 启动虚拟机后安装厂商原生驱动(如Intel DPDK驱动)
  2. 禁用虚拟机的自动网卡命名规则(避免与直通设备冲突)
    # 编辑 /etc/default/grub
    GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"
    update-grub

️ 重要风险与限制

  1. 主机失联风险

    如何直通物理网卡给虚拟机?  第1张

    • 直通唯一可用网卡会导致主机失去网络连接
    • 解决方案:至少保留一个管理用网卡不直通
  2. 虚拟机迁移障碍

    • 直通设备绑定特定硬件,无法进行热迁移/Live Migration
    • 建议仅用于静态部署的关键业务虚拟机
  3. 兼容性问题

    • Windows虚拟机需确认驱动签名支持(禁用Secure Boot)
    • 较新的2.5G/10G网卡可能需手动编译VFIO驱动
  4. 性能监控缺失

    主机层无法直接监控直通网卡流量(需在虚拟机内部署监控)


替代方案:SR-IOV技术

若物理网卡支持 SR-IOV(单根虚拟化),可创建多个虚拟功能(VF) 分配给不同虚拟机:

# 启用SR-IOV(示例:Intel X710网卡)
echo 8 > /sys/class/net/enp2s0f0/device/sriov_numvfs

优势:保留主机控制权,支持虚拟机迁移
劣势:需要网卡硬件支持,配置更复杂


企业级最佳实践

  1. 冗余设计:为关键虚拟机配置双直通网卡(绑定为teaming)
  2. 性能调优
    • 调整巨帧(Jumbo Frames)至9000 MTU
    • 启用网卡RSS(接收端扩展)负载均衡
  3. 安全隔离:结合SELinux或AppArmor限制设备访问权限

权威参考来源

  1. PCI-SIG官方SR-IOV标准文档 PCI-SIG SR-IOV Primer
  2. Linux内核VFIO驱动文档 kernel.org/vfio
  3. VMware直通兼容性指南 VMware Compatibility Guide
  4. Intel VT-d技术白皮书 Intel® Virtualization Technology for Directed I/O
0