ARMv8-缓存一致性(cache coherency)解决方案:MOESI protocol

这篇具有很好参考价值的文章主要介绍了ARMv8-缓存一致性(cache coherency)解决方案:MOESI protocol。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一,MOESI状态释义

二,MOESI状态转换   

1, Invalid after Reset

2, Invalid => Exclusive

3, Exclusive => Modified

 4.1, Modified => Owned, Invalid => Shared

 4.2 Modified => Invalid , Invalid => Modified

5,Owned => Invalid, Shared => Invalid, Shared => Modified

 6,Clean 和Invalidate操作对MOESI状态的影响

6.1 对 Owned状态进行clean & Invalidate

6.1 对 Shared状态进行clean & Invalidate 

三,注意事项


一,MOESI状态释义

ARMv8架构使用 MOESI 协议来维护在多个core之间的数据一致性,MOESI 协议描述了 L1 Data Cache中的一个共享的cache line的状态可以是:

  • M,Modified, Unique Dirty, 只存在于当前cache中(unique),并且该cache line上的数据与下一级存储单元中的数据不同(dirty)。换言之,cache line中最新的数据位于当前cache,其他cache中没有备份 ,cache line中的内容与主存中的不一致。
  • O,Owned,Shared Dirty,描述一个cache line为dirty,并且可能存在于多个cache中(不止一个)。一个 Owned 状态的cache line保存着 最新的 而且 正确的(new and correct) 的数据。只有一个core的cache 可以将数据保存为 Owned 状态,其他core 为 shared 状态。
  • E,Exclusive, Unique Clean,数据只存在于当前cache line中,并且为clean的。cache中cache line中的数据于主存中的一致,并且其他core中的cache没有该地址的数据 备份,只存在一个cache中。
  • S,Shared, Shared ,cache line中的data不一定与主存中的一致,与 Owned状态的cache line相对应,将Owned里的数据复制到shared的cache line中,因此 shared cache line中的数据也是最新的。
  • I,Invalid,无效的数据。

Data Cache Unit (DCU)会将cache line的 MOESI状态信息保存在tag RAM和 dirty RAM中。

二,MOESI状态转换   

下图为MOESI协议的状态转换图。

moesi协议,ARM,ARM Cache,缓存,arm,MOESI,缓存一致性

接下来,本文将结合一个状态转换用例来解释具体的MOESI状态转换。

1, Invalid after Reset

 假设当前系统有四个core,每个core有自己独立的data cache,在系统上电后,所有core的cache line都为 invalid状态:

moesi协议,ARM,ARM Cache,缓存,arm,MOESI,缓存一致性

2, Invalid => Exclusive

然后core0 试图读取 内存中地址为 0x44013F00上的数据,core0 的cache中,与该地址相关的cache line的状态将由Invalid 转为 VE,其中V 为Valid,表明该cacheline中的数据有效。E为Exclusive, 表明该数据只在core0中。

moesi协议,ARM,ARM Cache,缓存,arm,MOESI,缓存一致性

3, Exclusive => Modified

 之后,core0试图对该地址写入一个新值,该cache line的状态将由VE会变成VDM,其中V为,valid,D为Dirty,表示数据为脏,当前cache line中的数据与主存中的不一致。M 为Modified,表明该cache line中的数据是Unique且Dirty的。moesi协议,ARM,ARM Cache,缓存,arm,MOESI,缓存一致性

 4.1, Modified => Owned, Invalid => Shared

接下来,让core 1,core2,core3对该地址进行读取操作,core0的状态将会从VDM 转为 VDO,其他三个core的cache line将由Invalid 转为 VS, 其中O表示Owned, S表示Shared,O状态与S状态为对应关系。此外,从下图中,也可知,core1,core2,core3读取到的数据是core0 cache中的备份,而不是真正内存中的值。

moesi协议,ARM,ARM Cache,缓存,arm,MOESI,缓存一致性

 4.2 Modified => Invalid , Invalid => Modified

如果让core1写入一个新数据,core0中的数据没有被写回DDR中,发生了data corruption,core0中之前保存的数据消失了,cache line的状态变为invalid。而core1的状态将由Invalid 变成Modified,同时也是dirty的。

moesi协议,ARM,ARM Cache,缓存,arm,MOESI,缓存一致性

5,Owned => Invalid, Shared => Invalid, Shared => Modified

接4.1的步骤, 如果core1 试图对该地址写入一个新值,core0的状态将由Owned 变为 Invalid,core2和core3中该cache line的状态将会由Shared 变为 Invalid,而core1的状态将由Shared 变为 Modified(VDM)。此外,由于使用的是write back策略,所以当前的写入操作仅写入到了cache中,主存中的内容仍未改变。

在本示例中,出现了两个core先后对同一个内存地址进行读写操作,  core0写入的值(蓝色)由于没有被写回到主存中,之后core1又对该地址写入一个新值(绿色),就把core0写入的值给覆盖了。 

moesi协议,ARM,ARM Cache,缓存,arm,MOESI,缓存一致性

 6,Clean 和Invalidate操作对MOESI状态的影响

6.1 对 Owned状态进行clean & Invalidate

如下图所示,core0的相关cache line之前处于 VDO状态,对其进行clean&invalidate操作后,core0的状态变为Invalid,其他三个core的状态依旧为 VS,并且core0 cache中的数据已写回到主存中。

moesi协议,ARM,ARM Cache,缓存,arm,MOESI,缓存一致性

6.1 对 Shared状态进行clean & Invalidate 

如下图所示,core1的相关cache line之前处于 VS状态,对其进行clean&invalidate操作后,core1的状态变为Invalid,其他l两个core的状态依旧为 VS,并且core1 cache中的数据已写回到主存中。但是core0的相关cache line依旧处于 VDO状态。此时主存中的data和cache 中的data已同步,但是core0的cache line仍为dirty 状态,这是由于Clean & invalidate操作是软件主动进行的,干扰了硬件层上数据同步的正常操作流程导致的。

moesi协议,ARM,ARM Cache,缓存,arm,MOESI,缓存一致性

三, 练习题

以下是Berkeley大学的一道练习题,供大家参考:https://inst.eecs.berkeley.edu/~cs61c/su13/disc/Disc10Sol.pdf

moesi协议,ARM,ARM Cache,缓存,arm,MOESI,缓存一致性

 With the MOESI concurrency protocol implemented, accesses to cache accesses appear serializiable.   This means that the result of the parallel cache accesses appear the same as if there were done in serial from one processor in some ordering.

Quiz 1: Consider the following access pattern on a two‐processor system with a direct‐mapped, write‐back cache with one cache block and a two cache block memory.  Assume the MOESI protocol is used, with write‐back caches, write‐allocate, and invalidation of other caches on write (instead of updating the value in the other caches).   moesi协议,ARM,ARM Cache,缓存,arm,MOESI,缓存一致性

四,注意事项

硬件层上数据一致性的维护 需要先使能CPU扩展控制寄存器(CPU Extended Control Register) 的SMPEN bit,该寄存器提供了一些额外的处理器配置和控制选项。其中SMPEN位:

CPUECTLR[6]:SMPEN,在当前cluster中,使能硬件对在多个core中的数据一致性管理,为0时,将会禁止在多个core中的数据一致性维护功能,这也是 reset value。为1时,使能数据一致性功能。所以即便是在只有一个core的系统中,也建议在enable 缓存前先将SMPEN置为1,否则缓存里的数据将不会与其他core同步,将可能发生data corruption。

参考文章:

DDI0500J_cortex_a53_trm.pdf 

https://inst.eecs.berkeley.edu/~cs61c/su13/disc/Disc10Sol.pdf文章来源地址https://www.toymoban.com/news/detail-715826.html

到了这里,关于ARMv8-缓存一致性(cache coherency)解决方案:MOESI protocol的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 博客摘录「 Redis( 缓存篇 ==> 超详细的缓存介绍与数据一致性解决方案 &; 代码实现」

    Redis 旁路缓存 由于高并发原因,先更新数据库和先更新缓存策略都会因为延迟时间而导致数据不一致问题。 两种策略 先删除缓存,再更新数据库; 先更新数据库,再删除缓存。 因为缓存的写入通常要远远快于数据库的写入 ,所以先更新数据库再删缓存,删完缓存,下次访

    2024年02月15日
    浏览(40)
  • Redis生产实战-热key、大key解决方案、数据库与缓存最终一致性解决方案

    热 key 问题就是某一瞬间可能某条内容特别火爆,大量的请求去访问这个数据,那么这样的 key 就是热 key,往往这样的 key 也是存储在了一个 redis 节点中,对该节点压力很大 那么对于热 key 的处理就是通过热 key 探测系统对热 key 进行计数,一旦发现了热 key,就将热 key 在 jv

    2024年02月05日
    浏览(52)
  • gem5学习(22):经典内存系统的一致性——Classic Memory System coherence

    官网教程:gem5: Classic memory system coherence M5 2.0b4引入了一个经过大量重写和简化的缓存模型,包括一个新的一致性协议。一致性协议是用于确保多个缓存之间的数据一致性的规则和机制。这意味着在多个缓存中存储的数据将保持一致,以避免数据不一致的问题。 (在此之前的

    2024年02月19日
    浏览(49)
  • 主题模型LDA教程:一致性得分coherence score方法对比(umass、c_v、uci)

    主题建模 主题建模是一种机器学习和自然语言处理技术,用于确定文档中存在的主题。它能够确定单词或短语属于某个主题的概率,并根据它们的相似度或接近度对文档进行聚类。它通过分析文档中单词和短语的频率来实现这一目的。 主题建模的一些应用还包括文本摘要、

    2024年02月04日
    浏览(368)
  • Cache性能,多核,一致性

    1.cache size 2.block size 3.组相连度,4.替换策略 目标 1.减少miss rate(可以用一个指针指向不常用的数据结构)   2.减少miss penalty 3.减少hit cost   集中   优点 缺点 资源竞争,不平等。可能一个core的用的cache被另一个core给替换了,造成cache miss。 可能两个core看到的数据不同  一种选择

    2024年02月06日
    浏览(40)
  • AMBA ACE cache一致性协议(二)

    以下标绿色的为ACE新加信号。   ACE通道使用举例:   1)从Shareable locations,执行load操作 情景:master本地无此cacheline,但其他masetr的cache中有此cacheline(shareable) A。Master 在AR通道发起一个 read transaction  B。 interconnect确定(知道)其他的master caches谁有这个AR地址的数据。通过

    2024年02月08日
    浏览(40)
  • Redis 原理缓存过期、一致性hash、雪崩、穿透、并发、布隆、缓存更新策略、缓存数据库一致性

    redis的过期策略可以通过配置文件进行配置 redis会把设置了过期时间的key放在单独的字典中,定时遍历来删除到期的key。 1).每100ms从过期字典中 随机挑选20个,把其中过期的key删除; 2).如果过期的key占比超过1/4,重复步骤1 为了保证不会循环过度,导致卡顿,扫描时间上限

    2024年02月08日
    浏览(58)
  • 【Redis】缓存一致性

    读缓存 双检加锁 策略 采用 双检加锁 策略 多个线程同时去查询数据库的这条数据,那么我们可以在第一个查询数据的请求上使用一个 互斥锁来锁住它。 其他的线程走到这一步拿不到锁就等着,等第一个线程查询到了数据,然后做缓存。 后面的线程进来发现已经有缓存了,

    2023年04月24日
    浏览(60)
  • 缓存数据一致性探究

    缓存是一种较低成本提升系统性能的方式,自它面世第一天起就备受广大开发者的喜爱。然而正如《人月神话》中的那句经典的“没有银弹”中所说,软件工程的设计没有银弹。 就像每一次发布上线修复问题的同时,也极易引入新的问题,自缓存诞生的第一天起, 缓存与数

    2024年02月16日
    浏览(34)
  • 缓存一致性设计思路

    Spring注解使用,控制Redis缓存更新 缓存一致性问题是如何产生的? 双更新模式:操作不合理,导致数据一致性问题 “后删缓存”,能解决多数不一致 大厂高并发,“后删缓存”依旧不一致 如何解决高并发的不一致问题?延迟双删与闪电缓存 如何解决缓存击穿?读操作互斥

    2023年04月17日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包