【问题标题】:what is clean state in L2 cache?L2 缓存中的干净状态是什么?
【发布时间】:2015-02-21 21:58:01
【问题描述】:

在 ARM 架构中阅读 CPU 关闭序列时,我发现了以下步骤:

  1. 节省每个 CPU 外设(IC、VFP、PMU)
  2. 保存 CPU 寄存器
  3. 清理 L1 D 缓存
  4. 来自 L2 的干净状态
  5. 禁用 L1 D-cache 分配
  6. 清理 L1 D 缓存
  7. 退出一致性
  8. 调用WFI(等待中断)

干净的 L1 是什么意思?是否意味着删除L1的所有内容? L2 的干净状态是什么意思?

【问题讨论】:

    标签: linux-kernel arm power-management cpu-cache


    【解决方案1】:

    什么是干净的?

    Clean,在 ARM Cortex-A 文档中,通常表示 flush(将脏缓存行写入下一级)。它仅对Dcache统一缓存 有效。有时我们需要 cleaninvalidate(清除缓存)。如果某些其他实体(总线主设备/外围设备)可能会更改内存,这一点很重要。通常,总线 (AXI) 具有避免这种情况的机制。另外,如果你更新主存中的代码并且有以前的 I-cache 数据,你需要invalidate它。


    为什么要多次清理?

    您需要清理 L1 以确保数据在 L2 中(已刷新),以便您随后可以清理 L2。当我们禁用 L1 DCache 时,您可能会从 L1 中的 L2 刷新操作中获得一些陈旧数据。我不完全确定他们为什么在第 6 步中说干净而不是无效。您没有给出确切的 ARM CPU,这些详细信息因类型而异。看起来这可能是带有外部 L2C-310 的 Cortex-A5/A8/A9。

    第 2 次 L1 清理是由于两级缓存之间的竞争。它在 Cortex-A 技术参考手册 (TRM) 之一中进行了描述。我会听从他们的建议,因为它可能会避免一些罕见的极端情况,而且这种类型的代码很难调试。必要时关机/挂起/休眠会禁用所有调试设备,并且很难像启动代码一样进行故障排除。

    【讨论】:

      猜你喜欢
      • 2021-09-22
      • 1970-01-01
      • 2019-06-08
      • 2011-04-11
      • 2011-01-09
      • 1970-01-01
      • 2020-08-04
      • 2019-09-23
      • 1970-01-01
      相关资源
      最近更新 更多