VirtIO PCI 与 PCIe
VirtIO PCI 是基于 PCI/PCIe 总线的半虚拟化设备接口标准PCIe 是物理总线协议VirtIO 可同时跑在传统 PCI 与 PCIe 上现代 VirtIO 1.0 主要以 PCIe 为载体Modern 模式。VirtIO PCIVirtIO 半虚拟化协议的PCI 传输层实现定义虚拟设备如何通过 PCI/PCIe 总线被 Guest 发现、配置、交互含 virtqueue、配置空间、中断。PCIePCI Express第三代高速串行总线替代传统并行 PCI是 VirtIO 设备最主流的物理 / 虚拟总线载体。关系VirtIO 是上层虚拟化 I/O 协议PCI/PCIe 是底层总线传输通道VirtIO 设备可实现为传统 PCI 设备Legacy 模式或PCIe 设备Modern 模式。VirtIO Legacy PCI vs Modern PCIe1. 规范与模式Legacy传统 PCIVirtIO 0.95基于旧版 PCI 规范配置空间与 virtqueue 设计较简单仅支持INTx 中断无 MSI/MSI-X。ModernPCIeVirtIO 1.0基于 PCIe 规范引入VirtIO PCI Capability结构Common/Notify/ISR/Device-specific强制支持MSI-X64 位地址与高效通知机制。2. 设备 ID 范围Vendor ID 均为 0x1AF4Legacy0x1000–0x103FModern0x1040–0x107F0x1040 VirtIO 设备类型3. 配置空间与能力Legacy使用标准 PCI 配置空间256 字节无扩展 Capability通过 I/O 端口访问配置。Modern基于 PCIe 扩展配置空间4KB通过MMIO访问定义专用 VirtIO Capability 块支持 64 位 BAR、MSI-X、热插拔。4. 中断机制Legacy仅INTx 线中断共享、效率低。Modern强制 MSI-X多向量、独立、低延迟、支持多核亲和。5. 性能与特性Legacy带宽低、延迟高、无队列扩展、兼容性好老内核 /hypervisor。ModernPCIe 高带宽、低延迟、virtqueue 优化、支持多队列、SR-IOV、vDPA 硬件卸载现代系统默认。6. 总线与物理层Legacy并行 PCI 总线共享带宽、半双工、物理插槽宽。ModernPCIe 串行总线端到端点对点、全双工、 lane 可扩展x1/x4/x8/x16、带宽远高于 PCI。VirtIO PCIe 关键实现要点总线枚举Guest 按 PCIe 规范扫描识别 Vendor ID 0x1AF4 与 Modern Device ID加载virtio-pci驱动。Capability 发现驱动通过 PCIe Capability 链找到VIRTIO_PCI_CAP解析 Common/Notify/ISR 等结构映射 BAR 空间。Virtqueue 交互基于共享内存的环形队列驱动写 Notify 区域触发 Hypervisor / 设备处理MSI-X 中断完成通知。QEMU 配置使用q35机器类型默认 PCIe设备参数如-device virtio-net-pci,modern-pcion启用 Modern PCIe 模式。总结对比表维度VirtIO Legacy (PCI)VirtIO Modern (PCIe)规范版本VirtIO 0.95VirtIO 1.0总线类型传统并行 PCIPCIe 串行总线设备 ID0x1000–0x103F0x1040–0x107F配置空间标准 256 字节 PCIPCIe 扩展 VirtIO Capability中断INTx共享MSI-X强制多向量地址位宽32 位64 位性能低带宽、高延迟高带宽、低延迟、多队列适用场景老系统兼容现代虚拟化、高性能、硬件卸载VirtIO PCIeVirtIO PCIe VirtIO 1.0 规范 PCIe 总线承载是现代虚拟化里标准、高性能的虚拟 I/O 设备接口跑在 PCIe 总线上用 PCIe Capability、MSI-X、MMIO 等特性是 QEMU/KVM、Cloud Hypervisor、vDPA 等的默认 VirtIO 形态它不再是老式 PCI 设备而是标准 PCIe Endpoint。核心结构VirtIO PCI CapabilityVirtIO PCIe 不再把配置塞在 BAR 里乱堆而是通过PCIe Extended Capability来组织分成几个标准区域Common configuration设备状态、feature 协商、队列数量、队列大小Notify configuration驱动用来 “踢” 设备kick的 MMIO 区域ISR status中断状态寄存器Device-specific configuration设备私有配置如网卡 MAC、磁盘容量PCIe MSI-X强制必须支持用于队列独立中断驱动流程枚举 PCIe 设备Vendor ID 0x1af4遍历 Capability 链找到VIRTIO_PCI_CAP映射各个 BAR 区域协商 FEATURES初始化 virtqueue启用 MSI-X开始收发 I/O典型设备类型PCIe 版Vendor ID 都是0x1af4Red Hat/VirtIODevice ID 规则0x1040 type0x1042virtio-block PCIe磁盘0x1041virtio-net PCIe网卡0x1045virtio-rng PCIe0x1049virtio-gpu PCIe0x1053virtiofs PCIeVirtIO PCIe 与硬件支持VirtIO PCIe 本身不需要物理硬件支持纯软件模拟就能跑。它只是 QEMU 模拟出来的虚拟 PCIe 设备物理机有没有 PCIe、支不支持虚拟化和它没关系。VirtIO PCIe QEMU 软件模拟的 PCIe 接口 VirtIO 协议宿主机只要支持基础的 KVM 虚拟化x86 正常 CPU 都有guest 看到的是一个虚拟 PCIe 设备不是真实硬件VirtIO PCIe软件模拟→ 不需要任何特殊硬件KVM 即可PCIe passthrough / SR-IOV / vDPA→ 需要硬件支持VT-d / IOMMU / 带 SR-IOV 的网卡哪怕你的物理机是老 PCI不是 PCIe只要 CPU 支持 VT-x照样能跑 Q35 VirtIO PCIe 虚拟机。只有下面这些增强特性才依赖硬件① IOMMU / VT-d / AMD-Vi用于PCIe 设备直通passthroughvIOMMU 安全隔离VirtIO PCIe 本身不需要这个。② SR-IOV /vDPA 硬件卸载用于把 VirtIO 卸载到智能网卡 / 硬件加速器真正物理 PCIe 功能普通纯软件 VirtIO PCIe 不需要。③ MSI-XVirtIO PCIe强制用 MSI-X但 QEMU 可以软件模拟 MSI-X不需要物理硬件支持只有直通设备才需要物理 PCIe MSI-X