PASID (Process Address Space ID) is an optional feature that enables sharing of a single Endpoint device across multiple processes(multiple address spaces per device) while providing each process a complete 64-bit virtual address space. PASID is used to identify process address space.

A PASID is a PCIe-defined Transaction Layer Packet (TLP) prefix. A PASID is a 20-bit number allocated and managed by the OS. PASID is included in all transactions between the platform and the device.

The IOMMU driver allocates a PASID and the device uses it in DMA transactions.

总结:(考虑非虚拟化的情况)在Intel平台下,由设备发起的I/O虚拟地址(IOVA,可以认为是host virtual address)需要IOMMU转化为host physical address。

IOMMU PASID Table: Per-device table by hardware design!

上图中,红框标注的即为IOMMU PASID table。


参考资料:

  1. pcie-glossary/pasid
  2. Shared Virtual Addressing (SVA) with ENQCMD
  3. PASID Management in KVM - Yi Liu & Jacob Pan
  4. Intel®-Scalable-I_O-Virtualization