导致应用挂起的典型错误 - 2022.1 简体中文

Vitis 统一软件平台文档 应用加速开发 (UG1393)

Document ID
UG1393
Release Date
2022-05-25
Version
2022.1 简体中文

造成应用挂起的典型用户错误列举如下:

  • 在 5.0+ 目标平台中先读取后写入 (read-before-write) 会导致出现 Memory Interface Generator 纠错码 (MIG ECC) 错误。这是一种典型的用户错误。例如,如果内核应在 DDR 中写入 4 KB 数据,但它仅生成 1 KB 数据,随后尝试将整个 4 KB 数据传输到主机,那么就可能产生此错误。如果您向内核提供 1 KB 缓冲器,但内核尝试读取 4 KB 数据,也可能发生该错误。
  • 如果从导致 MIG 初始化的最近一次比特流下载开始,未向存储器位置写入任何数据,但对该存储器位置提交读取请求,那么也会产生 ECC 先读取后写入错误。ECC 错误会导致受影响的 MIG 停滞,因为内核通常无法处理此错误。这种情况可能表现为两种不同的方式:
    1. 计算单元可能挂起或停滞,因为它在从受影响的 MIG 中读取或写入的同时无法处理该错误。xbutil 查询显示计算单元卡在 BUSY 状态,而且没有进展。
    2. 如果向受影响的 MIG 提出了 PCIe® DMA 请求,则 AXI 防火墙可能脱扣,因为 DMA 引擎无法完成该请求。AXI 防火墙脱扣将导致 Linux 内核驱动程序终止利用 SIGBUS 信号打开器件节点的所有进程。xbutil 查询可显示 AXI 防火墙是否确实已脱扣并包含时间戳。
    如果上述挂起未发生,则主机代码可能未读回正确的数据。此错误数据通常为 0,并且位于数据最后一部分。请务必谨慎复查主机代码,这至关重要。此类状况的常见示例之一是压缩,其中被压缩数据的大小预先未知,而应用可能尝试向主机移植数据,且移植的数据量多于内核产生的数据量。