Technical guide
PCIe ATS, PRI, and PASID Explained: Device Address Translation and Shared Virtual Memory
Understand PCIe Address Translation Services, Page Request Interface, and PASID, how devices cache translations, request missing pages, and share process address spaces.
On this page
- ATS, PRI, and PASID solve different parts of device memory access
- The IOMMU is the translation boundary between device-visible and physical memory
- ATS moves a translation cache closer to the device
- PASID identifies which address space a request belongs to
- PRI lets a device ask for a page instead of requiring every page to stay pinned
- Shared Virtual Addressing can let CPU and device use the same virtual addresses
- Virtualization and accelerators are major reasons these capabilities matter
- Think of the three capabilities as identity, translation caching, and page service
ATS, PRI, and PASID solve different parts of device memory access
A PCIe device that performs DMA ultimately needs addresses that the platform can translate safely into system memory. Modern systems can go beyond a simple model where software pins a buffer and gives the device a fixed I/O address. PCIe defines complementary capabilities that let capable devices participate more directly in address translation and shared virtual-memory designs.
Address Translation Services (ATS) lets a device request translations and cache them locally. Page Request Interface (PRI) gives a device a way to request service when a needed page is not currently available. Process Address Space ID (PASID) tags transactions with an address-space identity so the same device can distinguish work belonging to different processes or contexts. These features are related, but they are not synonyms.
| Capability | Primary job | What it does not mean |
|---|---|---|
| ATS | Request and cache address translations in a device Address Translation Cache | It does not by itself identify a process address space |
| PRI | Request that software resolve a page-access condition before the device retries translation | It is not a general-purpose data-transfer protocol |
| PASID | Tag requests with an address-space identifier associated with a requester | It does not itself perform address translation |
The IOMMU is the translation boundary between device-visible and physical memory
An IOMMU sits on the I/O path and translates device-visible addresses into physical memory addresses according to mappings established by the operating system or hypervisor. That translation is useful for isolation as well as virtualization: a device can be limited to memory the platform has explicitly made accessible to it.
This is separate from PCIe BARs and MMIO. BARs describe address resources used to reach device registers or device-local memory windows. IOMMU translation governs DMA-style accesses from devices toward system memory. A large GPU BAR therefore does not replace an IOMMU, and enabling an IOMMU does not enlarge a BAR.
ATS moves a translation cache closer to the device
PCI-SIG defines ATS so a PCIe device can interact with a translation agent in or above the Root Complex, request DMA-address translations, and cache the returned translations in an Address Translation Cache (ATC). The stated purpose is to reduce translation latency and pressure on centralized translation resources.
Caching creates a consistency requirement. If the operating system changes or removes a mapping, stale device-side translations cannot remain usable indefinitely. Platform software and hardware therefore coordinate invalidation so the device's cached view follows authoritative page-table changes. ATS is an optimization and capability framework around translation; it is not permission for a device to bypass memory protection.
PASID identifies which address space a request belongs to
A conventional PCIe requester is already identified by its routing identity, but one physical function can serve work from many processes. PASID adds an address-space identifier to eligible PCIe transactions. PCI-SIG defines a 20-bit PASID value used together with the Requester ID to identify the address space associated with an untranslated request.
The PASID value is scoped with the requester rather than being a universal process number on the PCIe fabric. PCI-SIG also makes clear that PASID support is independent of ATS and PRI: a function can support PASID without supporting either of the other two capabilities. Software enables combinations only when the endpoint, translation path, and platform support the required behavior.
PRI lets a device ask for a page instead of requiring every page to stay pinned
Shared virtual-address designs create a practical problem: a process can reference virtual memory whose backing page is not currently resident. Linux documents how ATS and PRI work together in this case. The device first attempts translation; if the mapping cannot currently be supplied because the page is absent, PRI can request that the operating system service the page condition. The device then performs translation again before accessing it.
This resembles CPU demand paging conceptually, but the device is not independently editing CPU page tables. The operating system, IOMMU, driver, and device cooperate through defined interfaces. Correct invalidation and fault handling are essential because a stale or incorrectly authorized translation could target memory that now belongs to something else.
Virtualization and accelerators are major reasons these capabilities matter
PASID lets a shared device distinguish multiple address spaces without requiring a separate physical PCIe function for every software context. Linux documents PASID as a prerequisite for Shared Virtual Addressing and Scalable I/O Virtualization, while VFIO uses IOMMU mechanisms to preserve isolation when devices are assigned or shared across virtualized workloads.
Accelerators and GPUs benefit from the same broad idea: less software address rewriting and finer-grained memory contexts can make heterogeneous computing models more practical. The important distinction is architectural, not a promise of a fixed speedup. Performance depends on the device, workload, translation behavior, cache hit rates, page faults, driver implementation, and platform.
Think of the three capabilities as identity, translation caching, and page service
A useful mental model is: PASID answers 'which address space?', ATS answers 'what translation can the device cache for this address?', and PRI answers 'can the platform make this page available so translation can succeed?'. The IOMMU and operating system remain central to enforcing and maintaining the mappings.
That model also explains why these features often appear together in documentation without being interchangeable. A platform may support only some combinations, and software must negotiate what the complete path can safely provide. For PC users, their presence is most relevant to modern GPU/accelerator memory models, virtualization, device isolation, and advanced I/O—not as a BIOS tweak to chase benchmark points.
Sources
Primary and technical sources
Technical details can vary by exact model, firmware, and platform. These are the sources used for the factual claims in this article.
01 PCI-SIG
Address Translation Services Revision 1.102 PCI-SIG
PASID Translation03 PCI-SIG
Process Address Space ID (PASID)04 Linux kernel documentation
Shared Virtual Addressing (SVA) with ENQCMD05 Microsoft Learn
IoMmu model06 Microsoft Learn
PCI Driver Programming Guide
Related
Continue from here
Useful next steps selected from the same technical reference and publication system.
Tool
PCIe Link Bandwidth Calculator
Calculate theoretical one-direction PCIe link bandwidth by generation and lane width.
Technical guide
PCIe Bifurcation vs PCIe Switches: Lane Splitting Explained
Understand how PCIe bifurcation differs from a PCIe switch, why passive multi-device cards depend on host lane splitting, and what an active switch changes.
Technical guide
PCIe Retimers vs Redrivers: What They Do in Modern PCs
Learn how PCIe retimers recover and retransmit data while redrivers condition an analog signal, and why neither device is a generic performance booster.
Compatibility & upgrades
PCIe 5.0 vs PCIe 4.0: Bandwidth and Compatibility
Compare PCIe 5.0 and PCIe 4.0 at the link level: 32 vs 16 GT/s, lane bandwidth, x4/x8/x16 scaling, backward compatibility, link negotiation, and what the generation label does not guarantee.