L2缓存中什么是干净状态?

时间:2014-12-23 18:09:24

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

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

  1. 按CPU外设(IC,VFP,PMU)保存
  2. 保存CPU寄存器
  3. 清理L1 D-cache
  4. 来自L2的清洁状态
  5. 禁用L1 D-cache分配
  6. 清理L1 D-cache
  7. 退出一致性
  8. 致电WFI(等待中断)
  9. 清洁L1是什么意思?这是否意味着删除L1的所有内容? L2中的清洁状态是什么意思?

1 个答案:

答案 0 :(得分:1)


  

什么是干净的?

ARM Cortex-A文档中的

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


  

为什么要多次清理?

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

第二次L1清理是由于两级缓存之间的竞争。它在Cortex-A技术参考手册(TRM)中描述。我会遵循他们的建议,因为它可能避免一些罕见的角落情况,这种类型的代码很难调试。必要时关闭/暂停/休眠将禁用所有调试设备,并且很难像启动代码那样出现问题。