仅对英特尔可见 — GUID: rqy1636755972675
Ixiasoft
仅对英特尔可见 — GUID: rqy1636755972675
Ixiasoft
4.4.1.5.1. Completion Buffer Size
R-tile Hard IP for PCIe针对每个PCIe核的头(header)和数据实现Completion (Cpl)缓冲区。Endpoint模式中,当Completion credit为infinite(无限)时,用户应用程序需要管理待处理请求的数量,以避免溢出和丢失Completions。
Completion缓冲区 | R0/R1 Suffix OPNs | R2/R3 Suffix OPNs | ||
---|---|---|---|---|
深度 | 宽度 | 深度 | 宽度 | |
Port 0 Cpl header | 572 | N/A | 1444 | N/A |
Port 0 Cpl data | 2016 | 512 | 2016 | 512 |
Port 1 Cpl header | 572 | N/A | 1144 | N/A |
Port 1 Cpl data | 2016 | 256 | 2016 | 256 |
Port 2 Cpl header | 286 | N/A | 572 | N/A |
Port 2 Cpl data | 1730 | 128 | 2016 | 128 |
Port 3 Cpl header | 286 | N/A | 572 | N/A |
Port 3 Cpl data | 1730 | 128 | 2016 | 128 |
Application Layer应该在有足够completion缓冲区容量时发送请求。对于Memory Read请求,允许Completer(事务接收端)将针对单个Read Request的响应拆分成多个Completions,因而Application Layer需要计算最多可能返回的Completion数量。.
以下是基于Memory Read请求大小和Read Completion Boundary (RCB)配置所需要的Completion缓冲区容量的几个示例。
存储器读(Memory Read)请求示例 | 需要的Completion缓冲区容量 | |||||
---|---|---|---|---|---|---|
Port 0 | Port 1 | Port 2/3 | ||||
Header | Data | Header | Data | Header | Data | |
地址为1_0000h,且长度为C0h字节(十进制192)的Memory Read请求可以由RCB值为64字节的Root Complex,通过如下Completion组合(字节)的其中之一来完成:
|
3 | 3 | 3 | 6 | 3 | 12 |
地址为1_0000h,且长度为C0h字节(十进制192)的Memory Read请求可以由RCB值为128字节的Root Complex,通过如下Completion组合(字节)的其中之一来完成:
|
2 | 3 | 2 | 6 | 2 | 12 |
地址为1_0020h且长度为100h字节(十进制 256)的Memory Read请求可以由RCB值为64的Root Complex通过以下Completions 组合(字节)其中一个来完成:
|
5 | 4 | 5 | 8 | 5 | 16 |
基于上述表格中的示例,以下应用逻辑追踪Completion缓冲区容量的建议流程和对R-tile IP for PCIe安排NP Request的图示中提供有关应用逻辑中追踪completion缓冲区容量的建议流程,并基于此,为R-Tile Intel FPGA IP for PCI Express安排Non-Posted (NP)请求。
出于说明目的,应用逻辑追踪Completion缓冲区容量的建议流程和对R-tile IP for PCIe安排NP Request 显示的是以Gen5x16 (Port 0)配置的R-Tile Intel FPGA IP for PCIe express中,Application逻辑请求192 Bytesde Memory Read,并且得到从链路伙伴的响应中得到192 Bytes的单个完成。
- 当dl_up信号从LOW变为HIGH,Application逻辑根据上述CPL缓冲大小表格(Completion Buffer Size)中罗列的情况初始化可用的completion缓冲区容量。
- 当有NP请求添加到Application逻辑的传输队列中时,Completion Tracking逻辑计算该请求所需要的completion缓冲区容量,同时要考虑可能接收的最大completion数。本示例中,它是3个64 Bytes的completion。(请参阅Completion缓冲区容量示例中表格提供的示例)。
- Completion Tracking逻辑对比可用的completion缓冲区容量查看需要的completion缓冲容量。
- 如果有足够可用的缓冲区容量,则Application逻辑安排Memory Read请求的传输。
- Completion Tracking逻辑更新可用的completion header缓冲区容量。
- Completion Tracking逻辑更新可用的completion数据缓冲区容量。
- R-Tile Intel FPGA IP for PCI Express向链路伙伴发送NP TLP。
- 该链路伙伴通过单个192B数据负载的Completion响应该MRd请求。
- 当其Rx Queue中的Application Layer接收到Completion数据包后,
- 该Completion Tracking逻辑更新可用的completion header缓冲区容量。
- Completion Tracking逻辑更新可用的completion数据缓冲区容量。
- Completion Tracking逻辑验证接收到的Completion是否已完全完成该原始NP请求。
- 如果已完成该请求,则Completion Tracking逻辑根据先前分配给该请求的未使用容量调整可用的completion缓冲区容量。
- 如果步骤8和步骤8a中有多个Completion,Completion Tracking Logic将相应地更新每个接收到的completion缓冲区容量。