Q&A:vfio为何是group粒度的,vfio_container与iommu_domain的关系

vfio为何是group粒度的,而不是device粒度的? vfio group的概念其实继承自iommu group,那问题就转换为iommu的最小隔离单位是如何定义的。
摘要由CSDN通过智能技术生成

1. vfio-iommu为何是group粒度的,而不是device粒度的?

vfio group的概念其实继承自iommu group,那问题就转换为iommu的最小隔离单位是如何定义的。

1.1 设备之间是如何通过iommu实现互相隔离的呢?只需要iommu给不同设备提供独立的iova页表即可,这样不同设备 通过iova页表 映射到的hpa就不会互相覆盖了。也就达到了隔离的作用。

那么如果有多个设备共用同一套iova页表的情况(如pcie总线中的PCIe-to-PCI bridge会mask其下挂载的所有传统pci设备,这些被隐藏的pci设备都是复用该bridge的requester id与IOMMU交互<传统pci设备并不像pcie一样使用requester id来标记transaction>。那经过context table获取到的context entry是同一个,即iova页表基地址是同一个。再经过页表映射到的hpa也会是一样的),那iommu就无法“隔离”开这些设备。

  • 这时候需要引入一个新的概念,如group,将这些设备 捆绑到一个组里,共存式使用,比如都绑定到vfio-pci驱动(未必需要都透传给vm)。

1.2 另外,再考虑设备P2P与IOMMU混用的场景。如设备A的某个地址既可以通过IOMMU将iova翻译成hpa,也可以通过P2P匹配到另外一个设备B的地址,而设备B的地址已经通过MMIO也map到相同的hpa。那么pci拓扑结构里的bridge这些interconnect一般会做一些数据通路的优化,选择直接走P2P而不是IOMMU。这种绕过IOMMU的方式就没办法做隔离了。

  • 正好IOMMU group也将这种情况考虑进去了,会将支持 无需地址翻译即P2P DMA  的设备捆绑到一个组里。
<
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值