164、PCIE在VMware中的虚拟化:当硬件变成“软件定义”
164、PCIE在VMware中的虚拟化:当硬件变成“软件定义”
最近帮同事排查一个诡异的问题:他的驱动在物理机上跑得好好的,一到虚拟机里就报PCIE配置空间访问错误。我让他把VMware的虚拟硬件配置截图发过来,一眼就看到问题所在——他给虚拟机配了“PCIE设备直通”,但宿主机的IOMMU根本没开。这让我想起这些年踩过的各种PCIE虚拟化坑,今天就来聊聊VMware这套虚拟化玩法。
虚拟化环境下的PCIE拓扑长啥样
物理机的PCIE拓扑我们摸得多了,RC(Root Complex)、Switch、Endpoint这些实物芯片摆在那儿。到了VMware里,这一切都变成了vSphere内核里的数据结构。当你新建一个虚拟机,VMware默认会给你创建一个虚拟的PCIE Root Complex,注意这个RC完全是软件模拟的。
用lspci在Linux虚拟机里看一下:
# 在VMware的Linux虚拟机里执行这个lspci-tv你会看到一棵熟悉的PCIE树,但设备名称都带着“VMware”前缀。比如网络卡可能是“VMware VMXNET3 Ethernet Controller”,这其实是个纯虚拟设备,底层走的是vmxnet3驱动和虚拟交换机通信。
