2. ARM 多核架构概述

在将 MESI 协议移植到 ARM 多核处理器之前,必须深入理解 ARM 特有的多核拓扑结构。与 x86 平台不同,ARM 通过 big.LITTLE、DSU(DynamIQ Shared Unit) 以及 SCU(Snoop Control Unit) 实现了异构计算与缓存一致性。本章将拆解这些核心组件,为后续的协议适配打下硬件基础。

2.1 ARM big.LITTLE 架构:异构计算的起源

ARM big.LITTLE 技术通过将高性能的“大核”(big)与高能效的“小核”(LITTLE)组合在同一个 SoC 中,实现了功耗与性能的动态平衡。在缓存一致性视角下,这种异构架构带来了独特的挑战:不同性能等级的核可能拥有不同大小的私有缓存(L1/L2),且需要共享同一内存视图。

架构要点: big.LITTLE 并非简单的“大小核”堆叠,而是通过一致性总线(CCI/CMN)或 DSU 实现跨簇的缓存一致性。MESI 协议在此需要处理不同延迟特性的缓存行迁移。
移植提示: 在 big.LITTLE 系统中,MESI 协议的“S”(共享)状态维护成本更高,因为大核的写操作需要向小核集群发送较长的侦听(Snoop)请求。建议在协议适配时,针对跨簇侦听路径增加超时重试机制。
ARM big.LITTLE 架构拓扑图 ARM big.LITTLE 架构拓扑(CCI-500 一致性总线) big 集群(Cortex-A7x) Core 0 (big) Core 1 (big) 共享 L2 缓存 (big 簇) LITTLE 集群(Cortex-A5x) Core 2 (LITTLE) Core 3 (LITTLE) 共享 L2 缓存 (LITTLE 簇) CCI-500 一致性总线(跨簇侦听 & 数据转发) 主存(DDR) MESI 跨簇侦听路径

2.2 DSU(DynamIQ Shared Unit):统一的一致性域

DSU 是 ARM 在 DynamIQ 技术中引入的下一代共享单元,取代了传统的 CCI(Cache Coherent Interconnect)。DSU 将 big 和 LITTLE 核整合到同一个一致性域中,允许最多 8 个核(任意 big/LITTLE 组合)共享一个统一的 L3 缓存(系统缓存)。

特性 传统 big.LITTLE(CCI) DynamIQ(DSU)
一致性域 每个簇独立,跨簇通过 CCI 桥接 单一一致性域,所有核直接互联
L3 缓存 无统一 L3,仅簇内 L2 共享 L3 系统缓存(可选)
侦听延迟 跨簇侦听延迟较高(约 30-50 cycles) 统一侦听,延迟降低约 40%
MESI 协议适配 需要处理跨簇的“远程”状态转换 简化了状态机,L3 可作为“目录”
适配风险: DSU 的 L3 缓存引入了“系统缓存”概念。MESI 协议在 DSU 中需要额外处理 L3 的“脏”状态回写策略。如果 L3 被配置为“写回”模式,则 MESI 的“M”状态可能需要在 L2 和 L3 之间进行两级追踪,避免数据丢失。
DSU 架构内部结构图 DSU(DynamIQ Shared Unit)内部结构 Core 0 (big) Core 1 (big) Core 2 (LITTLE) Core 3 (LITTLE) 私有 L1/L2 私有 L1/L2 DSU(DynamIQ Shared Unit) Snoop Filter MESI 目录 L3 系统缓存(共享,可选写回) 主存(DDR) MESI 目录加速侦听决策

2.3 SCU(Snoop Control Unit):缓存一致性的执行引擎

SCU 是 ARM 多核处理器中负责缓存一致性维护的硬件单元,通常集成在 Cortex-A 系列处理器的簇内。SCU 的核心职责包括:

  • 侦听过滤(Snoop Filtering): 追踪每个私有缓存中缓存行的状态,避免不必要的广播侦听。
  • 数据转发(Data Forwarding): 当某个核请求的数据在另一个核的私有缓存中处于“M”状态时,SCU 直接从该缓存转发数据,无需访问主存。
  • 状态转换仲裁: 协调多个核同时发起的 MESI 状态转换请求,防止竞争条件。
  • 屏障指令支持: 实现 DMB(Data Memory Barrier)和 DSB(Data Synchronization Barrier)指令,确保内存访问顺序。
MESI 与 SCU 的交互: 在 ARM 中,MESI 协议并非由软件实现,而是由 SCU 的硬件状态机驱动。当软件执行加载/存储指令时,SCU 自动执行以下流程:
1. 检查本地 L1 缓存标签(Tag)。
2. 若缺失(Cache Miss),则向 SCU 发送请求。
3. SCU 查询 Snoop Filter,判断数据是否在其他核的缓存中。
4. 若命中其他核的“M”状态,则触发“写回 + 转发”操作。
5. 更新所有相关缓存行的 MESI 状态。
SCU 缓存一致性操作流程图 SCU 缓存一致性操作流程(MESI 状态机) 1. 核发起 Load/Store 2. 检查 L1 缓存标签 命中? 3a. 直接返回数据 3b. 发送 SCU 请求 4. SCU 查询 Snoop Filter 5. 转发 + 写回(若 M) 6. 更新 MESI 状态 SCU 确保所有核看到一致的内存视图

2.4 缓存一致性单元(SCU)与 MESI 的协同工作模式

在 ARM 多核处理器中,SCU 是 MESI 协议的物理载体。以下表格总结了 SCU 在不同 MESI 状态下的典型行为:

MESI 状态 SCU 行为 侦听操作 延迟影响
M(Modified) 数据仅在本核私有缓存中,且为脏数据 其他核读请求时,SCU 触发“写回 + 转发” 高(需写回主存或转发)
E(Exclusive) 数据仅在本核私有缓存中,且与主存一致 其他核读请求时,SCU 直接共享数据 中(仅转发,无需写回)
S(Shared) 数据在多个核的私有缓存中,均为只读 写请求时,SCU 发送“Invalidate”广播 低(仅失效操作)
I(Invalid) 数据不在本核缓存中 SCU 从主存或其他核获取数据 取决于数据来源
移植经验: 在适配 MESI 协议时,务必关注 SCU 的 Snoop Filter 容量。如果 Snoop Filter 溢出(例如,缓存行数量超过过滤器的追踪能力),SCU 会退化为“广播模式”,导致侦听风暴。建议在 Linux 内核的 arch/arm64/kernel/smp.c 中监控 snoop_filter_miss 性能计数器,及时调整缓存着色(Cache Coloring)策略。

2.5 本章小结

ARM 多核架构通过 big.LITTLE 实现异构计算,通过 DSU 统一一致性域,通过 SCU 执行 MESI 协议。理解这三者的层次关系是移植 MESI 协议的第一步:

  • big.LITTLE 决定了缓存一致性的“范围”——跨簇侦听需要额外的延迟预算。
  • DSU 提供了 L3 系统缓存和 MESI 目录,简化了状态追踪。
  • SCU 是 MESI 协议的硬件执行者,其 Snoop Filter 和转发逻辑直接影响协议性能。