Libvirt为何创建多个PCI设备?虚拟IO设备多PCI有何优势?
虚拟IO设备配置多PCI设备的优势
问题背景
我在查看qemu-system-x86_64命令参数时发现,Libvirt会创建多个PCI设备,示例命令如下:
/usr/bin/qemu-system-x86_64 \ ... -device '{"driver":"pcie-root-port","port":16,"chassis":1,"id":"pci.1","bus":"pcie.0","multifunction":true,"addr":"0x2"}' \ -device '{"driver":"pcie-root-port","port":17,"chassis":2,"id":"pci.2","bus":"pcie.0","addr":"0x2.0x1"}' \ -device '{"driver":"pcie-root-port","port":18,"chassis":3,"id":"pci.3","bus":"pcie.0","addr":"0x2.0x2"}' \ -device '{"driver":"pcie-root-port","port":19,"chassis":4,"id":"pci.4","bus":"pcie.0","addr":"0x2.0x3"}' \ -device '{"driver":"pcie-root-port","port":20,"chassis":5,"id":"pci.5","bus":"pcie.0","addr":"0x2.0x4"}' \ -device '{"driver":"pcie-root-port","port":21,"chassis":6,"id":"pci.6","bus":"pcie.0","addr":"0x2.0x5"}' \ -device '{"driver":"pcie-root-port","port":22,"chassis":7,"id":"pci.7","bus":"pcie.0","addr":"0x2.0x6"}' \ -device '{"driver":"pcie-root-port","port":23,"chassis":8,"id":"pci.8","bus":"pcie.0","addr":"0x2.0x7"}' \ -device '{"driver":"pcie-root-port","port":24,"chassis":9,"id":"pci.9","bus":"pcie.0","multifunction":true,"addr":"0x3"}' \ -device '{"driver":"pcie-root-port","port":25,"chassis":10,"id":"pci.10","bus":"pcie.0","addr":"0x3.0x1"}' \ -device '{"driver":"pcie-root-port","port":26,"chassis":11,"id":"pci.11","bus":"pcie.0","addr":"0x3.0x2"}' \ -device '{"driver":"pcie-root-port","port":27,"chassis":12,"id":"pci.12","bus":"pcie.0","addr":"0x3.0x3"}' \ -device '{"driver":"pcie-root-port","port":28,"chassis":13,"id":"pci.13","bus":"pcie.0","addr":"0x3.0x4"}' \ -device '{"driver":"pcie-root-port","port":29,"chassis":14,"id":"pci.14","bus":"pcie.0","addr":"0x3.0x5"}' \ -device '{"driver":"pcie-root-port","port":30,"chassis":15,"id":"pci.15","bus":"pcie.0","addr":"0x3.0x6"}' \ -device '{"driver":"pcie-pci-bridge","id":"pci.16","bus":"pci.6","addr":"0x0"}' \ ...
而QEMU默认仅创建一个PCI设备,请问为虚拟IO设备创建多个PCI设备有何优势?
核心优势解析
- 扩展设备挂载能力:单条PCI总线能承载的设备数量有限,多PCIe根端口或PCI桥可以提供更多挂载点,满足虚拟机添加多网卡、多磁盘控制器、USB控制器等IO设备的需求。
- 避免资源争抢:不同PCI设备可分配独立的中断请求和带宽资源,单总线下多设备抢资源的性能瓶颈会被缓解。比如把高带宽的虚拟网卡和磁盘控制器分属不同PCI端口,能减少互相干扰。
- 支持热插拔操作:PCIe根端口原生支持热插拔,提前配置多个端口后,后续无需重启虚拟机就能动态添加/移除IO设备,运维更灵活。
- 贴近真实硬件拓扑:物理服务器通常有多条PCI总线和扩展槽,多PCI设备的配置更符合真实硬件环境,能提升对拓扑敏感的操作系统或应用的兼容性。
- 释放高性能设备潜力:像PCIe直通这类高性能设备需要独占PCI端口,多端口配置能为它们预留独立通道,充分发挥设备的性能优势。
内容的提问来源于stack exchange,提问作者aszswaz
相关产品推荐
相关产品推荐

