简介)
060、PCIE多根IO虚拟化(MR-IOV)简介从一次诡异的性能抖动说起上个月在客户现场调试一块多路服务器主板,八张GPU卡通过PCIe交换机挂到两颗CPU上。压力测试跑到一半,突然发现其中两张卡的DMA吞吐量周期性掉到接近零,日志里满是TLP错误和超时。重启能恢复,但跑一阵子又复发。硬件同事查了三天电源和时钟,软件同事把驱动翻了个底朝天。最后在PCIe配置空间里看到一个不起眼的位:MR-IOV Capability。就是这个平时没人碰的角落,成了问题的根源——系统里某个第三方管理工具在运行时偷偷修改了虚拟化相关配置,导致物理功能(PF)和虚拟功能(VF)之间的资源仲裁出了乱子。今天我们就来聊聊这个幕后角色:MR-IOV。MR-IOV到底解决了什么痛点?传统SR-IOV(单根IO虚拟化)玩得转单台服务器内的硬件虚拟化,一张物理网卡能虚拟出几十个VF给虚拟机直通使用。但到了多路服务器或者异构计算场景,问题来了:两颗CPU各自有自己的PCIe树,一颗CPU上的虚拟机想直接访问另一颗CPU挂着的硬件设备,数据路径就得绕远路,甚至要穿过QPI链路和内存中转。MR-IOV的“多根”(Multi-Root)就是干这个的——让多个独立的PCIe层级(每颗CPU一个)能共享同一组物理设备,而且是从硬件层面直接划分,不是软件模拟。想象一下,两台物理服务器通过PCIe交换机连到一个GPU池,各自能像访问本地设备一样直接操作分配到的虚拟功能,延迟和带宽几乎无损。