性能
如需获取 QDMA 性能和详细分析,请参阅答复记录 71453。
AMD 提供了两个设计示例供您实验。标准设计示例仅用于功能测试。要生成用于性能分析的设计示例,使用以下 Tcl 命令来生成性能设计示例:
set_property CONFIG.performance_exdes {true} [get_ips qdma_0]
以下是 AMD 推荐的 QDMA 寄存器设置,此设置旨在提升性能。性能数值因使用的系统和操作系统而异。
地址 | 名称 | 字段 | 字段值 | 寄存器值 |
---|---|---|---|---|
0xB08 | PFCH CFG |
|
|
0x100_0100 |
0xA80 | PFCH_CFG_1 |
|
|
0x3c_003c |
0xA84 | PFCH_CFG_2 |
|
|
0x8040_03C8 |
0x147C | PFCH_CFG_3 |
|
|
0x8000 |
0x1484 | PFCH_CFG_4 |
|
|
0x80_0320 |
0x1400 | CRDT_COAL_CFG_1 |
|
|
0x4010 |
0x1404 | CRDT_COAL_CFG_2 |
|
|
0x38_0060 |
0x15C | GLBL_RRQ_PCIE_THROT |
|
|
0x604_5000 |
0x160 | GLBL_RRQ_AXIMM_THROT |
|
|
0 |
0x158 | GLBL_RRQ_BRG_THROT |
|
|
0x8604_5000 |
0xE24 | H2C_REQ_THROT_PCIE |
|
|
0x8604_6000 |
0xE2C | H2C_REQ_THROT_AXIMM |
|
|
0x8204_4000 |
0x12EC | H2C_MM_DATA_THROT |
|
|
0x1_5000 |
0x250 | QDMA_GLBL_DSC_CFG |
|
|
0x50_2015 |
0x4C | CONFIG_BLOCK_MISC_CONTROL |
|
|
0x1_0009 |
- QDMA_C2H_INT_TIMER_TICK (0xB0C) 设为 25。对应于 100 ns(对于 250 MHz 用户时钟,1 拍 = 4 ns)
- C2H 触发模式设为用户定时器,计数器设为 64,定时器则与往返时延相匹配。定时器的全局寄存器值应为 30,表示 3 μs。
- TX/RX API 突发大小 = 64,环深度 = 2048。驱动程序应以 64 为单位成批更新 TX/RX PIDX。
- PCIe MPS = 256 字节,MRRS >= 512 字节,启用扩展标签,启用宽松排序
- 驱动程序将以 64 为单位成批更新完成 CIDX,从而在更新 C2H PIDX 前减少 MMIO 写入数量
- 驱动程序应以 64 为单位成批更新 H2C PIDX,并通过更新来获取分散聚集列表的最后一个描述符。
- C2H 上下文:
-
bypass
= 0(内部模式) -
frcd_en
= 1 -
qen
= 1 -
wbk_en
= 1 -
irq_en
=irq_arm
=int_aggr
= 0
-
- C2H 预取上下文:
-
pfch
= 1 -
bypass
= 0 -
valid
= 1
-
- C2H CMPT 上下文:
-
en_stat_desc
= 1 -
en_int
= 0 (Poll_mode) -
int_aggr
= 0(轮询模式) -
trig_mode
= 5 -
counter_idx
= 对应于 64 -
timer_idx
= 对应于 3 μs -
valid
= 1
-
- H2C 上下文:
-
bypass
= 0(内部模式) -
frcd_en
= 0 -
fetch_max
= 0 -
qen
= 1 -
wbk_en
= 1 -
wbi_chk
= 1 -
wbi_intvl_en
= 1 -
irq_en
= 0(轮询模式) -
irq_arm
= 0(轮询模式) -
int_aggr
= 0(轮询模式)
-
为了获取最优 QDMA 串流性能,描述符环的包缓冲器应至少对齐到 256 字节。
建议:
AMD 建议您在 PCIe 上将描述符提取的未完成总数限制为小于 8 KB。例如,对于 16B 描述符,将所有队列的未完成信用值限制为 512。
描述符旁路模式中的性能
在描述符旁路模式下配置设计时,以上所有设置都适用。以下信息提供了在旁路模式下提升性能的建议。
- 在
h2c_byp_in_st_sdi
端口中设置旁路时,QDMA IP 会为每个包生成状态写回。AMD 建议在 32 位包或 64 位包中,对此端口执行一次断言有效。如无更多描述符需处理,则在最后一个描述符处将h2c_byp_in_st_sdi
断言有效。此要求基于每个队列,并且适用于 AXI4(H2C 和 C2H)旁路传输和 AXI4‑Stream H2C 传输。 - 对于 AXI4‑Stream C2H 简单旁路模式,出于性能原因,
dsc_crdt_in_fence
端口应设为 1。此建议假定用户设计已为每个队列合并信用值并且已将其发送至 IP。在内部模式下,请在 QDMA_C2H_PFCH_CFG_2 (0xA84) 寄存器中设置fence
位。
基于可用高速缓存/缓冲器大小进行性能优化
- 预取高速缓存大小
- QDMA 预取高速缓存大小可编程(16 或 64)。在内部模式下配置 QDMA 时,QDMA IP 拥有 64 个 Q 的空间,可供 IP 从中预取描述符。如果要支持的 Q 数量超过 64(例如,65 个 Q),那么引擎会驱逐使用最少的 Q,并添加一个新的 Q。若包大小较小且超过 64 个 Q,这可能会对性能产生负影响。要支持更多 Q,可在简单旁路模式下配置 QDMA IP,并将描述符高速缓存置于 IP 外。这样您即可管理描述符流程。
- CPMT 数据 FIFO
- QDMA IP 具有深度为 2 的超窄完成 FIFO。如果您能在空间中实现更深的 FIFO (512),并将 FIFO 输出馈送给 QDMA 完成输入,那么效率会更高。
- FIFO 中的 C2H 串流描述符
- QDMA IP 的 FIFO 中具有一个描述符旁路输入与内部模式公用的描述符。此描述符 FIFO 深度为 1K。填满此 FIFO 时,IP 会对您的旁路输入产生反压。
资源使用情况
如需了解有关 QDMA 资源使用情况的信息,请参阅资源使用情况网页。