首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
PCIE中的ATS和ATC
📅 2026/9/8 17:09:17
✍️ 爱科研究院
👁 阅读 3,247
**1核心概念**ATSAddress Translation ServicesATS 是地址翻译服务允许 PCIe 设备如端点通过 PCIe 总线向 IOMMU 请求地址翻译并缓存结果到 ATC 中。ATS 提供了一种机制使设备能够主动管理其地址翻译缓存从而提高系统性能。ATCAddress Translation Cache这是PCIe设备如显卡内部的地址翻译缓存类似于处理器中的 TLBTranslation Lookaside Buffer用于存储地址转换结果以减少对IOMMU的重复查询提升性能以减少频繁的地址翻译请求提高内存访问性能。ACS (Access Control Services ):ACS是 PCIe 规范中用于增强设备间访问隔离的安全机制核心作用是控制设备间的 P2P点对点通信确保 DMA 请求经过 IOMMU 验证在虚拟化直通场景中防止设备绕过安全隔离直接通信。翻译代理TA通常集成在IOMMU或PCIe根复合体中负责接收并处理设备的ATS翻译请求执行地址映射查表并返回结果。协同机制PRI与PASIDPRI处理ATC未命中且地址未映射的场景支持缺页处理PASID区分不同进程或虚拟机的地址空间实现精细化管控。IOVA(I/O Virtual AddressI/O 虚拟地址)设备视角看到的虚拟 I/O 地址存放在 PCIe TLP 的地址字段由 OS/IOMMU 分配给设备使用。在PCIe EP ATC / ATSIOVA 就是PCIe Endpoint 设备 DMA TLP 里携带的地址设备端只操作 IOVA不知道系统物理地址 PA。⚠️重点IOVA ≠ CPU 虚拟地址也不等于系统物理地址每个 IOMMU Domain 拥有独立 IOVA 地址空间不同设备 Domain 的 IOVA 可以数值相同但映射到完全不同的物理内存页。HPA(Host Physical Address)HPA Host Physical Address主机系统真正的 DRAM 物理地址CPU 访问内存用的物理地址。 也常简写为 PAPhysical Address。TA和ATPT关系Translation Agent (TA)是一个软件和硬件的抽象集合主要完成PCIe系统中地址翻译工作TA可能包含ATC并可能支持ATS相关业务从协议上来说包含ATC和支持ATS都不是必须的TA通过Address Translation and Protection Table (ATPT)中内容完成PCIe请求的地址翻译和鉴权。2为什么要引入ATS/ATC有些系统架构中RC需要对收到I/O function的请求进行地址翻译以及对访问的地址空间进行权限检查鉴权提升系统安全性。但是地址翻译和鉴权会增加IO请求的访问延迟系统上常采用以下两个措施减少时延影响1 在CPU中做一个address translation caches通常也叫translation look-aside buffer (TLB)2 在 IO TATranslation Agent中也可以实现一个地址翻译缓存通常称为 ATC以区别于 CPU 使用的翻译缓存。CPU使用的TLB通常是和CPU的thread绑定的每个CPU thread有自己的TLB。ATC通常被多个IO functions/devices共享因此它也经常被称为Device TLB, 为了简化系统上ATC的使用保证系统运行效率PCIe协议提供了一套称为ATS的机制。核心是将ATC下沉到IO Device中每个IO Device基于自身的ATC做地址翻译ATS由位于PCIe设备上的ATC(Address Translation Cache) 和 Translaion Agent(TA通常也是位于iommu硬件上)组成如果一个PCIe Device有多个functions每个functions应该有自己独立的ATC如下图所示。当然这并不意味着每个function都必须要有ATC用于地址翻译。3ATS与ATC的作用和关系ATS 作用请求地址翻译设备可以主动向 IOMMU 请求地址翻译。缓存翻译结果将翻译结果缓存到 ATC 中减少重复请求。ATC 作用缓存地址翻译结果减少重复翻译相同地址的开销。提高性能通过缓存减少从设备到 IOMMUInput-Output Memory Management Unit的翻译请求数量降低延迟。ATC 与 ATS 的关系ATS 是一种服务允许设备向 IOMMU 请求地址翻译。ATC 是缓存用于存储通过 ATS 请求到的地址翻译结果。协同工作ATS 负责请求并获得地址翻译结果ATC 负责缓存这些结果以便后续快速访问。4: ATC设备的分类通常ATC设备可以分为三类1: 直接链接到RC上2: 直接链接到root port上3: 通过Switch链接到RP上。注 a后两类拓扑结构如果PCIe 设备要enable ATS功能则Root Port必须要支持ATS功能。B 也有看到一种说法在RC侧的MMU叫IOMMU 在ep侧的mmu为smmu5为什么 PCIe 要引入 EP 侧 ATCATS如果所有翻译请求全部压给系统侧 TA (IOMMU)多设备并发 DMA 时 TA 的 ATC 很容易颠簸、table‑walk 变多、系统性能恶化把一部分翻译缓存下沉到 EP 设备内部EP 缓存翻译结果直接发预翻译后的请求可以分担主机 IOMMU 压力降低访问延迟。6ACS和ATS的区别在pcie 中协议固定了一种peer-to-peer(p2p) 传输如下图所示如果EP端ATC声称其发出的访问请求是经过转换后的地址并且该地址刚好落在PCIe交换开关的BAR范围内则该访问请求不会到达RC而是被交换开关路由到该地址所对应的EP。也就是说该访问请求绕过了IOMMU的隔离进行了P2P(peer to peer)传输风险PCIe协议允许P2P传输这就意味着同一个PCIe交换开关连接下不同EP可以在不流转RC的情况下互相通信。若使用过程中不希望P2P直接通信又不采取相关措施那么这个漏洞可能被无意或者有意触发使得某些EP收到无效、非法设置恶意的访问请求从而引发一系列潜在问题解决方案ACS (Access Control Services) 是一种基于信任的服务协议。ACS协议提供了一种机制能够决定一个TLP被正常路由、阻塞或者重定向。在SR-IOV系统中还能防止属于VI或者不同SI的设备Function之间直接通信。通过在交换节点上开启ACS服务可以禁止P2P发送强迫交换节点将所有地址的访问请求送到RC从而避开P2P访问中的风险。ACS可以用于PCIe桥交换节点以及带有VF的PF等所有具有调度功能的节点充当一个看门人的角色。ACS协议 :可以强制点对点PCIe事务经过root port转发防止未经授权的P2P事务发生。7ATC和MMU(TA)之间的交互类型相关交互协议的种类如上图所示为了区别开来这几中协议ATS在TLP的header里面添加了一个额外的AT field具体的示意如下图所示, 只有在使用ATS时AT字节才会使用其他情况下AT字节resverThe AT field is only defined for Memory Requests. The field remains reserved for other TLPs.PCIE TLP AT字节含义AT[1:0] 名称 含义 TLP 地址域填什么00b Untranslated 未翻译 普通 DMARC/IOMMU 做 IOVA-HPA 翻译 IOVA01b Translation RequestATR ATS 翻译请求报文向 RC TA 请求地址翻译 IOVA10b Translated 已翻译 EP ATC 命中地址已经翻译完成IOMMU 跳过页表遍历 HPA主机物理地址11b Reserved 保留 禁止发送发送报协议错误 —Translation request使用场景当device ATC发生cache miss的时候设备通过生成一个Translation request 到TATA将需要翻译的iova对应的hpa返回给device然后device把结果update到ATC里面。ATS的Translation request 格式跟 pcie 的memory read请求基本相同唯一区别就是多了一个AT field。按照定义translation request AT必须01b。各字段含义介绍Length field该字段表示TA要返回多少个translation每个translation大小为8bytes即64bit也就是一个iova地址的长度。length的大小通常用偶数个DWORDS来表示最小值为2个DWORDS。之所以这么做是因为2个DWORDS刚好是一个iova地址大小因此TA返回给设备的个数最多为Length/2个翻译结果。为什么是最多呢我们接着往下分析当length等于2时只返回一个translation结果即Untranslated address field所对应的iova地址的hpa当length大于2时则返回的个数就大于1了那么这时需要返回的结果所对应的iova的地址就是一个范围了这个地址范围如何界定呢这里就需要提到STU了(具体见图5当中所示) 通常在x86下stu的大小为4kB那么在这种场景下Untranslated address field所对应的iova地址为起始地址其范围为 iova ~ iova4K *length/2) step 大小为stu。再来说说为什么是最多返回length/2个这个就得说一下IOMMU PAGE SIZE 了一般情况下常用的IOMMU PAGE SIZE 大小可以分为4k2M 1G。如果iommu page size 大于4K比如2M因为是连续的所以只需要返回初始iova对应的translation就行了。Untranslated address field TA需要返回的translation所对应的iova地址当length 大于2个DWORDS时为某一范围地址的初始值。No WriteNW flag 当NW位置上时表示设备对该translation只能进行读操作。Translation completion针对“Translation request使用场景”的Translation request如果translation request被TA正常处理则在completion当中会带相应的translation的结果相关返回信息如下如果TA无法正常处理则返回不带数据的结果并且通过status field来说明更具体的信息相关的status code如下各字段含义介绍Read permission®如果置1则表示对这段返回的translation中的物理地址只能进行读操作。Write permission(w)如果置1则表示对这段返回的translation中的物理地址只能进行写操作。Untranslated access only flag(U) 如果置1则表示设备只能通过 untranslated-request的方式对这段返回的translation中的物理地址进行访问。Translated Address如果R 或者W置1且U位被clear则translated Address当中的地址就可以被设备缓存在自己的ATC当中用来iova的转换S它表示translation rang的大小如果S位置1则表示这个translation 的范围要大于4kBTranslated request使用场景当设备发起DMA的时候设备就可以通过在本地的ATC先进行转换得到相应的hpa然后将AT field 设置为10b。如果request能够通过TA的相关验证则相关的请求会以passthrough形式进行处理即不再走iova到hpa的翻译流程。Invalidation requestATS通过这个协议来保证TA和ATC之间的数据一致性当相关的translation 在TA侧发生变化时TA需要触发一个Invalidate Request到ATC进行相关信息的同步。下面我们看一下invalidate request 具体信息invalidate request由 header(msg) 和message body组成这里介绍几个需要重点关注的标志位ITagTA侧用来标识它发起来的invalidate request每个request的ITag都是不能重复的它的大小为0~31。S 同translation request 当中的S位表示要invalidate的地址范围。Utranslated Address 需要invalidated 的地址范围的起始地址Global Invalidate这个标志位主要是针对PASID的场景如果这个标志位置上则表示这个BDF下面的所有的PASID都会被invalidate掉。如果这个invalidate request 是带有PASID 的 prefix的则这一位将不起作用。Invalidate completion当设备完成invalidate操作之后需要给TA发送invalidate completion messages。messages 具体的格式如下结合上面的图我们来解释一下几个重要的fieldCompletion Count(CC)针对每一个invalidate request要发出的 completion的个数注意这个数字跟TC(traffic class)有关系它主要是用来对PCIe链路进行QOS的通常情况下每个pcie设备都必须实现一个defautl的TC即TC0此时TC field 的值为000b当TC field的值为001111时则表示TC1TC7它们有些不同的服务等级。在invalidate completion的场景下如果设备只实现的默认的TC0的情况下那么每个一个invalidate request只需要返回一个invalidate completion 即 cc 1否则就需要对每个TC返回一个invalidate completion即8个那么此时cc 8。ITag Vectoritag vector总共有32bits它其中的每一个bit都对应着一个invalidate request。8:PRI页请求(访问))PRI: Page Request Interface (PRI) Extension Overview;PRI在协议上是ATS机制的一种它的capability structure与其它ATS机制ATS Request/ATS Invalidation的capability structure是独立的。支持其它ATS机制的function/device不一定需要支持PRI但要支持PRI就必须支持其它ATS机制。PRI的使用场景如下1当Function源function发现请求地址的ATS Request没有返回成功AT在ATPT中没有找到对应的cache可以通过PRI发送一个Page Request Message给RC。Message中会包含page address和Page Request Group (PRG) index信息2RC收到message后会生成对应地址映射并存入到ATPT中一般由system software完成然后返回一个 PRG response message给源function3源function收到message后可以再发送ATS Request请求给RC将对应地址的cache读回本地的ATC。PRI机制使得host或者说system software可以动态管理ATPT和物理内存而不需要提前将所有device可能需要用的物理内存都pin住并生成地址映射。因为Device需要使用的内存也是动态的提前都pin住会导致内存使用效率低。PRI需要配置message creditsHost需要检查源function不能发出超出credit限制的request message并发具体机制是implementation specific的。ATS和PRI区别模块 作用 触发场景 TLP 类型ATS / ATR 查询已经存在的地址映射IOVA 已经有页表只是设备 ATC 没有缓存 ATC miss页表项有效 ATRAT01b Memory ReadPRI DMA 缺页IOVA 合法但页面不在内存需要 OS 介入换页 ATR 返回翻译失败page not present Page Request Message TLPMsg 报文ATRAddress Translation Request地址翻译请求出自 PCIe Spec Chapter10 ATS是 EP 发给 RC (TA Translation Agent/IOMMU) 的 TLP 报文是 ATS 协议最核心的请求包。注核心区别 ATS是需要查询的IOVA地址已经在RC侧的mmu中存在只需要ep去RC中将该地址取到ep 本地的ATC中 PRI指的是这个IOVA在RC的mmu中也不存在 需要RC侧mmu向系统OS发起申请让OS把缺的页面存入MMU中之后ep重新向RC侧的mmu申请该段的iova请求并存到EP侧的ATC中PRIATS 完整流程1: EP 要 DMA 访问 IOVA查询本地 ATC → miss2: EP 发送 ATRAT01 请求 RC 翻译 IOVA3 RC IOMMU 发现IOVA 页表存在但页面不在内存not present返回翻译失败4: EP 收到失败结果不能报 UR 错误发起 PRI Page Request Message上报 IOVA 页地址、读 / 写权限、PRG 索引给 RC5: Host OS 处理 DMA 缺页分配 / 换入物理页更新 IOMMU 页表6: RC 回 Page Group Response成功 / 失败给 EP7: 如果 ResponseSuccessEP 再次发 ATR拿到 IOVA→HPA 翻译存入 ATC继续 DMA8: 如果 ResponseFailureDMA 报错终止PRI 进入 STOPPED 状态软件必须复位 PRI 模块才能恢复工作PASID在PRI中的使用普通 ATS/ATC 默认一个 PCIe Function 只有一套 IOVA 地址空间设备所有 DMA全部共用同一套 IOVA→HPA 映射虚拟化下一个 Function 只能属于一个 VM。开启 PASIDSVA之后同一个 PCIe Function可以同时代表多个进程 / 多个虚拟机。不同进程使用相同数值的 IOVA搭配不同 PASID会翻译到完全不同 HPA。PASID 会出现在哪些报文中当 Function 支持 PASIDATR TLP 携带 PASID告诉 RC IOMMU“请在 PASIDx 的地址空间下翻译这个 IOVA”ATC 条目不能只存 IOVA,ITAG,HPA,权限 必须增加 PASID 字段。 ATC 查询命中条件IOVA 匹配 PASID 匹配。⚠️注只比对 IOVA忽略 PASID会跨进程地址空间越权访问内存灾难性 bug。DMA 缺页的时候PR 报文带上 PASIDIOMMU/OS 知道是哪个进程地址空间发生缺页。9: EP‑ATC 需要实现哪些模块1ATC 缓存存储本体每一条表项“IOVA标签 翻译后PA物理地址 R/W访问权限 valid有效位 Page Size信息”架构直接映射 / 组相联常见规模32~512 条目看业务替换策略LRU / 伪 LRU缓存满时淘汰旧条目。2. ITAG 管理逻辑EP 发出多条 Translation Request 时每个请求分配唯一 ITAG 标签RC 返回 Completion 会带回同一个 ITAGITAG 模块完成请求与响应的一一匹配把翻译结果回填到 ATC维护 ITAG pool防止 ITAG 耗尽同一个 ITAG 不能重复分配。3. DMA 通路查询逻辑DMA 要发起存储器访问把 IOVA 送进 ATC 做 lookupHit输出 PA设置 TLP 的AT10Miss暂停 DMA生成 Translation Request送给 PCIe Controller 的 ATS 边带接口。4. Invalidation缓存无效化完整握手逻辑接收来自 RC 的 Invalidate Request带地址范围 / Global 全局无效遍历 ATC清除匹配地址范围的表项组装并返回 Invalidate Completion 给 RC必须严格遵守规范握手时序不能丢响应包否则系统死锁。5. 与 PCIe EP Controller 之间边带接口对接边带信号完成ATC 逻辑 → Controller发送 Translation RequestController → ATC 逻辑接收 Translation Completion、接收 Invalidate RequestATC 逻辑 → Controller回复 Invalidate Completion。6. ATS Capability 寄存器组要在 EP 配置空间实现 ATS 扩展 Capability声明设备支持 ATS、ATC 最大条目数等软件读到该 Capability才会使能主机侧 ATS 功能。10: 完整业务流程系统软件枚举识别 EP 的 ATS Capability主机使能 ATSEP 内部 DMA 产生 IOVAI/O 虚拟地址查询 ATCHitDMA TLP 设置AT10携带 PA 地址送出直接绕过 IOMMU 页表遍历Miss分配 ITAG通过边带通知 PCIe 控制器发出 Translation RequestAT01暂停对应 DMA 流RC‑TA 收到请求查 IOMMU 页表返回 Translation Completion携带 PA、权限、ITAGATC 逻辑根据 ITAG 匹配请求把 IOVA‑PA‑权限写入 ATC 表项解除 DMA 暂停DMA 正常发送AT10的 TLP当主机 OS 变更 IOMMU 映射RC 发送 Invalidate RequestATC 逻辑清除对应表项回复 Invalidate Completion旧的翻译结果不能继续被 DMA 使用保证一致性。
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/9/8 17:09:17
UVM验证平台树形结构深度解析:从组件树到寄存器树
2026/9/8 17:04:17
密钥容灾实战:用paperkey在KeyarchOS上实现OpenPGP私钥备份与恢复
2026/9/8 17:04:17
无感FOC实战指南:电流采样、三环调试与硬件布局
2026/9/8 17:44:22
嵌入式设备安全升级:从裸奔到先御OS的完整防护方案
2026/9/8 17:44:22
15分钟手把手构建IntelliJ IDEA:摸透它的模块化骨架
2026/9/8 17:44:22
从AlexNet到深度卷积网络:深度学习与CNN架构演进实践指南
2026/9/8 17:44:22
LobeHub 新功能设计评审维度指南:从「领域模型」到「持久化与可观测」的系统化 Review 方法
2026/9/8 17:44:22
Visual Studio Code Agents 窗口单面板详情布局(Single-Pane Detail Panel)状态与转换规范指南
2026/9/8 17:39:21
Pelco-D云台模拟器:用pytest与虚拟串口做三层集成测试
2026/9/8 0:02:01
中国车企再破谣言,GAC吉利零跑获欧盟安全五星
2026/9/8 0:02:01
Compose Hot Reload新增MCP服务器助AI智能体调试
2026/9/8 0:02:01
你熟悉的GoPro正在悄然改变
2026/9/8 0:43:11
超人会飞不算本事:系统稳定依赖清晰规则与边界设计
2026/9/8 1:13:27
超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论
2026/9/8 2:18:22
基于CNN的调制信号识别:MATLAB实现时频图分类实战