【ARM Cache 与 MMU 系列文章 2 -- Cache Coherence及内存顺序模学习】
本文主要介绍了ARM缓存系统中的缓存一致性问题及解决方案。文章从缓存一致性背景入手,详细讲解了共享属性(共享、非共享、内共享、外共享)及其对缓存维护的影响。此外,文章还探讨了处理器缓存一致性(PoU)和全局缓存一致性(PoC)的概念,以及它们在缓存一致性中的作用。文章还提到了不同处理器域(内核和外核)对缓存共享性的影响,并强调了硬件和软件在缓存一致性维护中的重要性。
ARM Cache 及 MMU/MPU 系列文章专栏导读
ARM cache 及 MMU/MPU 系列文章导览
文章目录
-
- 缓存一致性概述
- 1.1 内存顺序模型简介(Memory Model)
-
- 1.1.1 正常内存
- 1.1.2 设备内存
- 缓存一致性概述
-
1.2缓存一致性问题的解决方案
-
1.2.1可共享属性
-
1.2.2不可共享属性
-
1.2.3内部可共享属性
-
1.2.4外部可共享属性
- 1.3 Cache PoC/PoU 关系
-
- 1.3.1 PoU(处理器缓存一致性角度)
- 1.3.2 PoC(全局缓存一致性角度)
前一篇:ARM Cache 系列文章 1 – 基础知识学习
后一篇:ARM Cache 系列文章 3 – Cache与MPU关系学习
Cache Coherence 背景
在深入理解缓存一致性之前,需要先掌握内存的访问顺序模型。所谓Cache一致性问题,因Cache机制的存在而产生,当多个Master节点(如MCU的Core、DMA、PCIE、I2C2APB等)同时访问同一内存块时,由于数据被缓存而不及时更新物理内存,从而导致系统性能和数据完整性受到干扰。
1.1 内存顺序模型简介(Memory Model)
ARM内存类型划分为normal type和device type。
ARM Cache 入门及渐进六 – 内存顺序模型
1.1.1 Normal Memory
Normal memory被称为内存,即为该内存类型在访问时不会产生副作用作用。即第n次访问与第n+1次访问之间没有区别。
1.1.2 Device Memory
device memory 是外设对应的物理地址空间,访问该部分内存时,可能存在副作用(side effect),例如:
某些状态寄存器可能执行清除操作;[1]
为了确保写入成功,寄存器必须遵循特定的写入顺序;
设备fifo地址固定不变,但每次访问时,移位寄存器会将下一个数据移出,因此,访问同一地址时,第n次与第n+1次访问的结果将不同。
1.2 Cache 一致性问题解决方案
一.所有共享资源均归类为共享属性(Shareability),共享特性要求其内容在特定内存范围内的多个处理器能够一致访问。
二.缓存维护工作采用软件手段进行,具体包括执行无效化操作(cache invalidate)和清理操作(cache clean)。
1.2.1 Shareability 属性
Shareability的由来为了确保数据一致性协议的执行,系统需要增加大量的硬件开销,这将导致系统的性能下降,同时也会增加系统的功耗。然而,实际上,并不需要系统中的所有模块都保持数据一致性,而只需确保系统中某些特定模块之间保持数据一致性即可。因此,为了实现这一目标,需要根据数据一致性要求,对系统中的各个模块进行细致划分,确保每个模块都能满足相应的数据一致性需求。
1.2.2 Non-Shareable 属性
设置为非共享属性的内存位置通常仅能被单一处理器访问。若其他处理器也能访问该位置,则必须通过缓存一致性指令来维持缓存一致性。
在单核场景下,CPU将某一块内存设置为non-shareable(同时配置为cacheable)属性,并写入一段数据。由于这段内存仅CPU可见,因此在使用DMA进行数据搬运时,必须先执行cache clean操作,将缓存中的数据刷新至内存中。否则,DMA搬运的数据可能会包含过时数据。
1.2.3 Inner-Shareable 属性
该内存位置可被Internal Shareability domain中的所有处理器访问,并且硬件确保该位置在这些处理器间的数据一致性。Internal Shareability domain中的处理器通常由同一台虚拟机监视器或操作系统控制,如图所示的两个clusters都位于Internal Shareability domain中。通常不同的clusters会共享L2 cache。

图 1-1
1.2.4 Out-Shareable 属性
可外共享的观察者(CPU、GPU、DMA)可观察到,它涵盖内部和外部可共享的域。一个外可共享域可以由一个或多个内可共享域组成,并且当一个操作影响到一个外可共享域时,也会对其下的所有内可共享域产生影响。
仅当内存被配置为 Normal Memory 属性时,才可以同时设置 inner 和 outer 的 Shareability。而 device memory 类型的内存无法设置 Shareability。
1.3 Cache PoC/PoU 关系
在ARM架构中,**一致性点(PoC)和统一性点(PoU)**是两个核心概念,用于确保内存体系中数据的一致性和可见性。系统架构不允许在一致性点之后进行缓存实现,因为这可能会破坏内存系统代理的一致性。
1.3.1 PoU(处理器缓存一致性角度)
PoU定义为一个核Master及其附属于其的指令、数据缓存和TLB的统一点,当它们在某个点上显示一致内容时,该点即为PoU。如图1-2右侧所示,MasterB整合了指令、数据缓存、TLB以及二级缓存。指令、数据缓存和TLB的数据交换基于二级缓存,因此,二级缓存成为PoU。
由于下图左侧的 MasterA 缺乏二级缓存机制,其指令和数据缓存的交互以及 TLB(Translation Lookaside Buffer)的数据交换均建立在内存空间中,从而导致内存成为系统性能瓶颈。
在另一种情况下,指令缓存可以用于监听数据缓存。在这种情况下,无需二级缓存即可保持数据一致性,因此,一级数据缓存就成为了PoU。
1.3.2 PoC(全局缓存一致性角度)
Consistency Point(CP)是指在一个系统中所有Master节点(而不是某个特定的节点)都可看到同一个源代码段的点。CP的存在意味着这些Master节点的指令、数据缓存和TLB能够看到同一个源代码段。在右侧图示中,二级缓存不能作为CP,因为MasterB节点可以直接访问内存,超出其缓存范围。因此,此时内存成为CP。在左图示例中,由于只有一个Master节点,所以内存是CP。

图 1-2
PoU/PoC定义了指令和命令能够访问的缓存层次或内存区域。当它们到达指定位置时,Inner/Outer Shareable决定了它们覆盖的范围。
上篇文章:ARM Cache 系列文章 1 – 学习 cache 基础概念
下篇文章:ARM Cache 系列文章 3 – 探讨 cache 与 MPU 的关系
