Zynq-7000 SoC,APU  – 在同一缓存线内重复的CPU存储指令可以延迟存储的可见性-Xilinx-AMD社区-FPGA CPLD-ChipDebug

Zynq-7000 SoC,APU – 在同一缓存线内重复的CPU存储指令可以延迟存储的可见性

描述

CPU具有存储缓冲区,其具有用于正常存储器区域的高速缓存线内的合并能力。只要对同一缓存行执行写访问,缓冲区就会继续合并数据。存储缓冲区有一个小计数器,可在一段时间后将数据推送到内存,以提供存储的外部可见性。问题是每次合并新数据时都会重置计数器。如果软件代码序列正在循环,并且继续在同一缓存行中重复写入数据,则写入数据的外部可见性可能会无限期地延迟。

影响:

次要。如果外部代理在有限的时间内依赖于写入数据的自动可见性,则此问题可能会产生性能问题,或者最坏情况下的实时锁定方案。

解决方法:

在错误的写操作之后,在可能受此错误影响的代码序列中插入DMB操作,以确保任何外部代理可以看到写入的数据。

受影响的配置:

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

受影响的器件版本: 全部,没有计划修复。请参阅Zynq-7000器件咨询主答复记录

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

  • 处理器继续递增计数器:在同一地址写入相同的字。外部代理(可能是另一个处理器)正在轮询该地址,等待计数器值的任何更新继续进行。存储缓冲区将继续在其缓存行中合并计数器的更新值,以便外部代理永远不会看到任何更新的值,可能导致实时锁定。
  • 处理器在给定字中写入值以指示其任务的完成;然后,继续在同一缓存行中的相邻字中写入数据。外部代理继续轮询第一个字的内存位置,以检查处理器何时完成其任务。问题与上述相同,因为缓存行可以无限期地保留在合并存储缓冲区中,从而在系统中创建可能的实时锁定。

推荐的解决方法是在连续保存在存储缓冲区中的写操作之后插入DMB操作。这样做是为了确保写入数据对任何外部代理的可见性。用户必须在他看到此问题的任何地方插入内存屏障。

请登录后发表评论

    没有回复内容