PCIe地址转换服务(ATS)详解

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介: PCIe地址转换服务(ATS)详解

1. 为何PCIe需要ATS?


✨1.1 为何需要DMA地址转换


为节省CPU资源,IO function常采用DMA方式访问内存。虽说在诸多实现方案中IO function看到的物理地址空间与CPU无异,但也不乏例外。在有些方案中,IO function看到的地址空间只是真实物理空间的handle,需要RC将DMA请求进行一次地址转换才能将访问到真实物理存储地址,此外还涉及到DMA访问地址空间的合法性检查。幸好,目前绝大部分系统结构都支持对来自IO function的DMA请求进行地址转换。




✨1.2 DMA地址转换的益处


       确认IO function DMA 请求的合法性,防止非法DMA请求产生破环;


       支持scatter-gater,通过地址转换,scatter-gather DMA一次传输访问多个物理上不连续的地址块;


       通过改变传输地址,RC无需与IO function协调即可实现消息信号中断的重定向;


       可以将32bit位宽的IO funtion映射到更大的系统地址空间;


       易于实现虚拟化传输。





✨1.3 DMA地址转换的不良影响及解决方案


 RC进行DMA地址转换是需要时间的,相较于不进行地址转换,显然进行DMA地址转换会增加DMA访问的时间。尤其是访问驻留内存转换表时,采用地址转换的方案会大大增加DMA访问的时间。当单次传输需要多次内存访问时,地址转换无疑会大大降低传输效率。




为了减小地址转换的以上不良影响,设计人员常常在需要进行地址转换的地方添加地址转换缓存(Address Translation Cache, ATC)。在CPU中,这种地址转换缓存通常是指转译后备缓冲区(Translation Look-aside Bufer, TLB);在IO地址转换中,我们常用ATC来跟CPU的TLB加以区分。TLB与ATC的区别:TLB一次只服务于CPU的单个线程,而ATC服务于PCIe设备的多个IO function,每个IO function都相当于一个独立的线程。




✨1.4 设备采用ATC的益处


       设备端的ATC能够减轻地址转换代理(Translation Agent, TA)的地址转换压力;

       开启了ATC使设备对系统ATC size的依赖更小;


       发往中心复合体的地址都是预先转换过的,潜在减小了访问时延,增加传输效率。

❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️



🔥 2. ATS协议介绍



 PCIe设备及根复合体RC之间采用请求-完成协议来实现地址转换服务ATS。ATS主要包括两部分:


       地址转换(Translation):用以将ATPT中的转换地址缓存到本地ATC,包括地址转换请求及地址转换完成。


       地址作废(Invalidation):用以当ATPT中地址转换发生变化时,将ATC中的对应转换地址作废,包括地址转换作废请求及地址转换作废完成。



✨2.1 ATS地址转换协议(ATS Translation)


 PCIe Device/Function发送存储器读写请求前,首先在本地ATC查找是否有该地址的Entry。该地址为转换前地址,是DMA看到的虚地址;该地址在ATC中的Entry是指该虚地址经过地址转化后的真实物理地址。若在ATC内查找成功,直接采用转换后地址进行访问,否则给TA发送该虚地址的地址转换请求。


5af9bdd0fddd48919e8e4788856f9b29.png



上图展示了一个基本的ATS转换请求-完成的操作。其动态工作流程如下:


       Device/Function产生ATS转换请求,经PCIe拓扑路由到达RC,RC将该请求推给TA;


       TA在收到地址转换请求后,查找其本地ATPT,并给Device/Function反馈查找结果(成功或失败)。



2.1.1 ATS地址转换请求


为了实现ATS,存储器读写TLP头标中新定义了地址类型(Address Type, AT)域来表征Device发给RC的地址是否经过了地址转换、是否为地址转换请求。AT域是存储器读请求、AtomicOp及ATS地址转换请求的专属域,在其他事务中该域为Reserved预留。


AT域值解释如下:00b->未转换的地址;01b->地址转换请求;10b->已转换的地址;11b->预留。TA检测到AT=11b时会当成UR处理。


1)ATS地址转换请求帧格式


带有ATC的Device可以选择发送经过/未经地址转换的存储器访问请求。 存储器访问请求的TLP头标(64bit)格式如下图所示。ATS地址转换请求的TLP头标格式与存储器读请求TLP头标格式相似,ATS地址转换请求头标格式如下图所示。

b6a7a3e4bc2d441c82ae9abc16e3ad30.png

c92ae57a61404ae29d182ba10a4bd727.png



比较可见,地址转换请求与ATS地址转换请求TLP头标的主要区别在于以下3点:


   ① 地址转换请求的AT=01b,存储器读请求的AT=00b或10b;


   ② 地址转换请求的地址位[11:0]预留,存储器读请求的地址为[1:0]预留;


   ③ 地址转换请求有NW域,存储器读请求没有NW域。




地址转换请求头标中其他各域补充解释如下:


  •        Attr: 转换请求及转换完成没有排序要求,设置该域开启宽松排序,开启宽松排序后TA可根据实际情况决定是否对其收到的事务进行重排,此时发起请求的Device不能依赖TA保序。


  •        Length: 该域用以表明当前转换请求需要返回多少笔转换完成包,每一笔转换完成包长8Byte,多笔转换完成包的地址间STU(最小转换单位)对齐地址递增。需要注意的是,length值需为偶数,最大值为RCB(读完成边界)。若length超出最大值或为奇数,TA会将该TLP当成畸形包进行处理。


  •        Untranslated Address: 需要进行转换的地址,支持32bit及64bit,该地址域不含地址比特[11:0],TA依据该地址判断转换请求的有效性。对于请求多笔地址转换的情况,若ATPT中的转换后地址不满足转换请求的范围(2^(STU+12)*length/2),TA不会反馈该笔转换包。如果请求者未设置了页对齐,转换请求地址位比特[11:2]可以是任意值,否则必须为0,TA中也必须忽略[11:2]。


  •        NW: 非写标志位,若该位置一,表明该转换后的地址只读,Device不能往该地址发送写请求。若需要写该地址,需要Device重新发送地址转换请求将该位清除。




2)PCIe系统对ATS地址转换请求的处理


  为了减小设计复杂度、简化PCIe系统ATS的集成工作,ATS地址转换请求/完成的处理过程与PCIe读请求/读完成极其相似,在某些方面甚至完全相同,具体表现为:


  • ATS组件兼容PCIe-1.1组件;


  • ATS通过新的能力及关联结构进行开启,软件在发送ATS TLP之前需确认该设备具有ATS能力且已开启,否则不能发送ATS TLP,DMA 读写请求中的AT域也应置为0,即未转换的地址。


  • ATS TLP路由方式为地址或RID路由;


  • ATS TLP事务排序方式最寻PCIe的事务排序方式;


  • ATS TLP流经PCIe-1.1交换节点时需保持不变;


  • Device/Function可以混合发送转换即未转换请求。



TA收到地址转换请求后会进行如下判断及操作:




  •        判断Device/Function是否开启了ATS能力;


  •        判断Device/Function发送的ATS地址转换请求地址是否合法、该Device/Function是否有权限访问该地址;


  •        判断TA自身是否能够响应该ATS请求;


  •        发送转换成功或失败信号给RC,RC产生请求完成TLP回复给发起转换请求的Device/Function。


3)ATS地址转换请求注意事项 ⚠️⚠️📢📢


  • Device/Function可以一次连续发送多个地址转换请求,TC可以相同也可以不同。一笔ATS转换请求对应一笔或多笔转换完成,RC一次可以连续返回多笔请求完成TLP,某地址的转换完成TLP的TC需与其转换请求的TC保持一致。
  • 若某虚地址在ATC中没有对应Entry,Device/Function在发送其ATS转换请求并收到转换完成(成功)之前,不能发送标记为translated的该地址存储器访问请求。
  • ATC只能通过ATS协议进行填充,即发送ATS地址转换请求并收到该地址的转换完成(成功)。
  • ATC只能通过ATS协议进行修改,主机系统软件只能通过ATS转换作废操作对ATC内容进行修改,其他任何操作都不能修改ATC内容。即使是系统复位、Device/Function的复位操作,也只能更改invalidate entry不能更改ATC内容;


ATS有转换请求超时退出机制,若发出地址转换请求后迟迟等不到转换完成,会超时退出。ATS转换请求的请求超时设置与存储器读请求相同。





目录
相关文章
|
缓存 Linux
PCIe地址转换服务(ATS)详解2
PCIe地址转换服务(ATS)详解
1546 0
PCIe地址转换服务(ATS)详解2
|
10天前
|
Linux 虚拟化
VMware workstation 中centos7虚拟机在nat模式下怎么配置网卡,指定我想要的IP并且可以联网
https://blog.csdn.net/2302_78534730/article/details/132825156?spm=1001.2014.3001.5502
131 0
|
2月前
|
弹性计算 Linux 网络安全
三步搭建VPC专有网络NAT网关,配置SNAT和DNAT规则(补充版)
申明:该文档参考于用户 “帅宝宝”的文档进行的优化,新增永久生效的方式
284 1
|
8月前
|
弹性计算 运维 网络架构
【运维知识进阶篇】用阿里云配置NAT网关配置
【运维知识进阶篇】用阿里云配置NAT网关配置
333 0
|
8月前
|
运维 Shell 网络安全
【运维知识进阶篇】iptables防火墙详解(iptables执行过程+表与链概述+iptables命令参数+配置filter表规则+NAT表实现共享上网、端口转发、IP映射)(三)
【运维知识进阶篇】iptables防火墙详解(iptables执行过程+表与链概述+iptables命令参数+配置filter表规则+NAT表实现共享上网、端口转发、IP映射)(三)
1358 0
|
8月前
|
运维 网络协议 网络安全
【运维知识进阶篇】iptables防火墙详解(iptables执行过程+表与链概述+iptables命令参数+配置filter表规则+NAT表实现共享上网、端口转发、IP映射)(二)
【运维知识进阶篇】iptables防火墙详解(iptables执行过程+表与链概述+iptables命令参数+配置filter表规则+NAT表实现共享上网、端口转发、IP映射)(二)
228 0
|
8月前
|
运维 网络协议 Linux
【运维知识进阶篇】iptables防火墙详解(iptables执行过程+表与链概述+iptables命令参数+配置filter表规则+NAT表实现共享上网、端口转发、IP映射)(一)
【运维知识进阶篇】iptables防火墙详解(iptables执行过程+表与链概述+iptables命令参数+配置filter表规则+NAT表实现共享上网、端口转发、IP映射)
775 0
|
9月前
|
域名解析 网络协议
NAT实验和配置
NAT实验和配置
67 0
|
10月前
|
网络协议 Windows
如何在虚拟机中配置静态IP,以解决在NAT模式下的网络连接问题?
如何在虚拟机中配置静态IP,以解决在NAT模式下的网络连接问题?
165 0
|
10月前
|
负载均衡 监控 网络协议
网络地址转换NAT详解及配置
网络地址转换NAT详解及配置
246 0