【问题标题】:PoU and PoC in cache maintenance operations in armarm中缓存维护操作中的PoU和PoC
【发布时间】:2014-05-02 16:23:48
【问题描述】:

在阅读 ARM 拱门时。参考。手册 v7,我发现了两个概念;一致性点 (PoC) 和统一点 (PoU)。

对于 PoC,似乎所有代理(即 CPU 内核)都可以看到相同的内存副本。

对于 PoU,似乎所有代理(在本例中为 CPU 内核和 MMU)都可以看到相同的内存副本。

我有几个后续问题:

  1. 我的理解正确吗?

  2. 如果是这样,如果我发出 DCCMVAC (Data cache clean MVA to PoC) 并将 MVA 设置为 0x40000000,(假设 PoC 恰好是 0x70000000),

    VA 0x40000000 和 0x70000000 之间的所有缓存条目都被清除了吗?

  3. 那么,如果我发出带有 MVA 0x0 的 DCCMVAC,是否会清除所有数据缓存条目?

  4. PoU 听起来像是 MMU 本身有自己的数据缓存(不是 TLB),用于在主内存中进行页表遍历。这是正确的吗?

【问题讨论】:

  • 而不是 MMU 思考/了解 TLB(这是你的第 4 项)。如果系统是高级的,PoC 可以是 L1,其中 SCU 保持可共享内存的一致性。 PoU 可以是 L2 - 正如你所说的,每个人都有相同的副本。
  • 哦,我的意思(第4项)是当MMU访问主存中的页表时(发生TLB未命中时),它是直接访问主存还是访问某种数据缓存?
  • TLB 是 MMU 的缓存(afaik),而 TLB 没有缓存。
  • TLB 是 MMU 的缓存,用于存储 vapa 映射。如果 TLB 中缺少条目,则 MMU 必须遍历主内存中的页表。我很好奇的是这一刻(MMU访问主存)。我已经编辑了问题以避免混淆。
  • 没有像MMU的数据缓存这样的缓存。您可以阅读 cortex-a 系列程序员指南以获取更多信息。

标签: arm cortex-a


【解决方案1】:

根据 ARM 培训资料:

处理器的 PoU(统一点)是指令和数据缓存以及处理器的转换表遍历确保看到内存位置的相同副本的点(硬件内的物理位置)。例如,统一的 2 级缓存将是系统中的统一点,该系统具有哈佛 1 级缓存和 TLB(用于缓存页表条目)。如果不存在外部缓存,则主内存将是统一点。

PoC([系统] 一致性点)是保证可以访问内存的所有块(例如,CPU、DSP 或 DMA 引擎)在特定地址上看到相同副本的点内存位置。通常,这将是主要的外部系统内存。

【讨论】:

    【解决方案2】:

    这是一个旧案例,但是,添加一些 cmets 以防有人搜索。

    在我看来,PoU 和 PoC 是 ARM 创造的,旨在为缓存维护定义一个级别。 PoC 和 PoU 的定义在 ARM ARM 规范中,而它的 ARMv8 编程指南(不是 ARM 规范)给出了一些图表以便更好地理解:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.den0024a/ch11s04.html

    有一点是,在ARM V8处理器的实现下,Iside可以窥探Dside,例如如果有一个Icache miss,它会检查Dcache,所以你可以把PoU当作L1缓存的级别。而其他 ARMv8 处理器可能没有这种行为。

    回到原来的问题: 2)DCCMVAC 0x40000000,它会对这个地址做缓存清理到PoC,主要是一个缓存行 PoC 由 SoC 实现定义,而不是地址。

    3) 考虑到 Q2,DCCMVAC 0x0,仅适用于一个缓存行。 如果你想清理整个缓存并使之失效,你需要使用 by set/way 来遍历整个缓存。

    4) PoU 与 MMU 无关。 MMU硬件块拥有一些缓冲区来保存TLB条目,这是一种常见的做法,对于页表,它是由软件在内存中构建的,通常它被定义为普通内存类型,因此在CPU指令设置期间它可以在缓存中,或通过 MMU 硬件步行单元步行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-01
      • 1970-01-01
      相关资源
      最近更新 更多