AR# 47556

Zynq-7000 SoC, APU - 在相同的缓存线中出现重复的 CPU 存储指令会造成存储延迟显示

描述

CPU 有一个存储缓存,可在高速缓存线路中为正常内存区域提供融合功能。只要针对相同的高速缓存线路执行写入访问,该缓存就会不断融合数据。存储缓存有一个小计数器,可以在一段时间后将数据推送到内存中,让外部了解存储情况。问题是每次新数据融合时都会重置计数器。如果一个软件代码序列正在循环并不断在相同的高速缓存线路中反复写入数据,外部查看输入的数据可能就会无限期延迟。

解决方案

影响:

很小。这可造成性能问题,最为严重的是,如果外部代理在有限的时间内依靠写入数据的自动查看,还会造成活锁情况。

解决方法::

在可能受到该错误影响的代码序列中出现错误写入操作之后,插入一个 DMB 操作,确保所有外部代理都能查看写入数据的情况。

受影响的配置:

使用一个或两个处理器的系统。

受影响的器件修订版本:全部,无计划修复。参考 Zynq-7000 器件咨询主答复记录

该问题只会发生在正常内存区。下面描述了两个可能触发该问题的示例场景:

  • 处理器不断为计数器增量:在同一个地址写入相同的字段。外部代理(可能是另一个处理器)在该地址上轮询,等待计数器值更新的继续进行。存储缓存将不断在它的高速缓存线路中融合计数器的更新值,这样外部代理永远都不会看到任何更新的值,这可能会导致活锁。
  • 处理器在给定的字段中写入一个值,以指示其任务的完成,随后在同一个高速缓存线路的相邻字段中继续写入数据。外部代理继续轮询第一个字段内存位置,以检查处理器何时完成其任务。问题与上面的情况一样,因为高速缓存线路可以无限期地保持在融合存储缓存中,从而可能会在系统中造成一个活锁。

推荐的解决方法是在存储缓存中继续保持写入操作之后,插入一个 DMB 操作。这样可确保任何外部代理都能查看写入数据的情况。  无论该问题出现在哪里,用户都必须插入一个内存栅栏。

链接问答记录

主要问答记录

Answer Number 问答标题 问题版本 已解决问题的版本
47916 Zynq-7000 SoC 器件:芯片修订差异 N/A N/A
AR# 47556
日期 05/23/2018
状态 Active
Type 设计咨询
器件