GPU 虚拟化:让 Guest 看到 Host 硬件的技术分析

📅 2026/7/28 14:44:46
GPU 虚拟化:让 Guest 看到 Host 硬件的技术分析
在 GPU 虚拟化中让 guest 如何能看到并使用 host 端真实硬件是一条主线。本文按虚拟化方式把相关技术细化为四类——直通Pass-through、硬件分区SR-IOV、中介直通Mediated、API 转发Paravirtual逐层剖析实现原理、内核栈、优缺点与 AMD 平台落地方式。目标讲清每种技术里 “guest 看到的硬件” 究竟是什么、host 侧靠什么机制把真实 GPU 暴露/切分给 guest。0. 总览一张分类图按guest 看到的东西离真实硬件有多近排序从最近几乎是裸金属到最远纯软件抽象维度PassthroughSR-IOVMediated (mdev)API 转发Guest 看到的硬件完整真实 GPU标准 PCIe VF中介虚拟设备虚拟 GPU共享能力独占1:1硬件多分区1:N软件时分/空分1:N高度共享1:N隔离机制IOMMU硬件 IOMMU硬件上下文 软件调度软件性能最高≈裸金属高中较低Guest 驱动原生原生/精简 VF 驱动原生配 host 中介virtio-gpu 前端AMD 代表VFIO 直通MxGPU / GIM——virtio-gpu (venus)1. 直通类PCI PassthroughVFIO / IOMMU1.1 原理把整块物理 GPU从 host 上解绑通过 IOMMU 直接映射进一个 guest 的地址空间。Guest 里看到的是真实的 PCIe 设备真实的 Vendor/Device ID、BAR、配置空间用原生驱动直接操作。关键硬件依赖IOMMUIntelVT-d/ AMDAMD-Vi / IOMMU v2负责 DMA 地址翻译与隔离保证 guest 发起的 DMA 只能访问分配给它的内存。中断重映射Interrupt Remapping把设备中断安全地投递给正确的 guest。1.2 内核栈LinuxGuest 原生 GPU 驱动QEMU/KVM vfio-pciVFIO 框架IOMMU 硬件物理 GPU关键组件vfio-pcihost 端接管 GPU 的占位驱动替换掉amdgpu/nvidia。vfio_iommu_type1管理 IOMMU 域和 DMA 映射。QEMU-device vfio-pci,hostxx:yy.z把设备暴露给 guest。典型绑定流程# 1. 解绑原生驱动绑定 vfio-pciecho0000:03:00.0/sys/bus/pci/devices/0000:03:00.0/driver/unbindecho1002 744c/sys/bus/pci/drivers/vfio-pci/new_id# 2. QEMU 直通qemu-system-x86_64-devicevfio-pci,host03:00.0...1.3 优缺点优点缺点性能最高≈裸金属一张卡只能给一个 VM独占Guest 用原生驱动功能完整无法超分/共享密度低实现相对简单成熟稳定GPU 复位、直通迁移较难适用场景单租户高性能计算、AI 训练、需要完整 GPU 功能的场景。2. 硬件分区类SR-IOVSingle Root I/O Virtualization2.1 原理SR-IOV 是PCIe 规范级别的硬件能力。一个物理设备暴露PFPhysical Function完整功能由 host 驱动管理负责资源分区与配置。多个 VFVirtual Function每个 VF 是一个轻量级 PCIe 设备拥有独立的配置空间、BAR、DMA 上下文但共享 PF 的部分底层资源。每个 guest直通一个 VF看到的是接近真实的标准 PCIe 设备。GPU 内部的硬件调度器在多个 VF 之间做时分/空分复用。PF: Host 管理资源分区/调度配置GPU 硬件调度器VF0VF1VF...NGuest 0 直通Guest 1 直通Guest N 直通2.2 AMD 实现MxGPU / GIMAMD 的 SR-IOV GPU 虚拟化方案叫MxGPUhost 端驱动是GIMGPU-IOV ModuleGIM运行在 hosthypervisor管理 PF配置 VF 数量、显存分区、调度时间片World Switch。World SwitchGPU 硬件在 VF 之间切换整个执行上下文寄存器、页表、队列状态实现时分复用。Guest 里跑标准amdgpu VF 驱动通过邮箱mailbox机制与 PF/GIM 通信如请求 GPU 复位、报告状态。关键点显存和部分引擎是空分每个 VF 分到固定显存段计算引擎时间片是时分World Switch 轮转。2.3 其他厂商实现厂商方案说明AMDMxGPU / GIMSR-IOV 硬件分区World Switch 时分NVIDIAvGPUAmpere/Hopper新架构用 SR-IOV VFMIG 可再做空分硬件隔离IntelFlex 系列 SR-IOV数据中心 GPU 的 SR-IOV 分区补充NVIDIA MIGMulti-Instance GPU是更强的空分硬件隔离——把 GPU 的 SM、L2、显存控制器物理切成独立实例可与 SR-IOV 叠加。它比纯时分的 World Switch 隔离性更强但属于 NVIDIA 专有能力。2.4 优缺点优点缺点硬件级隔离安全性好需要硬件固件支持不是所有卡都有一卡多 VM密度高VF 数量、显存分区通常固定弹性有限Guest 近似原生性能授权/固件成本部分厂商收费适用场景云 GPU、VDI、多租户推理需要在共享与隔离间平衡。3. 中介直通类Mediated Devicemdev / GVT-g3.1 原理对于没有 SR-IOV 硬件的 GPULinux 内核提供mdevMediated Device框架用软件方式做分区。Host 驱动把一个物理 GPU 切成多个中介设备guest 看到一个部分模拟 部分直通的混合设备性能关键路径如帧缓冲、部分寄存器走直通接近原生。控制/敏感路径如上下文切换、特权寄存器走 host 驱动软件中介trap-and-emulate。直通: 性能路径模拟: 特权路径Guest 原生驱动VFIO-mdevHost GPU 驱动中介层物理 GPU3.2 代表实现Intel GVT-gKVMGTIntel 集显的GVT-g是 mdev 最经典的实现Host 驱动i915内嵌 GVT 模块通过 mdev 暴露多个 vGPU。全 GPU 上下文切换软件调度器在多个 guest 的渲染上下文间切换软件版 World Switch。影子页表Shadow Page Tablehost 维护 guest GPU 页表的影子副本保证 DMA 隔离。创建 mdev 实例# 列出支持的 mdev 类型ls/sys/class/mdev_bus/0000:00:02.0/mdev_supported_types/# 创建一个 vGPU 实例echo$(uuidgen).../mdev_supported_types/i915-GVTg_V5_4/create3.3 优缺点优点缺点不需要 SR-IOV 硬件成本低软件中介有性能开销共享灵活可软件调度隔离性弱于硬件分区内核标准框架mdev/VFIO维护复杂厂商支持在收缩GVT-g 已逐步退场适用场景轻量图形虚拟化、旧硬件复用、桌面 VDI。4. API 转发类Paravirtual GPUvirtio-gpu / API Remoting4.1 原理Guest 里看不到真实硬件看到的是一个虚拟 GPU 设备。Guest 把图形/计算 API 调用OpenGL/Vulkan序列化成命令流转发给 hosthost 用真实 GPU执行后把结果返回。本质是设备接口虚拟化 命令转发。命令流序列化Guest AppGuest Mesa 前端virtio-gpu 驱动virtio 传输Host virglrenderer/venusHost 真实 GPU 驱动物理 GPU4.2 代表实现方案转发的 API说明VirGLOpenGLvirtio-gpu virglrenderer最早的开源 3D 转发VenusVulkanvirtio-gpu 的 Vulkan 后端命令更接近原生开销低API Remoting各类桌面虚拟化VMware SVGA、Parallels的通用思路Guest 内核驱动virtio-gpu标准 virtio 设备。Guest 用户态Mesa 的virgl/venusGallium/Vulkan 驱动。Hostvirglrenderer含 venus把命令流翻译成 host GPU 的真实 API 调用。4.3 优缺点优点缺点高度共享不占用独立硬件资源性能最低转发有开销无需特殊 GPU 硬件能力功能受 renderer 支持范围限制Guest 完全解耦具体 GPU 型号易迁移计算compute支持不如图形成熟适用场景桌面虚拟化的 3D 加速、容器/沙箱图形、跨型号可迁移场景。5. 横向对比与选型建议5.1 综合对比表技术Guest 看到共享隔离性能硬件要求AMD 落地Passthrough完整真实 GPU1:1 独占IOMMU★★★★★IOMMUVFIO 直通SR-IOV标准 VF1:N 硬件分区硬件IOMMU★★★★☆SR-IOV 固件MxGPU/GIMMediated中介设备1:N 软件调度硬件上下文软件★★★☆☆无特殊要求——API 转发虚拟 GPU1:N 高度共享软件★★☆☆☆无特殊要求virtio-gpu/venus5.2 选型决策是否, 只要能用否, 独占最高性能是, 要硬件隔离是否需要看到真实/接近真实硬件?需要共享给多 VM?API 转发virtio-gpu/venusPCI PassthroughVFIO硬件支持 SR-IOV?SR-IOVAMD: MxGPUMediatedmdev/GVT-g核心区分点想让 guest 看到真实/接近真实硬件→Passthrough或SR-IOV硬件辅助性能最好。想在共享的同时仍暴露设备→mdev/GVT-g中介直通。不要求看到真硬件→virtio-gpu/API 转发半虚拟化。5.3 AMD 平台聚焦结合本仓库的 amdgpu / ROCm SVM 工作最相关的两条路线VFIO Passthrough把整卡直通给一个跑 ROCm 的 guestSVM、KFD、原子操作等功能与裸金属一致——因为 guest 用的是完整的原生amdgpu KFD 栈。SR-IOVMxGPU/GIM多租户共享时guest 跑 amdgpu VF 驱动通过 mailbox 与 PF 通信。需要注意 VF 模式下部分特权操作GPU 复位、某些寄存器要经 PF 中介SVM/一致性行为可能受 World Switch 与显存分区影响。6. 参考锚点IOMMU / VFIOLinuxDocumentation/driver-api/vfio.rstSR-IOVPCIe SR-IOV 规范AMD GIMGPUOpen/GIMmdevLinuxDocumentation/driver-api/vfio-mediated-device.rstIntel GVT-gvirtio-gpu / venusMesavirgl/venusvirglrenderer