【PCIe 6.0】PCIe 6.0 新特性 - DMWr (Deferrable Memory Write) 详解

简介: 【PCIe 6.0】PCIe 6.0 新特性 - DMWr (Deferrable Memory Write) 详解

1. DMWr 简介


1.1 DMWr 是什么?


DMWr,全称 Deferrable Memory Write,可延迟的内存写入,是一种新的 PCIe TLP 类型。CXL 1.1 中就已经有 Deferrable Writes 了,正式出现在 PCIe 协议中是 PCIe 6.0。


 可延迟的内存写入,顾名思义,Completer 在收到 DMWr 后,可以选择立即执行,也可以选择延迟执行。相比于转发请求 MWr,DMWr 是非转发请求(NPR),无论请求是否被执行,Completer 都应根据完成情况回复指定状态的 Completion。



1.2 为何需要 DMWr ?


DMWr 的设计初衷是实现一种有效的软硬件接口控制机制。在 DMWr 出现之前,为了实现软硬件交互,每个进程都需要一份单独的硬件逻辑进行处理,且每个进程都需要分配 4KB 空间以隔离进程。随着进程数量增大,硬件空间并不会增大,很容易出现硬件空间不够的情况。DMWr 实现了一种共享工作队列,来解决以上问题。


 在 DMWr 出现之前,PCIe 不能或者很难实现延迟写入。DMWr 实现了这样一种机制,允许 Host 或 EP 直接执行或延迟执行内存写请求。该机制可应用于 Host 及 EP,以简化流控部分的设计工作。基于 DMWr,PCIe 设备可以在单个共享工作队列内以一种非阻塞的方式接收多个非协作软件 Agent 的工作请求。换言之,PCIe 设备可以实现一个工作队列寄存器,允许多个 Requester 通过单笔 DMWr 请求向设备发出命令,设备通过 DMWr 的 Completion 状态来指示某 Requester 命令是否被接受。




2. DMWr 实现



只有 Requester 及 Completer 都支持 DMWr (实现了 Device 3 Extended Capability Structure,如图1)时才能实现 DMWr 操作。软件也需要实现相应的设备驱动,并在系统软件层面开启该特性。


 一次完整的 DMWr 操作至少包括以下几步:DMWr 请求发出 -> 路由到 Completer -> Completer 执行 Mwr 动作 -> Completer 反馈 Completion。


4a4b09cb6f564c5bab6ab0e1713f30d4.png

▲ 图1 Device 3 Extended Capability Structure


2.1 DWMr 请求发送


只有 Requester 支持 DMWr 且 Device Capability 3 Register 寄存器中使能了 DMWr Request (图2),才允许 Requester 产生 DMWr 请求。


 DMWr TLP 具有特定的 Header。DMWr 支持 DMWr32 和 DMWr64,分别对应 Fmt=3’b010 及 Fmt=3’b011。DMWr Type=5’b11011,该 ID 为早期版本中 TCfgWr 的 Type ID。虽然 TCfgWr 及 TCfgRd 已遭废弃,但在 PCIe 5.0 中还保留了 TCfgWr 及 TCfgRd 的 Fmt 及 Type ID。在 PCIe 6.0 中,TCfgRd 还有,TCfgWr 则被完全废弃,DMWr 占用了原 TCfgWr 的 Fmt 及 Type ID。


654fbbe980d14459a9fa2bcd4cb842cb.png


▲ 图2 Device Control 3 Register





2.2 DMWr 路由


DMWr 为地址路由,所有地址路由的规则均适用于 DMWr。


 只有支持 DMWr 且 Device Capability 3 Register 寄存器中使能了 DMWr Request Routing (图3) 的 PCIe 组件才能路由 DMWr 请求。RC 及 Switch 中 DMWr 需遵循以下规则:


  •    支持 DMWr 的 RP 及 Switch 在收到正常的 DMWr 请求后需要前推该请求、回复 SC/UR/CA/RRS CPL 或上报 DMWr Egress Block Error(非致命、不可纠正错误)。
  •    若 Switch 的一个 Port 支持 DMWr,其他 Port 也应支持 DMWr。


  •    若 RP 或 Switch 收到的 DMWr 请求地址跨在了不同的目的地边界,Switch 的 Ingress Port 不能转发改请求,而是回复 UR CPL。


  •    若 RC 或 Switch 中开启了 DMWr Egress Blocking (图2) 的 Egress Port 收到了 DMWr 请求,该 Port 需上报 DMWr Egress Block Error,而非回复 UR。


  •    RC 中 P2P DMWr 是可选的,通过 Device Capability 3 Register 寄存器来配置。


  •    若 RC 中存在 RP 支持 DMWr,其他 RP 或 RCiEP 在收到 DMWr 请求后按照 UR 处理,而非按照畸形包处理。

ff3aeb8972114f16ad01720926661f64.png


▲ 图3 Device Capabilities 3 Register



2.3 DMWr 接收处理


  DMWr 虽然是 NPR,但处理 DMWr 请求时其仍然采用转发请求的接收限制规则。




2.4 DMWr 完成


只有支持 DMWr 且 Device Capability 2 Register 寄存器中使能了 DMWr Completer (图4) 的 PCIe 组件才能作为 DMWr 的 Completer。DMWr Completer 需满足以下需求:


  •    对于符合标准的 DMWr 请求,Completer 根据完成情况回复 SC、RRS、UR、CA 等状态的 CPL。


  •    若由于某些临时原因 Completer 暂时无法完成 DMWr 请求,Completer 应反馈 RRS 请求重传。重传不是错误,无需上报。发出 RRS Completion后,即便稍后一切正常,Completer 也不能继续执行上一笔 DMWr。发出 RRS Completion后,Completer 也不应期望 Requester 一定回重传 DMWr。


  •    Completer 可以基于 Requester ID、TC、PASID、有效负载等来自定义其回复 RRS Completion 的机制。


  •    Completer 可以实现一套可编程的 DMWr 写地址规则,给 DMWr 请求划分一块专属地址。若常规 MWr 请求(非 DMWr 请求)请求访问 分配给 DMWr 的地址,则拒绝执行写操作。


  •    若 DMWr 请求的 Size 小于 64B,支持 DMWr 的 Completer 回复 SC Completion 时需确保观测到的更新粒度不小于 DMWr 请求 Size;否则不能小于 64B。


  •    对于有多个 Function 的 PCIe 设备,只要其中一个 Function 支持 DMWr,该设备中其他不支持 DMWr 的 Function 在收到 DMWr 请求后按照 UR 处理,而非按照畸形包处理。


  •    除非有更高优先级的错误出现,具备 DMWr 能力的 Completer 在收到 Poisoned DMWr 请求后按照 Poisoned TLP 处理,并回复 UR 或 RRS。



 注意:


  1. 在 PCIe 6.0 中,除 Configuration 请求外,DMWr 也支持请求重传,所以在 PCIe 6.0 中Completion Status CRS (Configuration Request Retry Status) 改叫 RRS (Request Retry Status) 。


  1. DWMr 请求 最大 数据载荷支持 64B 及 128 B 两种方案,通过 Device Capabilities 2 Register 的 DMWr Lengths Supported 字段(图4)进行配置。


265f8ba9e0b045d1ab04b082f7549ff6.png

▲ 图4 Device Capabilities 2 Register



2.5 请求重传


  Requester 收到 RRS 后,可以选择重传,也可以不重传,也可以修改 DMWr 为标准的 MWr 重传。即使要重传,什么时候重传,都可以自主决定。



2.5.1 带有重传的 DMWr 流程


可延迟写入并非一定要延迟,只有在 Completer 临时有事的时候才需要延时,而且延时并非是说 Completer 自主等待一段时间然后写内存,而是需要 Completer 和 Requester 相互配合的。一次需要重传的 DMWr 流程如下:


  1.    Requester 发送 DMWr 请求。


  1.    Completer 收到 DMWr 请求,由于某些临时原因,Completer 无法完成该操作。


  1.    Completer 给 Requester 回复 Completion,状态为 RRS 请求重传。


  1.    Requester 收到 RRS Completion,按照一定的机制决定何时重传。


  1.    Requester 重新发送 DMWr (或 MWr) 给 Completer。



6.    Completer 收到请求,写入指定地址。


7.    如果为 DMWr,Completer 需要反馈 SC Completion 给 Requester,否则不用反馈。




3. 一些特性


3.1 原子性

由于单次触发 DMWr 对应单笔 DMWr 请求,Completer 收到请求后以一种第三方无法探测中间结果的方式执行请求并给 Requeser 反馈 Completion,每一步都不可再分割,从某种意义上可以说 DMWr 操作具有一定的原子性。为了实现 DMWr 的原子操作,需遵循以下规则:


  •    支持 DMWr 的 RC 和 Switch 在路由 DMWr 及其 Completion 的时候不可以进行拆分等修改。


  •    DMWr Completer 需确保 DMWr 请求及 Completion 以原子方式执行。



3.2 排序规则


根据事务排序规则,有以下几点要注意:



  1.    转发请求可以超过 DMWr 请求,DMWr 请求不能超越转发请求。


  1.    DMWr 和 MRd 都是 NPR,根据事务排序规则,NPR 之间也可以互相超越。




 这时就要 格外注意 了:若是先发的 DMWr 后发的 Mem_Rd,且两笔 TLP 目的地址相同,那么 MRd 读回来的数据有可能是 DMWr 写之前的旧数据,也可能是 DMWr 写之后的新数据。




4. 其他注意事项


DMWr 请求是一种带有数据载荷的非转发请求,每一笔请求都需要一笔 Completion,出于性能原因,写大量数据时不建议使用 DMWr。加之 DMWr 在排序上不占优势,想要提升性能,还是少来点 DMWr 等非转发请求。


 DMWr 并非适用于所有系统的设备,需要根据软件环境来决定能不能发 DMWr。系统及应用软件可以根据特定模板来决定是否生成 DMWr 请求。


 若设备支持通过软件直接生成 DMWr 请求,建议软件在发出 DMWr 请求后确认是否收到其对应的 Completion。




参考


  1. PCI Express Base Spec 6.0


  1. Linux Kerner, x86-specific documentation, SVA with ENQCMD
目录
相关文章
|
缓存 移动开发 JavaScript
PCIe 参考时钟架构 (Refclk Architecture)
PCIe 参考时钟架构 (Refclk Architecture)
5101 0
PCIe 参考时钟架构 (Refclk Architecture)
【PCIe 协议】听说你做 PCIe 很多年,还不知道 PCIe Hierarchy ID 是什么 ???
【PCIe 协议】听说你做 PCIe 很多年,还不知道 PCIe Hierarchy ID 是什么 ???
675 0
【PCIe 协议】听说你做 PCIe 很多年,还不知道 PCIe Hierarchy ID 是什么 ???
|
6月前
|
网络架构 芯片 内存技术
TP_Link WR886N 硬改闪存16M内存64M,刷入openwrt
TP_Link WR886N 硬改闪存16M内存64M,刷入openwrt
363 0
|
6月前
|
固态存储 网络协议 Linux
SPDK NVMe-oF Target
SPDK NVMe-oF Target
SPDK NVMe-oF Target
|
SoC 内存技术
深入理解AMBA总线(五)AHB-lite Transfer进阶
深入理解AMBA总线(五)AHB-lite Transfer进阶
690 0
Vibro-meter VM600 RPS6U 200-582-500-013 机械卡核电厂保护装置
Vibro-meter VM600 RPS6U 200-582-500-013 机械卡核电厂保护装置
124 0
Vibro-meter VM600 RPS6U 200-582-500-013  机械卡核电厂保护装置
|
Perl
【PCIe 实战】SNPS PCIe 开启 SRIS mode
【PCIe 实战】SNPS PCIe 开启 SRIS mode
1012 0
【PCIe 实战】SNPS PCIe 开启 SRIS mode
【PCIe 6.0】PCIe 6.0 新特性 - L0p 详解
【PCIe 6.0】PCIe 6.0 新特性 - L0p 详解
1392 0
【PCIe 6.0】PCIe 6.0 新特性 - L0p 详解
|
芯片
【PCIe 6.0】PCIe 6.0 新特性 - L0p 详解2
【PCIe 6.0】PCIe 6.0 新特性 - L0p 详解
502 0
【PCIe 6.0】PCIe 6.0 新特性 - L0p 详解2
|
SoC
PCIe EA (Enhanced Allocation) 介绍
PCIe EA (Enhanced Allocation) 介绍
318 0
PCIe EA (Enhanced Allocation) 介绍