深入学起Cache系列3:多核多Cluster多系统之间的缓存一致性

原创 Linux阅码场 2022-04-18 08:00

作者简介

baron (网名:代码改变世界ctw),九年手机安全/SOC底层安全开发经验。擅长trustzone/tee安全产品的设计和开发



阅码场付费会员专业交流群

会员招募:各专业群会员费为88元/季度,权益包含群内提问,线下活动8折,全年不定期群技术分享(普通用户直播免费,分享后每次点播价为19元/次),有意加入请私信客服小月(小月微信号:linuxer2016)


专业群介绍:

彭伟林-阅码场内核性能与稳定性
本群定位内核性能与稳定性技术交流,覆盖云/网/车/机/芯领域资深内核专家,由阅码场资深讲师彭伟林主持。


甄建勇-Perf Monitor&Perf Counter

本群定位Perf、cache和CPU架构技术交流,覆盖云/网/车/机/芯领域资深用户,由阅码场资深讲师甄建勇主持。


邓世强-Xenomai与实时优化

本群定位Xenomai与实时优化技术交流,覆盖云/网/车/机/芯领域资深用户,由阅码场资深讲师邓世强和彭伟林共同主持。


周贺贺-Tee和ARM架构

本群定位Tee和ARM架构技术交流,覆盖云/网/车/机/芯领域资深用户,由阅码场资深讲师周贺贺主持。


谢欢-Linux tracers

本群定位Linux tracers技术交流,覆盖云/网/车/机/芯领域资深用户,由阅码场资深讲师谢欢主持。




1.思考和质疑


在一个大架构大系统中,有哪些一致性需要维护?我们先看如下一张架构图。然后请思考:

  • (1)、core0中的L1和L2 cache有一致性的要求吗?缓存和替换策略是怎样的?

  • (2)、core0 cache 和 core1 cache的一致性是谁来维护?遵从MESI协议吗?

  • (3)、core0 cache 和 core4 cache的是怎么维护一致性的呢?

  • (4)、custer0 L3 cache 和 cluster1 L3 cache的一致性是谁来维护?遵从什么协议吗?

  • (5)、custer0 L3 cache 和 GPU的L2一致性呢?遵从什么协议?

  • (6)、custer0 L3 cache 和 其它的 I/O deviceMaster一致性呢?遵从什么协议?

  • (7)、DSU、ACE、CHI、CCI、CMN的概念?

网上的好多篇博文,一提Cache的多核一致性就必然提到 MESIMOESI ,然后就开始讲 MESIMOESI维护性原理?试问一下,您是真的不理解MESI吗?您真的需要学习MESI?你不理解的是架构吧,而不是学什么协议. 既然要学习MESI,那么这里也继续提出一些问题:

  • (1)、ARM架构中真的使用MESI了吗?或者是哪一级cache使用了,哪一级cache没有使用?

  • (2)、MESI是一个协议?是谁来维护的?总得有个硬件实现这个协议吧,是在ARM Core实现?DSU实现?

  • (3)、MESI的四种状态,分别记录在哪里的?

  • (4)、arm现在主流的core,到底使用的是MESI,还是MOESI?

2.怎样去维护多核多系统缓存的一致性


有三种机制可以保持一致性:

  • 禁用缓存是最简单的机制,但可能会显着降低 CPU 性能。为了获得最高性能,处理器通过管道以高频率运行,并从提供极低延迟的缓存中运行。缓存多次访问的数据可显着提高性能并降低 DRAM 访问和功耗。将数据标记为“非缓存”可能会影响性能和功耗。

  • 软件管理的一致性是数据共享问题的传统解决方案。在这里,软件(通常是设备驱动程序)必须清除或刷新缓存中的脏数据,并使旧数据无效,以便与系统中的其他处理器或主设备共享。这需要处理器周期、总线带宽和功率。

  • 硬件管理的一致性提供了一种简化软件的替代方案。使用此解决方案,任何标记为“共享”的缓存数据将始终自动更新。该共享域中的所有处理器和总线主控器看到的值完全相同。

然而,我们在ARM架构中,默认使用的却是第三种 硬件管理的一致性, 意思就是:做为一名软件工程师,我们啥也不用管了,有人帮我们干活,虽然如此,但我们还是希望理解下硬件原理。

再讲原理之前,我们先补充一个场景: 假设在某一操作系统中运行了一个线程,该线程不停着操作0x4000_0000地址处内存(所以我们当然期望,它总是命中着),由于系统调度,这一次该线程可能跑在cpu0上,下一次也许就跑在cpu1上了,再下一次也许就是cpu4上了(其实这种行为也叫做CPU migration)

或者举个这样的场景也行:在Linux Kernel系统中,定义了一个全局性的变量,然后多个内核线程(多个CPU)都会访问该变量.

在以上的场景中,都存在一块内存(如0x4000_0000地址处内存)被不同的ARM CORE来访问,这样就会出现了该数据在main-memory、cluster cache、core cache不一致的情况, 复杂点场景可能还会考虑cluster chache和other Master(如GPU) cache的一致性情况。

既然出现了数据在内存和不同的cache中的不一致的情况,那么就需要解决这个问题(也叫维护cache一致性),那么怎么维护的呢,上面也说了“使用 硬件管理的一致性”,下面就以直接写答案的方式,告诉你硬件是怎样维护一致性的。

2.1 多核缓存一致性

同一个cluster中多core之间的缓存一致性由DSU(big.LITTLE叫SCU)来维护,遵循MESI协议。

2.2 多Master之间的缓存一致性

在讲述多Master之间的缓存一致性之前,我们先将Master分为以下几类:

  • ACE Master : 如 big.LITTLE cluster 或 DSU cluster

  • CHI Master : 如 big.LITTLE cluster 或 DSU cluster

  • ACE-lite Master:如 GPU cluster

  • I/O Device Master : 如 DMA

以下是多Master之间的缓存一致性的结论:

  • 首先,CHI/ACE总线都是支持MESI协议数据传输的

  • Master与I/O Device Master之间没有一致性,因为I/O Device没有链接到CCI/CMN缓存互联总线上。

  • 多个ACE/CHI Master之间的缓存一致性,是否遵循MESI,要具体情况具体分析,简而言之就是:(1) 如果两个Master都支持带MESI状态位,支持带有MESI信号的读写,那么这两个Master缓存一致性是遵从MESI协议的 (2) 如果有一个Master不支持带MESI状态位,那么这个Master就无法支持带有MESI信号的读写,那么这两个Master缓存一致性是不遵从MESI协议的 (3) Master的MESI状态位,是在该Master的cache的TAG中。

  • ACE/CHI Master和ACE-lite Master之间的缓存一致性,是不遵从MESI协议的。这主要是因为ACE/CHI Master无法snoop ACE-lite Master的内存,而ACE-lite Master却可以snoop ACE/CHI Master的内存,总得来说,这不是一个完整的MESI协议。

举一个最常见的例子:两个DSU cluster的L3 cache中的TAG中,是有MESI比特位的,这两个DSU通过ACE/CHI 接口发起的读写是带有MESI信号的,所以他们是支持MESI协议的。

再举一个例子,一个DSU cluster 和一个接到SMMU上的DMA,此时正好对应一个是ACE/CHI Master,一个ACE-lite Master,由于DMA/SMMU中并没有MESI状态位,他们也不会发起带有MESI信号的读写,所以这两个Master之间是不支持MESI协议的。

2.3 dynamIQ架构同一个core中的L1和L2 cache

dynamIQ架构core中的L1和L2 cache不存在缓存一致性的问题,但有分配和替换策略。

我们先看一下DynamIQ架构中的cache中新增的几个概念:

  • (1) Strictly inclusive: 所有存在L1 cache中的数据,必然也存在L2 cache中

  • (2) Weakly inclusive: 当miss的时候,数据会被同时缓存到L1和L2,但在之后,L2中的数据可能会被替换

  • (3) Fully exclusive: 当miss的时候,数据只会缓存到L1

其实inclusive/exclusive属性描述的正是是 L1和L2之间的替换策略,这部分是硬件定死的,软件不可更改的。

我们再以 ARMV9 cortex-A710为例,查看其TRM手册,得知:

  • L1 I-cache和L2之间是 weakly inclusive的

  • L1 D-cache和L2之间是 strictly inclusive的

也就是说:

  • 当发生D-cache发生miss时,数据缓存到L1 D-cache的时候,也会被缓存到L2 Cache中,当L2 Cache被替换时,L1 D-cache也会跟着被替换

  • 当发生I-cache发生miss时,数据缓存到L1 I-cache的时候,也会被缓存到L2 Cache中,当L2 Cache被替换时,L1 I- cache不会被替换

所以总结一下就是 :L1 和 L2之间的cache的替换策略,针对I-cache和D-cache可以是不同的策略,每一个core都有每一个core的做法,这部分是硬件决定的,请查阅你使用core的TRM手册。


3.MESI协议的介绍


本协议适用于:

  • big.LITTLE架构中多核缓存一致性

  • dynamIQ架构中多核缓存一致性

  • 多cluster之间缓存一致性  其实也适用于:

  • 不同cluster之间多核的缓存一致性 

然后接下来,我们开始学习MESI协议,注意着仅仅是一个协议 ,它既不是软件也不是硬件,算上一个标准吧。首先是Modified Exclusive Shared Invalid (MESI) 协议中定义了4个状态:

MESI StateDefinition
Modified (M)这行数据有效,数据已被修改,和内存中的数据不一致,数据只存在于该高速缓存中
Exclusive (E)这行数据有效,数据和内存中数据一致,数据只存在于该高速缓存中
Shared (S)这行数据有效,数据和内存中数据一致,多个高速缓存有这行数据的副本
Invalid (I)这行数据无效

其次,在ARM的部分的core中,定义了第五种状态 SharedModified,这种称之为 MOESI协议. 我查询大量的Core的TRM手册,信息如下:

  • 使用MESI协议的core有:A710 A510 A78 A77 A76 A75 A72 A57 A55...

  • 使用MOESI协议的core有:A7 A15 A53

发现问题了没?并不是网上主流博客所说,arm一般都用MOESI。请记住arm主流core在使用的是MESI。所以接下来,我们也不会再介绍和学习MOESI了。

然后我们通过数据流图的方式,观看下MESI这四种状态的情况:MESI状态之间的切换:

Events:RH = Read Hit RMS = Read miss, shared RME = Read miss, exclusive WH = Write hit WM = Write miss SHR = Snoop hit on read SHI = Snoop hit on invalidate LRU = LRU replacement
Bus Transactions:Push = Write cache line back to memory Invalidate = Broadcast invalidate Read = Read cache line from memory

学到这里,我们对多核之间缓存一致性也有了大概的理解,我们也知道了MESI是干啥的了,那么我们继续抛几个问题:(1)、为什么说“多核之间的缓存一致性,遵从MESI协议,是DSU/SCU来维护”的?

其实吧,这也不是我说的,这来自ARM官方文档:

对于big.LITTLE架构,SCU是这样描述的:对于dynamIQ架构,DSU文档中这样描述的:

(2)、MESI的状态位记录在哪里的?以 ARMV9 cortex-A710为例,记录在core cache的TAG中的BIT[1:0]中,即在TAG中。对于big.LITTLE架构SCU的L2 cache、dynamIQ架构的DSU L3 cache中的TAG中,也都是有MESI比特位的,不过这一点在 armARMstrm文档都是找不到的,不过在一些的PPT上是可以看到的。


4.ACE维护的缓存一致性


ACE master是接到 CCI 缓存互联总线上的, 在 CCI Interconnect中,其实也是有一个Snoop Filter单元。ACE协议和Snoop filter单元一起来完成了ACE Master之间的缓存一致性。snoop filter的主要作用:用于记录存储在ACE中的缓存。

Snoop Filter可以在未命中的情况下响应侦听事务,并侦听适当的主控只有在命中的情况下。Snoop Filter条目通过观察来自 ACE 主节点的事务来维护以确定何时必须分配和取消分配条目。

Snoop Filter可以响应多个一致性请求,而无需向所有master广播ACE 接口。例如,如果地址不在任何缓存中,则Snoop Filter会以未命中和将请求定向到内存。如果地址在处理器缓存中,则请求被视为命中,并且指向在其缓存中包含该地址的 ACE 端口。

以下也举了一个多cluster之间缓存一致性的示例,A53 cluster读取A57 cluster缓存一致性数据。

  • (1). Cortex-A53 cluster 发出 Coherent Read Request。

  • (2). CCI-400 将请求传递Request以窥探 Cortex-A57 cluster 缓存。

  • (3). 收到请求后,Cortex-A57 cluster会检查其数据缓存的可用性并以所需信息进行响应。

  • (4). 如果请求的数据在缓存中,CCI-400 将数据从 Cortex-A57 cluster移动到 Cortex-A53 cluster,从而导致 Cortex-A53 cluster中的缓存行填充。

5.软件定义的缓存和替换策略


以上的multi cores、multi cluster、system之间的缓存策略或协议,都是由硬件决定,软件改不了。那么我们软件可以做什么呢? 其实,在软件的MMU页表的entry中的属性位中,是可以定义该页面内存的缓存策略的。如果软件定义了内存位non-cacheable或non-shareable,那么以上的"硬件维护的一致性"将不会生效。接下来对,软件定义的缓存策略做了一个小小的总结。

总结了一下shareable、cacheable属性对缓存策略的影响:


Non-cacheablewrite-back
cacheable
write-through
cacheable
non-shareable数据不会缓存到cache
(对于观察则而言,又相当于outer-shareable)
core访问该内存时,数据只缓存的到Core的 cache 中,不会缓存到其它cache中同左侧
inner-shareable数据不会缓存到cache
(对于观察则而言,又相当于outer-shareable)
core访问该内存时,数据只会缓存到core的cache和 cluster的 cache中,该地址的TAG也不会存到snoop filter中,即不会被其它ACE Master snoop同左侧
outer-shareable数据不会缓存到cache
(对于观察则而言,又相当于outer-shareable)
core访问该内存时,数据只会缓存到core的cache和 cluster的 cache中,该地址的TAG会存到snoop filter中,会被其它ACE Master snoop同左侧


6.动图示例



前置条件:dynamIQ架构、L1 Data weakly inclusive、读写的内存配置位outer-shareable/write-back cacheable
步骤:

  • (1)、core0 读取了一行数据,数据缓存到了core0的L1 Dcache、L2 cache

  • (2)、随后core0的L2 中的数据是有可能会被替换出

  • (3)、core1 也读取了该行数据,数据缓存到了core1的L1 Dcache、L2 cache、L3 cache

  • (4)、随后core1的L2 中的数据也是有可能会被替换出

  • (5)、core4 也读取了该行数据,数据缓存到了core4的L1 Dcache、L2 cache

  • (6)、随后core4的L2 中的数据也是有可能会被替换出

  • (7)、至此,core0的L1、core1的L1、cluster0的L3、core4的L1 中都缓存了该数据。core0的L2、core1的L2、core4的L2 可能缓存了该行数据

连载文章前两篇:

第一篇:深入学习Cache系列 1: 带着几个疑问,从Cache的应用场景学起

第二篇:深入学习Cache系列 2: Cache是如何工作的?概念以及工作过程



Linux阅码场 专业的Linux技术社区和Linux操作系统学习平台,内容涉及Linux内核,Linux内存管理,Linux进程管理,Linux文件系统和IO,Linux性能调优,Linux设备驱动以及Linux虚拟化和云计算等各方各面.
评论
  • 一、SAE J1939协议概述SAE J1939协议是由美国汽车工程师协会(SAE,Society of Automotive Engineers)定义的一种用于重型车辆和工业设备中的通信协议,主要应用于车辆和设备之间的实时数据交换。J1939基于CAN(Controller Area Network)总线技术,使用29bit的扩展标识符和扩展数据帧,CAN通信速率为250Kbps,用于车载电子控制单元(ECU)之间的通信和控制。小北同学在之前也对J1939协议做过扫盲科普【科普系列】SAE J
    北汇信息 2024-12-11 15:45 128浏览
  • 本文介绍瑞芯微RK3588主板/开发板Android12系统下,APK签名文件生成方法。触觉智能EVB3588开发板演示,搭载了瑞芯微RK3588芯片,该开发板是核心板加底板设计,音视频接口、通信接口等各类接口一应俱全,可帮助企业提高产品开发效率,缩短上市时间,降低成本和设计风险。工具准备下载Keytool-ImportKeyPair工具在源码:build/target/product/security/系统初始签名文件目录中,将以下三个文件拷贝出来:platform.pem;platform.
    Industio_触觉智能 2024-12-12 10:27 104浏览
  • 在智能化技术快速发展当下,图像数据的采集与处理逐渐成为自动驾驶、工业等领域的一项关键技术。高质量的图像数据采集与算法集成测试都是确保系统性能和可靠性的关键。随着技术的不断进步,对于图像数据的采集、处理和分析的需求日益增长,这不仅要求我们拥有高性能的相机硬件,还要求我们能够高效地集成和测试各种算法。我们探索了一种多源相机数据采集与算法集成测试方案,能够满足不同应用场景下对图像采集和算法测试的多样化需求,确保数据的准确性和算法的有效性。一、相机组成相机一般由镜头(Lens),图像传感器(Image
    康谋 2024-12-12 09:45 113浏览
  • 应用环境与极具挑战性的测试需求在服务器制造领域里,系统整合测试(System Integration Test;SIT)是确保产品质量和性能的关键步骤。随着服务器系统的复杂性不断提升,包括:多种硬件组件、操作系统、虚拟化平台以及各种应用程序和服务的整合,服务器制造商面临着更有挑战性的测试需求。这些挑战主要体现在以下五个方面:1. 硬件和软件的高度整合:现代服务器通常包括多个处理器、内存模块、储存设备和网络接口。这些硬件组件必须与操作系统及应用软件无缝整合。SIT测试可以帮助制造商确保这些不同组件
    百佳泰测试实验室 2024-12-12 17:45 106浏览
  • 首先在gitee上打个广告:ad5d2f3b647444a88b6f7f9555fd681f.mp4 · 丙丁先生/香河英茂工作室中国 - Gitee.com丙丁先生 (mr-bingding) - Gitee.com2024年对我来说是充满挑战和机遇的一年。在这一年里,我不仅进行了多个开发板的测评,还尝试了多种不同的项目和技术。今天,我想分享一下这一年的故事,希望能给大家带来一些启发和乐趣。 年初的时候,我开始对各种开发板进行测评。从STM32WBA55CG到瑞萨、平头哥和平海的开发板,我都
    丙丁先生 2024-12-11 20:14 92浏览
  • 铁氧体芯片是一种基于铁氧体磁性材料制成的芯片,在通信、传感器、储能等领域有着广泛的应用。铁氧体磁性材料能够通过外加磁场调控其导电性质和反射性质,因此在信号处理和传感器技术方面有着独特的优势。以下是对半导体划片机在铁氧体划切领域应用的详细阐述: 一、半导体划片机的工作原理与特点半导体划片机是一种使用刀片或通过激光等方式高精度切割被加工物的装置,是半导体后道封测中晶圆切割和WLP切割环节的关键设备。它结合了水气电、空气静压高速主轴、精密机械传动、传感器及自动化控制等先进技术,具有高精度、高
    博捷芯划片机 2024-12-12 09:16 101浏览
  • 时源芯微——RE超标整机定位与解决详细流程一、 初步测量与问题确认使用专业的电磁辐射测量设备,对整机的辐射发射进行精确测量。确认是否存在RE超标问题,并记录超标频段和幅度。二、电缆检查与处理若存在信号电缆:步骤一:拔掉所有信号电缆,仅保留电源线,再次测量整机的辐射发射。若测量合格:判定问题出在信号电缆上,可能是电缆的共模电流导致。逐一连接信号电缆,每次连接后测量,定位具体哪根电缆或接口导致超标。对问题电缆进行处理,如加共模扼流圈、滤波器,或优化电缆布局和屏蔽。重新连接所有电缆,再次测量
    时源芯微 2024-12-11 17:11 129浏览
  • 习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-11 17:58 105浏览
  • 全球智能电视时代来临这年头若是消费者想随意地从各个通路中选购电视时,不难发现目前市场上的产品都已是具有智能联网功能的智能电视了,可以宣告智能电视的普及时代已到临!Google从2021年开始大力推广Google TV(即原Android TV的升级版),其他各大品牌商也都跟进推出搭载Google TV操作系统的机种,除了Google TV外,LG、Samsung、Panasonic等大厂牌也开发出自家的智能电视平台,可以看出各家业者都一致地看好这块大饼。智能电视的Wi-Fi连线怎么消失了?智能电
    百佳泰测试实验室 2024-12-12 17:33 107浏览
  • RK3506 是瑞芯微推出的MPU产品,芯片制程为22nm,定位于轻量级、低成本解决方案。该MPU具有低功耗、外设接口丰富、实时性高的特点,适合用多种工商业场景。本文将基于RK3506的设计特点,为大家分析其应用场景。RK3506核心板主要分为三个型号,各型号间的区别如下图:​图 1  RK3506核心板处理器型号场景1:显示HMIRK3506核心板显示接口支持RGB、MIPI、QSPI输出,且支持2D图形加速,轻松运行QT、LVGL等GUI,最快3S内开
    万象奥科 2024-12-11 15:42 109浏览
  • 习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-12 10:13 70浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦