PCIe TPH (TLP Processing Hints) 介绍

简介: PCIe TPH (TLP Processing Hints) 介绍

✨1. TPH 基本介绍


TLP Processing Hints,直译过来是事务处理提示,英文简写为TPH。TPH最初由PCIe 2.1引入,是请求事务TLP头标中的一个可选配的特性,适用于存储器读、存储器写及原子操作事务。TPH携带有请求者对完成者目标存储空间数据的使用信息,通知完成者即将访问数据的特性,完成者可以根据TPH合理地安排数据缓存及管理数据,从而降低PCIe设备的访问时延、降低系统带宽压力、提高cache的利用率、降低能耗。


 在发送带有TPH的TLP时,用到了TLP头标中的TH、PH及ST三个字段,其中TH及PH字段仅用于TPH请求事务,TH=1时PH有效。TH置一表示该TLP含有TPH信息,PH用以提供较粗粒度的Processing Hints控制能力,ST用以提供细粒度的控制能力。





✨2. 粗粒度控制:Processing Hints


 在请求者给完成者发送存储器访问请求的之前,显然请求者能够知道接下来将如何使用这些访问请求中的数据,但完成者难以知晓。请求者通过TLP头标PH字段给RC或其他目的设备提供提示hints,提示主机或设备接下来将如何使用该TLP中的数据。hints包括以下6种:


  • DWHR:Device对这段数据进行写操作后,很快Host会对这段数据进行读操作;


  • HWDR:Host对这段数据进行写操作后,很快Device会对这段数据进行读操作;


  • DWDW:Device对这段数据进行写操作后,很快Device会再次对这段数据进行写操作;


  • DWDR:Device对这段数据进行写操作后,很快Device会对这段数据进行读操作;


  • DRDW:Device对这段数据进行读操作后,很快Device会对这段数据进行写操作;


  • DRDR:Device对这段数据进行读操作后,很快Host会再次对这段数据进行读操作;



其中,D*D*  归为一类,表示该TLP中的数据经常被Device使用;HWDR和DWHR归为一类,表示该TLP中的数据经常被Host使用;此外,还有Device/Host均会频繁使用及级别更高的Host频繁使用。这几类与PH字段的对应关系如下表(表1)所示:




表1 PH字段意义

image.png



🉑举例:TBD,请大家先行参考Mindshare PCIe Technology chapter 20





✨3. 细粒度控制:Steering Tags


 如果某Function想要给Host处理器或系统cache hierarchy等特定的处理资源发送TLP,那么该Function需要知道目标cache的拓扑信息。这个拓扑信息哪里来呢 —— Steering Tags。Steering Tags就是系统指定的一组值,用以指示系统cache hierarchy中的host或cache结构。


3.1 ST表


 Steering Tags存放在ST表中,可以通过软件配置TPH请求者能力寄存器的ST table Location字段选择将ST表存放在TPH请求者扩展能力结构或MSI-X表两者中的任意一个(不可同时存放)。ST表每个Entry为2-bytes,ST表的大小由TPH请求者能力寄存器指定。


 若Function同时支持MSI及MSI-X且MSI启动,即便MSI-X未启动,仍然可以将ST表存放在MSI-X表中。若选择存放在MSI-X表中,则MSI-X表每个Entry的向量控制寄存器(Vector Control Register,图1)将用于存放Steering Tag。


9ed37cbd78214574a0d6372eaa6da0bb.png




图1 MSI-X表结构图


 ⚠️注意:在更新ST表的时候,为减小不确定性,也为了确保在请求事务中采用确定的SteeringTags,建议软件在这个过程中暂停使用该Function或关闭其TPH能力。


3.2 ST操作模式


 ST表的位置由Function的TPH请求者扩展能力结构指定。若Function实现了ST表,需要软件来填充该表。ST有3中操作模式,如下表:


表2 ST操作模式


image.png


  • No ST mode,只采用基本的hints,不采用ST。在无ST操作模式中,Function必须采用0作为Steering Tags,而非软件提供的Steering Tags。


  • Interrupt Vector Mode,在中断向量模式中,根据MSI/MSI-X中断向量号到选择ST对应Entry中的Steering Tags。若Function开启了MSI,Function须在MSI控制寄存器Multiple Message Enable字段(图2)最大范围内选择Tag;若Function开启了MSI-X,Function需在MSI-X表大小范围内选择Tags。若ST表的大小比中断向量号的范围小,该Function可以在特定事务中不使用TPH,可以采用Steering Tags全0的TPH,亦采用在ST表中选择Steering Tags的TPH。若ST表的大小比中断向量号的范围大,超出范围i的St Entry会被Function忽略掉。


  • Device Specific Mode,设备指定Steering Tags的值,该Steer Tags值与ST表中的Steering Tags无关也无需来自ST表。



e796b19af8bd4d5383619aa454ad488c.png



⚠️注意:具备发送TPH请求事务的Function需支持无ST操作模式。除表2中指定模式外,也可以选择其他自定义的模式,但一次只能选择一个模式。



3.3 TLP中的ST字段


 存储器写请求无需Tag字段,因此在存储器写请求中,原Tag字段用作ST[7:0]字段(图3);在存储器读请求中,原Last BE、First DW字段被用作ST[7:0]字段(图4)。考虑到部分存储器读请求仍然需要BE、DW字段来进行边界对齐,因此ST字段仅用于无需边界对齐的请求事务。


526aa81cfc224506847c0d4addd95875.png


图3 Location of ST[7:0] in the Memory Write Request Header  


644851ec1351475593587c22c0d28060.png


图4 Location of ST[7:0] in Memory Read and AtomicOp Request Headers



 如前所述,ST字段有16bit,一般采用上述ST[7:0]可以提供255个(0表示No ST Mode,不计入)不同的ST,足以满足绝大部分需求。若有意采用更宽位宽的ST,可以在TLP Header前添加TLP Prefix(参考链接),采用TLP Prefix的Byte1作为ST[15:8](图5)。


5eead9da2d684b558aa53435fcd99ff1.png


图5 TPH TLP Prefix


  ⚠️注意:对于不支持或不需要Steering Tags的情况,可以把ST字段置零。





✨4. TPH 能力结构


 TPH被设计用于目标为存储空间的事务,可应用于D2H(Device to Host),H2D,D2D间的事务发送。请求者、完成者及所有中间路由元素均需支持TPH功能才能实现携带TPH的TLP的正确传输。


作为请求者Function的需实现TPH请求者扩展能力结构(图6)才能发送携带TPH的请求事务,作为完成者的Function需在设备能力2寄存器(图7)中开启能力才能处理带有TPH的请求事务。


a003a49e34e6413cb73d4024943163fe.png


图6 TPH请求者扩展能力结构  

2d829d1148f14205adbfc3e1295f6558.png



图7 完成者设备能力2寄存器


 TPH请求者扩展能力结构由四部分组成:TPH扩展能力头标、TPH请求者能力寄存器,TPH请求者控制寄存器及TPH ST表。解释如下:


  •        TPH Requester Extended Capability Header:TPH扩展能力头标(图8),用以指示该Function具备TPH能力、TPH能力版本及下一能力的偏移。


  •        TPH Requester Capability Register:TPH请求者能力寄存器(图9),用以开启各ST Mode并指定ST表的存放位置(MSI-X表或TPH能力结构中)和大小。若ST表存放在TPH能力结构中,ST表最大有64个Entry;若ST表存放在MSI-X表中,ST表的大小与MSI-X的大小有关。


  •        TPH Requester Control Register:TPH请求者控制寄存器(图10),用以开启TPH并选择ST Mode。


  •        TPH ST Table:TPH ST表(图11),每个ST Entry位宽16-bit。


07530e1c8b3342c5a95b58e187d74ce2.png


图8 TPH Requester Extended Capability Header  


6231e1aae52b4b3f95b50904d500b8a7.png

图9 TPH Requester Capability Register  

1b4f6d3b71784ad695353f9e6b8a7506.png

图10 TPH Requester Control Register  


2221cd5674d04e2783187a367f49cebe.png



图11 TPH ST Table




📚 参考


   PCI Express Base Specification Revision 5.0 Version 1.0 (22 May 2019)


   PCI Express Technology - Comprehensive Guide to Generation1.x, 2.x and 3.0. Mike Jacson, Ravi Budruk, MindShare, Inc.


   PCI Express* 3.0 Technology: Device Architecture Optimizations on Intel Platforms


   PCIe体系结构导读,王奇著,机械工业出版社



目录
相关文章
|
8天前
|
人工智能 机器人 测试技术
【CMake报错】报错:Flow control statements are not properly nested.
【CMake报错】报错:Flow control statements are not properly nested.
|
4月前
|
Rust 小程序
小程序警告:Now you can provide attr wxkey for a wxfor to improve performance
首先,无论什么程序,控制台中的警告都是会影响程序性能的。我们需要减少此类警告的出现,以提高程序的运行性能。 小程序开发的时候,遇到了如下的警告:
77 0
|
11月前
|
并行计算
Hint: This means that multiple copies of the OpenMP runtime have been linked into the program.
Hint: This means that multiple copies of the OpenMP runtime have been linked into the program.
104 0
|
数据安全/隐私保护
PCIe ARI (Alternative Routing-ID Interpretation)介绍
PCIe ARI (Alternative Routing-ID Interpretation)介绍
1252 0
PCIe ARI (Alternative Routing-ID Interpretation)介绍
|
人工智能 Linux vr&ar
High-performance RISC-V Processor Xuantie C908
High-performance RISC-V Processor Xuantie C908
342 0
High-performance RISC-V Processor Xuantie C908
|
自然语言处理
Re24:读论文 IOT-Match Explainable Legal Case Matching via Inverse Optimal Transport-based Rationale Ext
Re24:读论文 IOT-Match Explainable Legal Case Matching via Inverse Optimal Transport-based Rationale Ext
Re24:读论文 IOT-Match Explainable Legal Case Matching via Inverse Optimal Transport-based Rationale Ext
is transfer = C ( only read dynamically) not supported in one order scenario
is transfer = C ( only read dynamically) not supported in one order scenario
101 0
is transfer = C ( only read dynamically) not supported in one order scenario
|
TensorFlow 算法框架/工具 Python
成功解决Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2
成功解决Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2
成功解决Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2