性能瓶颈可能会在各处出现。大部分问题均可分类为 4 个不同调试部分:
- 主控制器
- 启动传输的器件。
- 请检查其功能。方法是计算 AXI 数据总线宽度 * 该主控制器的 AXI 频率。
- 如果 CPM 作为主控:
- 请检查它是同时使用 2 个 AXI4-MM 端口,还是仅使用单个 AXI4-MM 端口。计算通过这些端口的聚合带宽。
- 检查 CPMTOPSWCLK 频率。CPM AXI4-MM 端口位宽固定为 128 位。
- 检查流量模式。确保数据包按传输 ID(可以是队列 ID 或通道 ID)拆分。请勿拆分使用相同 AXI4 ID 的数据包。
- 从设备
- 接收传输的器件。
- 请检查其功能。方法是计算 AXI4 数据总线宽度 * 该从设备的 AXI4 频率。
- 如果 CPM 用于接收传输:
- CPM 仅有 1 个 AXI4-MM 端口。计算通过此端口的带宽。
- 检查 CPMTOPSWCLK 频率。CPM AXI4-MM 端口位宽固定为 128 位。
- 检查流量模式。从端口用于访问内部寄存器(在内部使用 AXI4‑Lite 接口且有 1 项未完成的 AXI4 传输事务),且用于对 PCIe 链路执行总线主控(读写)操作。请勿将这些传输事务目标进行交织,以免发生队头阻塞。
- 互连
- 数据包必须经过的所有互连和开关。
- 分析传输路径中的所有互连。包括 NoC、CCI-500、SmartConnect 等。请检查其吞吐量能力。方法是计算 AXI4 数据总线宽度 * 这些互连的 AXI4 频率。
- 检查 AXI4 未完成的传输事务设置。系统时延越高或者 AXI4 数据包越小,则此数值应越高,以免信用值不足。
- 检查流量模式。确保“慢”数据路径和“快”数据路径不会交织,以免发生队头阻塞。
- 外部/软件
- 超出 AMD 器件范围的因素。
- 软件/驱动/应用
- 软件和驱动通常比硬件慢得多。为了最大程度提升吞吐量,您必须确保传输期间软件具有最低“维护”要求:
- 最大程度提升可用的描述符队列环大小或描述符链大小。
- 最大程度提升传输大小(包括主机的最大有效载荷大小和最大读取请求大小设置)。
- 最大程度提升队列和 DMA 通道数量。
- 最大程度减少中断并避免过度使用轮询模式。
- 最大程度减少指针或硬件更新。
- 避免从软件执行总线主控。交由硬件来执行 DMA 或总线主控。
- 避免过度从用户复制到内核层级存储器。指定主机上的某一存储器用于传输。
- 开关/IOMMU/处理器链路
- 当传输事务进出主机时,有各种常用模块沿这些路径传输,这可能导致时延增加,从而对系统性能产生不利影响:
- 请选择包含 PCIe 开关最少的路径。分析可用 PCIe 插槽及其总线拓扑结构。确保软件或驱动在连接到该 PCIe 总线的 CPU 上运行。使用直接连接到该 CPU 的存储器器件(磁盘、DDR 存储器等)。
- 所选 CPU 和 PCIe 开关应具有较多 PCIe 信用值,或者可使用扩展 PCIe 标签。这样会显著提升未完成的 PCIe 数据包数量,因此需要对主机的高时延进行补偿。企业级系统传输的值通常比桌面系统或工作站系统更高。
- 确保有效的 PCIe 插槽和 PCIe 开关的链路宽度和速度与您的器件相匹配。验证 PCIe 链路是否已训练至最优链路速度和宽度。
- 在多功能器件中通常需要 IOMMU,但它会增加用于转换这些 PCIe 地址的时延。如非必要,请避免依赖 IOMMU。
- 在 PCIe 和 CPU 上禁用低功耗状态。虽然这些功能能够节省功耗(在大型数据中心环境内尤其如此),但重复进出这些功耗状态可能导致减缓传输速度并增加时延。