163、调试手记:虚拟机里PCIE设备怎么“丢”了?

📅 2026/7/5 4:31:29 👁️ 阅读次数 📝 编程学习
163、调试手记:虚拟机里PCIE设备怎么“丢”了?

163、调试手记:虚拟机里PCIE设备怎么“丢”了?

最近在实验室里折腾KVM虚拟化环境,遇到个邪门事儿:宿主机上明明认得好好的PCIE网卡,一到虚拟机里就时隐时现。dmesg里偶尔飘过一句“Device not found”,像极了硬件接触不良,可物理卡插得稳稳当当。这让我不得不重新审视PCIE在虚拟化环境里的那点门道。

PCIE虚拟化的三层夹心

现代虚拟化里的PCIE设备呈现,其实是三层结构在打架。最底下是物理PCIE设备,中间是宿主机的内核驱动,最上面是QEMU模拟出来的虚拟PCIE拓扑。当你在虚拟机里lspci时,看到的根本不是物理设备直通,而是QEMU精心编排的“戏码”。

VFIO(Virtual Function I/O)这套机制现在成了标准解法。它像个严格的保安,在物理设备和虚拟机之间划出隔离带。启用VFIO得先让内核把设备控制权交出来:

# 先把驱动从内核卸载echo0000:01:00.0>/sys/bus/pci/devices/0000:01:00.0/driver/unbind# 告诉VFIO接管设备echo</