【PCIe 6.0】缘起缘灭缘终尽,花开花落花归尘——缅怀被PCIe 6.0拿掉的LN(Lightweight Notification)协议2

简介: 【PCIe 6.0】缘起缘灭缘终尽,花开花落花归尘——缅怀被PCIe 6.0拿掉的LN(Lightweight Notification)协议

✨ 4. LN Message


4.1 什么时候发送LN Message?


 LNC在以下两种情况时必须发送LN Message给LNR:


  •        CPU或Device更新了主存中已登记的Cacheline;


  •        LNC不打算继续追踪该Cacheline的状态了。这种情况称为注销,通过LN Message中的Notification Reason(NR)字段指示该情况。




4.2 LN Message格式


 LN协议采用PCI-SIG定义的VDM(Vender-Defined-Mechanism)机制,LN Message是一种带有2DW数据载荷的Type 1类型的VDM消息,其帧格式如图3所示。

1e35eb8b5d874340b7c05def06e53fe6.png



图3 LN Message



 LN Message的数据载荷为64bit的Cacheline地址,该地址为已更新或注销的Cacheline地址,该64bit地址适用于32bit地址及64bit地址。


 LN Message的TLP Type为MsgD,Fmt为011b,Type为10***b(010->Directed,011->Broadcast),TC[2:0]为000b,Length为2,Attr[2:0]为**0b,LN为0(是0,只有LN Read、LN Write及LN Completion的LN才为1,LN Message中该字段不用特别标记,LNR照单收下并更新本地Cache就是了),Message Code为01111111b,Vender ID为0001h,Subtype字段为00h。NR字段用以指示发出该通知消息的原因,NR字段描述如表1所示。地址位[5:0]忽略,若CLS为128B,地址的第6bit应置零,LNR收到LN Message后也应忽略该位。


 LN Message的Destination ID由方式决定,LN Message可以采用特定的ID进行基于ID的定向路由,也可以针对某一RP下的设备进行广播。



表1 NR字段描述

image.png



⚠️注意:LN Message 的接收者可有选择性地对消息各字段有效性进行检查确认,若检查不通过则当作畸形包处理。




4.3 正确使用Broadcast LN Message


 每一次Broadcast LN Message都会消耗链路带宽,且部分EP处理广播LN Message的速率很低。鉴于以上情况,为避免影响系统性能,LNC在广播LN Message的时候应该把要广播的Hierarchy Domain数目精确到最小,并把广播频率控制在允许的范围之内。


 对于不支持LNR能力的EP而言,其收到LN Message后会将其视为异常情况并采用性能比较低的机制来处理。比如,利用设备Firmware来处理该Message,而非采用硬件处理,每次都要消耗ms级的处理时间。可想而知,若过度使用广播LN Message,势必会使成该Fabric上的转发请求形成反压,从而影响系统性能。


 对于不支持LNR能力的EP,如果采用Directed LN Message,该Message之后被送到某个指定EP,虽然该EP也会消耗数ms来处理该异常情况,但并不会对系统整体性能由特别大的影响。当然,LNC理应只把Directed LN Message发送支持LN协议的EP,发送频率也应维持在合理的范围内,以避免影响性能。






✨ 5. LN配置


5.1 LNR扩展能力结构


 具备LN能力的LNR需实现LNR扩展能力结构(图4),该能力结构只能在EP中实现。LNR能力结构如图所示,主要包括LNR扩展能力头标、LNR控制寄存器及LNR能力寄存器3部分。

5fbcc577761d410fb71c3bf7713887f9.png


图4 LN Requester Extended Capability



 LN Requester Extended Capability(图5),LNR扩展能力头标,用以指示当前EP具备LNR能力、LNR能力版本,并指向下一扩展能力的偏移。


 LNR Capability Register(图6),LNR能力寄存器。LNR-64/128 Supported字段用以指示该LNR支持的Cacheline size(CLS);LNR registration max字段用以指示该LNR支持的最多可以请求登记的Cacheline数目,值n表示该LNR最多可以登记25条Cacheline。



 LNR Control Register(图7),LNR控制寄存器。LNR enable字段用开启或关闭该EP的LNR能力;LNR CLS字段用以选择LNR采用的CLS,0->64B,1->128B;LNR registration limit字段用以指示该LNR允许的最多登记的Cacheline数目(可能未达能力上限,但软件配置只允许这么多),值n表示该LNR最多允许登记25条Cacheline。


8108700d895b4562b2543329eafd0124.png



图5 LNR Extended Capability Header  


126d2e6bdf214820b34d8176c7d5fedf.png

图6 LNR Capability Register

6ad3a078fd334a15b6dedbc56fdaea6c.png


图7 LNR Control Register  




5.2 LN软件配置


 LN协议支持两种CLS:64B和128B,这两种CLS对RC和EP都是可选的。系统CLS由主机LN系统RP和RCRB的CLS字段决定。所有支持LNC的RP和RCRB中CLS字段值必须相同,否则大家各执一词,软件听谁的?系统允许过程中软件不能更改CLS的值,否则结果难以预计。


 支持LN协议的EP必须支持一种或两种CLS,并通过LNR-64 Supported及LNR-128 Supported字段来指示其支持的CLS。LN系统中所有LNR被启用之后,软件必须确保相关LNR的CLS控制位跟系统CLS相匹配,否则结果难料。如果LNR只支持一种CLS,其CLS控制位可以硬链接,当值被软件篡改。


 LNR使能期间软件不能改变LNR CLS控制位即LNR登记上限的值,否则结果难料。若LNR未使能,LNR的CLS控制位及LNR登记上限可以跟LNR使能位同时进行配置,即通过一次配置写完成。


 软件可以随时关闭LNR,关闭LNR之后应及时清除其内部相关Cache状态。


76b8ffeef4ee4df6be4dc5b78358226e.png


图8 Device Capabilities 2 Register




✨ 6. PCIe 6.0后时代下的LN


6.1 为何又要移除LN?


 至于为何要删除LN,咱不知道官方理由是啥。作为事后诸葛亮的我,个人感觉LN存在的意义不大,主要有以下几点原因:


   时延大,难以保证Cache一致性。LNC发送LN Message给LNR告知Cacheline有更新,对于Directed Routing的方式时延已经够大,Broadcast Routing的ms级别时延更是骇人,在LN Message到达LNR之前这段时间EP仍然在采用其本地陈旧的Cacheline数据。再等LNR重新走PCIe链路访问去主存读Cacheline、LNC返回读请求完成,中间又要消耗很多时间。这样一来,很难做到Cache一致性。


   CXL有替代方案。PCIe 5.0之前TLP、DLLP、ACK/NAK机制等,使得PCIe天然不适合访问Cache。加之CXL在PCIe之上做到了主机Mem和Cache访问,LN的处境更为尴尬。

   用不好会影响性能。想要利用好LN,需要软件和硬件多做不少工作,一旦控制不好还会有一堆性能问题。


   PCIe 6.0 FLIT机制或许允许直接Cache访问。在PCIe 6.0中,引入了FLIT编码,改进了原有的TLP、DLLP、ACK/NAK机制,使得PCIe EP访问主机的时延大大减小。或许(没仔细研究过,仅是猜测),在一定程度上能够实现PCIe的直接Cache访问。



6.2 移除之后,还兼容既有的支持LN的设备吗?


 PCIe 4.0和PCIe 5.0软硬件系统是支持LN的,但PCIe 6.0把LN协议移除了。至于PCIe 6.0的系统是否兼容老旧的支持LN的软硬件,现在还不敢说,毕竟PCIe 6.0正式版还没出来。不过从PCIe 6.0的0.9版本看,已经把LN相关内容全删掉了,相关控制位也reserved了。看样子是不支持了哦。上文也提到了,LN想要用起来用得好,也是比较难。


 据我了解啊,市面上真正把LN用起来的,少之又少。如果这LN协议没有想象中的好,那么让其消失在PCIe历史发展的滚滚长河中又何妨?



📚 参考


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


   新版PCIe 4.0规范新特性简介


   Lightweight Notification



目录
相关文章
【PCIe 协议】听说你做 PCIe 很多年,还不知道 PCIe Hierarchy ID 是什么 ???
【PCIe 协议】听说你做 PCIe 很多年,还不知道 PCIe Hierarchy ID 是什么 ???
673 0
【PCIe 协议】听说你做 PCIe 很多年,还不知道 PCIe Hierarchy ID 是什么 ???
|
Linux 网络安全
树莓派开发笔记(十一):蓝牙的使用,BlueZ协议(双树莓探测rssi并通过蓝牙互传获取的rssi信号强度)
树莓派开发笔记(十一):蓝牙的使用,BlueZ协议(双树莓探测rssi并通过蓝牙互传获取的rssi信号强度)
树莓派开发笔记(十一):蓝牙的使用,BlueZ协议(双树莓探测rssi并通过蓝牙互传获取的rssi信号强度)
如何玩儿转千兆以太网?1000BASE-T1是1000BASE-T的升级版吗?信号地如何接到PE?
如何玩儿转千兆以太网?1000BASE-T1是1000BASE-T的升级版吗?信号地如何接到PE?
|
6月前
|
安全 内存技术
[UDS] --- UDS服务应该支持的NRC
[UDS] --- UDS服务应该支持的NRC
690 0
|
异构计算 SoC
深入理解AMBA总线(三)APB interconnect的补充
深入理解AMBA总线(三)APB interconnect的补充
283 0
|
SoC 内存技术
深入理解AMBA总线(五)AHB-lite Transfer进阶
深入理解AMBA总线(五)AHB-lite Transfer进阶
686 0
|
网络性能优化
深入理解AMBA总线(十九)AXI4新增信号以及AXI4-lite
深入理解AMBA总线(十九)AXI4新增信号以及AXI4-lite
724 0
|
数据处理 SoC Perl
Xilinx Zynq7035 PL SFP光口通信例程
本文主要介绍说明XQ6657Z35-EVM 高速数据处理评估板SPF光口通信例程的功能、使用步骤以及各个例程的运行效果。
Xilinx Zynq7035 PL SFP光口通信例程
|
存储
【PCIe 6.0】缘起缘灭缘终尽,花开花落花归尘——缅怀被PCIe 6.0拿掉的LN(Lightweight Notification)协议
【PCIe 6.0】缘起缘灭缘终尽,花开花落花归尘——缅怀被PCIe 6.0拿掉的LN(Lightweight Notification)协议
471 0
【PCIe 6.0】缘起缘灭缘终尽,花开花落花归尘——缅怀被PCIe 6.0拿掉的LN(Lightweight Notification)协议
|
流计算
【UCIe】UCIe 软件配置
【UCIe】UCIe 软件配置
949 0
【UCIe】UCIe 软件配置