QEMU文档之bypass iommu
1 描述通常存在一个全局开关来enable/disable vIOMMU。系统中所有的设备仅能通过vIOMMU或全部不通过,这样使使用非常不灵活。我们介绍bypass iommu属性来让设备可以通过也可以不通过vIOMMU。这对于在相同虚拟机上使用no-iommu模式的passthrough设备和通过vIOMMU的设备非常有用。PCI host bridge也有一个bypass_iommu属性。该
1 描述
通常存在一个全局开关来enable/disable vIOMMU。系统中所有的设备仅能通过vIOMMU或全部不通过,这样使使用非常不灵活。我们介绍bypass iommu属性来让设备可以通过也可以不通过vIOMMU。这对于在相同虚拟机上使用no-iommu模式的passthrough设备和通过vIOMMU的设备非常有用。
PCI host bridge也有一个bypass_iommu属性。该属性用于决定联结到PCI host bridge的设备是否bypass虚拟IOMMU。仅当系统中存在虚拟IOMMU时bypass属性才有效。它允许一些设备可以bypass vIOMMU。当host bridge的bypass_iommu属性没有设置时,连接的设备默认通过vIOMMU。
2 使用
bypass iommu特性支持PXB host bridge和默认主main host bridge,我们为PXB增加bypass_iommu属性,为机器增加default_bus_bypass_iommu属性。注意default_bus_bypass_iommu属性仅当X86架构上的q35机器类型和AArch64上的virt机器类型时有效。其他机器类型默认不支持bypass iommu。
2.1 下列为bypass iommu选项:
(1)PCI expander bridge
qemu -device pxb-pcie,bus_nr=0x10,addr=0x1,bypass_iommu=true
(2)Arm default host bridge
qemu -machine virt,iommu=smmuv3,default_bus_bypass_iommu=true
(3)X86默认root总线bypass iommu
qemu -machine q35,default_bus_bypass_iommu=true
2.2 这里AArch64的virt机器有更详细的qemu命令行:
qemu-system-aarch64 \
-machine virt,kernel_irqchip=on,iommu=smmuv3,default_bus_bypass_iommu=true \
-device pxb-pcie,bus_nr=0x10,id=pci.10,bus=pcie.0,addr=0x3.0x1 \
-device pxb-pcie,bus_nr=0x20,id=pci.20,bus=pcie.0,addr=0x3.0x2,bypass_iommu=true \
这里:
- 一个默认的host bridge,它bypass SMMUv3
- 一个pxb host bridge,它通过SMMUv3
- 一个pxb host bridge,它bypass SMMUv3
2.3 这里X84的q35机器有更详细的qemu命令行:
qemu-system-x86_64 \
-machine q35,accel=kvm,default_bus_bypass_iommu=true \
-device pxb-pcie,bus_nr=0x10,id=pci.10,bus=pcie.0,addr=0x3 \
-device pxb-pcie,bus_nr=0x20,id=pci.20,bus=pcie.0,addr=0x4,bypass_iommu=true \
-device intel-iommu \
这里
- 一个默认的host bridge,它bypass iommu
- 一个pxb host bridge,它通过iommu
- 一个pxb host bridge,它bypass iommu
3 限制
当设备bypass iommu时可能存在潜在安全风险,因为如果没有iommu的隔离,设备可能发送malicious DMA。因此仅对可信任的设备bypass iommu。
4 实现
bypass iommu特性包含:
- 地址空间:对PCI host增加bypass iommu属性判断,对bypass iommu的设备不会获得iommu地址空间;
- Arm SMMUv3支持:我们遍历所有PCI root总线并获得总线号范围,然后对不bypass iommu的设备建立明确的RID映射;
- X86 IOMMU支持: 为支持INTEL iommu,我们遍历所有PCI host bridge并从不bypass iommu的设备获得设备信息,然后填充DMAR drhd结构用明确的设备范围信息。为支持AMD iommu,在遍历PCI host bridge时增加bypass iommu判断;
- 机器和PXB选项: 我们对于PXB的默认root选项增加bypass iommu选项。注意bypass iommu的默认值为false,因此设备默认会通过iommu。
更多推荐
所有评论(0)