165、PCIE在Hyper-V中的虚拟化:从一次设备直通故障说起
上周排查一个诡异问题:某台搭载Intel Xeon Scalable的服务器在Hyper-V上跑FPGA加速卡,宿主机能正常识别PCIE设备,但分配给虚拟机后就报“设备无法启动(Code 10)”。物理机直接装系统没问题,一到虚拟化环境就歇菜。这让我意识到——PCIE虚拟化这潭水,比想象中深。
一、Hyper-V的PCIE虚拟化架构
Hyper-V实现PCIE虚拟化主要靠两种技术:离散设备分配(DDA)和SR-IOV。DDA就是常说的“设备直通”,直接把物理PCIE设备划给特定虚拟机独占。SR-IOV则更巧妙,一个物理设备能虚拟出多个“虚拟功能(VF)”分配给不同VM。
关键点在于:DDA依赖IOMMU(Intel叫VT-d,AMD叫AMD-Vi)做地址转换和隔离。没开IOMMU或者配置不对,直通根本玩不转。那次故障的根源就是BIOS里VT-d虽然开了,但ACS(Access Control Services)支持不全,导致设备无法正确隔离。
# 检查Hyper-V平台IOMMU状态Get-VMHostAssignableDevice