简单了解PCIe ACS与IOMMU group
ACS: Access control Services。ACS是PCIe修正标准加入的控制位,其旨在解决PCIe设备在虚拟化下无法安全隔离的进行P2P的问题。它的加入使得PCIe设备可以跟物理机一样进行Peer2Peer的访问,当然这是从虚拟机内部看到的效果。如果没有ACS,那么你的P2P程序将在虚拟化下无法运行。
而“支持P2P”与完美支持P2P是两个概念。从上个session的数据我们也看到了,GPU在虚拟机下的App是可以运行P2P功能的,但是其带宽却是物理机正常情况下的一半都不到。
ACS的control位在hypervisor层开启,并影响到PCIe的TLP的路由。一旦设备开启了ACS,那么这个设备的PCIe数据包都会强制走其upstream port,最终走到CPU的root complex。所以开启了ACS control以后,在物理层面,其实就是禁止了任何PCIe endpoint之间的物理P2P连接。因为所有的数据都会强制到RC中转并再次下发。
ACS 与IOMMU group:IOMMU group是一个最小可以assign同一个VM的单元。比如有两个GPU设备在同一个PCIe Switch下面,如果Switch与这两个GPU设备都不支持ACS control的话(没有这个control bit)那么这两个GPUs必须同时assign给同一个VM,或者其中一个assign给VM,另外一个必须在host端禁用。
为什么这两个GPU必须同时assign给同一个VM呢? 因为从VM的角度来看&