如何配置物理网卡给虚拟机?

物理网卡直通技术允许将服务器物理网卡直接分配给特定虚拟机独占使用,虚拟机绕过宿主机虚拟网络层,直接控制物理网卡硬件,从而获得接近原生性能的网络吞吐量和低延迟,适用于对网络性能要求极高的场景。

释放极致网络性能的权威指南

在虚拟化环境中,当标准虚拟网络交换机的性能成为瓶颈时,将物理网卡直接配置给虚拟机(常称为 PCI Passthrough 或 PCIe Passthrough)成为追求极致网络吞吐量、超低延迟和硬件级隔离的关键技术,这种配置让虚拟机如同独占物理网卡,绕过虚拟化层的软件模拟开销。

如何配置物理网卡给虚拟机?

物理网卡直通的核心价值

  • 极致性能: 虚拟机直接与网卡硬件交互,消除 Hypervisor 的网络处理开销,获得接近物理机的网络性能(吞吐量、延迟、CPU 占用)。
  • 低延迟: 对延迟敏感型应用(高频交易、实时音视频处理)至关重要。
  • 硬件功能访问: 虚拟机可直接使用物理网卡的高级功能(如特定卸载引擎、硬件时间戳、SR-IOV PF/VF 管理)。
  • 强隔离性: 网卡资源被单一虚拟机独占,提供物理级别的安全和故障隔离。
  • 特殊驱动需求: 当虚拟机需要安装专有或特定版本的物理网卡驱动时。

实现物理网卡直通的关键前提

  1. CPU 与芯片组支持:

    • Intel: 需支持 VT-d (Virtualization Technology for Directed I/O)。
    • AMD: 需支持 AMD-Vi (I/O Virtualization Technology) 或 IOMMU (Input-Output Memory Management Unit)。
    • 务必在 BIOS/UEFI 中明确启用 VT-d 或 AMD-Vi/IOMMU 功能。
  2. 主板支持: 主板固件 (BIOS/UEFI) 必须良好支持 IOMMU 分组(ACS 支持),确保物理设备能被正确隔离并直通。

  3. Hypervisor 支持: 主流 Hypervisor 均支持 PCI Passthrough:

    • VMware ESXi: 支持 PCI Passthrough (Passthrough PCI Device) 和更高级的 DirectPath I/O。
    • Microsoft Hyper-V: 支持 Discrete Device Assignment (DDA)。
    • KVM (Linux): 原生且成熟支持 VFIO (Virtual Function I/O) 框架实现 PCI Passthrough。
    • Citrix Hypervisor (XenServer): 支持 PCI Passthrough。
    • Proxmox VE: 基于 KVM,提供便捷的 Web UI 支持 PCI Passthrough。
  4. 物理网卡兼容性: 并非所有网卡都完美支持直通,建议查阅 Hypervisor 官方兼容性列表 (HCL),主流服务器级网卡(Intel X710/XXV710, Mellanox ConnectX 系列等)通常支持良好。

主流 Hypervisor 配置步骤精要

A. VMware ESXi

  1. 启用 Passthrough:

    如何配置物理网卡给虚拟机?

    • 登录 ESXi Host 的 vSphere Client (HTML5)。
    • 导航到 主机 -> 管理 -> 硬件 -> PCI 设备
    • 找到目标物理网卡,点击 切换直通 将其状态更改为 活动
    • 重启 ESXi 主机 使配置生效。
  2. 分配给虚拟机:

    • 关闭目标虚拟机。
    • 编辑虚拟机设置 -> 添加其他设备 -> PCI 设备
    • 选择已标记为直通可用的目标网卡。
    • 启动虚拟机。
  3. 虚拟机内操作: 在虚拟机操作系统中,安装该物理网卡的对应驱动程序。

B. KVM (Linux / Proxmox VE)

  1. 确认 IOMMU 启用且分组正常:

    • 在宿主机终端执行 dmesg | grep -e DMAR -e IOMMUcat /proc/cmdline 检查是否启用 (intel_iommu=onamd_iommu=on)。
    • 执行 lspci -nnk 找到目标网卡的 Bus/Device/Function 号 (如 01:00.0) 和 Vendor/Device ID (如 8086:10fb – Intel)。
    • 执行 find /sys/kernel/iommu_groups/ -type l 查看 IOMMU 分组,确保目标设备在独立或可安全隔离的组内。
  2. 绑定设备到 VFIO 驱动 (宿主机):

    • 卸载当前驱动 (假设是 igb): sudo modprobe -r igb (根据实际驱动名调整)。
    • 加载 vfio-pci 驱动并绑定设备:
      sudo modprobe vfio-pci
      sudo echo "8086 10fb" > /sys/bus/pci/drivers/vfio-pci/new_id  # 替换为你的 Vendor/Device ID
      sudo echo 0000:01:00.0 > /sys/bus/pci/devices/0000:01:00.0/driver/unbind # 替换 BDF
      sudo echo 0000:01:00.0 > /sys/bus/pci/drivers/vfio-pci/bind    # 替换 BDF
    • (推荐) 更持久的方式:通过 /etc/modprobe.d/vfio.conf 配置 options vfio-pci ids=8086:10fb 并更新 initramfs (update-initramfs -u)。
  3. 配置虚拟机 XML (Libvirt / Proxmox VE):

    • Libvirt (virsh): 编辑虚拟机 XML (virsh edit vm-name),在 <devices> 部分添加:
      <hostdev mode='subsystem' type='pci' managed='yes'>
        <source>
          <address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> <!-- 替换为你的 BDF -->
        </source>
      </hostdev>
    • Proxmox VE Web UI:
      • 关闭目标虚拟机。
      • 选择虚拟机 -> 硬件 -> 添加 -> PCI 设备
      • 选择目标物理网卡(通常显示为 Vendor/Device ID 或描述)。
      • 勾选 所有功能 (All Functions) 如果需要直通多功能设备。
      • 点击 添加
  4. 启动虚拟机并安装驱动: 在虚拟机操作系统中安装对应的物理网卡驱动。

C. Microsoft Hyper-V (DDA)

  1. 宿主机准备 (Windows Server):

    如何配置物理网卡给虚拟机?

    • 使用 PowerShell 管理员身份运行:
      Disable-MMAgent -MemoryCompression # 可选,但推荐禁用内存压缩
      Set-VMHost -UseHardwareMMU $true   # 对于支持 SLAT 的 CPU
    • 在设备管理器中找到目标网卡 -> 属性 -> 详细信息 -> 设备描述 -> 记录 位置路径 (如 PCIROOT(0)#PCI(0100)#PCI(0000))。
  2. 停用设备 (宿主机):

    Dismount-VMHostAssignableDevice -LocationPath "PCIROOT(0)#PCI(0100)#PCI(0000)" -Force  # 替换为你的路径
  3. 分配给虚拟机:

    • 关闭目标虚拟机。
    • 使用 PowerShell:
      Add-VMAssignableDevice -LocationPath "PCIROOT(0)#PCI(0100)#PCI(0000)" -VMName YourVMName  # 替换路径和 VM 名
    • 或在 Hyper-V 管理器中:虚拟机设置 -> 添加硬件 -> PCI Express 设备 -> 选择停用的设备。
  4. 启动虚拟机并安装驱动。

高级方案与替代技术

  • SR-IOV (Single Root I/O Virtualization): 物理网卡(PF)自身虚拟化出多个轻量级虚拟功能(VF),VF 可直接分配给虚拟机,性能接近直通,且一个物理网卡可服务多个虚拟机,资源利用率更高。这是比独占直通更常用的高性能网络方案。 需要网卡硬件和 Hypervisor 支持 SR-IOV。
  • DPDK (Data Plane Development Kit): 用户态网络驱动框架,常与 SR-IOV VF 结合使用,在虚拟机内实现极致网络性能(绕过内核协议栈),广泛应用于 NFV (网络功能虚拟化)。
  • vSphere NetQueue / vRSS: VMware 的优化技术,利用多 vCPU 处理网络队列,提升虚拟交换机性能。
  • 硬件卸载 (TSO, LRO, Checksum Offload): 确保在虚拟交换机和物理网卡层面启用,减轻 CPU 负担。

关键注意事项与最佳实践

  1. 兼容性验证: 严格检查 CPU、主板、网卡、Hypervisor 的兼容性列表和支持文档。
  2. 独占性: 被直通的物理网卡无法再被宿主机 Hypervisor 或其他虚拟机共享使用。
  3. 宿主机管理: 确保宿主机有独立的、未被直通的管理网口用于远程管理 (iDRAC/iLO/IPMI, SSH, vCenter/Hyper-V Manager 连接)。
  4. 虚拟机迁移 (vMotion/Live Migration): 物理网卡直通通常导致虚拟机无法进行实时迁移,因为目标主机必须有完全兼容且空闲的相同设备,SR-IOV 在配置得当的情况下可支持迁移(需同质集群和网络配置)。
  5. 安全: 虚拟机获得对物理网卡的底层访问权限,确保虚拟机本身安全可靠。
  6. 驱动: 在虚拟机内安装正确的、最新版本的物理网卡厂商驱动。
  7. 性能监控: 直通后使用虚拟机内和物理网卡自身的工具监控性能。
  8. 备份与恢复: 包含直通设备的虚拟机配置备份和恢复流程可能更复杂,需测试验证。
  9. 首选 SR-IOV: 在满足性能需求的前提下,SR-IOV 通常是比独占式 PCI Passthrough 更优的选择,因其平衡了性能、资源利用率和灵活性(支持迁移)。

物理网卡直通虚拟机是一项强大的技术,为需要极致网络性能、低延迟或特殊硬件访问的虚拟机工作负载提供了解决方案,实施前务必仔细验证硬件、Hypervisor 的兼容性,充分理解其带来的管理限制(尤其是对迁移的影响),对于大多数追求高性能网络且需要一定灵活性的场景,SR-IOV 技术通常是更推荐和实用的首选方案,正确配置后,它能显著提升关键业务应用的网络表现。


引用说明:

  • 本文核心知识基于主流虚拟化平台官方文档(VMware vSphere 文档、Microsoft Hyper-V 文档、Red Hat KVM/Virtio 文档、Proxmox VE 文档)中关于 PCI Passthrough / DirectPath I/O / DDA 的配置指南与原理说明。
  • 硬件要求部分参考了 Intel VT-d 和 AMD-Vi/IOMMU 的官方技术规格。
  • SR-IOV 技术细节参考了 PCI-SIG 的 SR-IOV 规范及主流网卡厂商(Intel, Mellanox)的白皮书。

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/21048.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年6月12日 12:47
下一篇 2025年6月12日 12:52

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN