造成应用挂起的典型用户错误列举如下:
- 在 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 停滞,因为内核通常无法处理此错误。这种情况可能表现为两种不同的方式:
- 计算单元可能挂起或停滞,因为它在从受影响的 MIG 中读取或写入的同时无法处理该错误。
xbutil
查询显示计算单元卡在BUSY
状态,而且没有进展。 - 如果向受影响的 MIG 提出了
PCIe®
DMA 请求,则 AXI 防火墙可能脱扣,因为 DMA 引擎无法完成该请求。AXI 防火墙脱扣将导致 Linux 内核驱动程序终止利用
SIGBUS
信号打开器件节点的所有进程。xbutil
查询可显示 AXI 防火墙是否确实已脱扣并包含时间戳。
- 计算单元可能挂起或停滞,因为它在从受影响的 MIG 中读取或写入的同时无法处理该错误。