[5] Cache一致性
cache一致性问题和解决方法
cache一致性问题和解决方法作者辽宁工程技术大学摘要高速缓冲存储器一致性问题是指高速缓冲存储器中的数据必须与内存中的数据保持同步(一致) 。
多核处理器将一个以上的计算内核集成在一个处理器中,通过多个核心的并行计算技术,增强处理器计算性能。
单片多处理器结构(CMP—ChipMultiprocessor)又是该领域中备受关注的问题。
本文简要论述了CMP的多级Cache存储结构,多级结构引起了Cache一致性问题,一致性协议的选取对CMP系统的性能有重要影响。
使用何种Cache一致性模型以及它的设计方案是本文重点研究的内容。
关键词:CMP;Cache一致性;存储器;协议;替换策略Cache consistency problem and solving methodAbstract Cache consistency refers to the data in the cache memory must be synchronized with the data in memory (the same).Multi·core processor was the integration of multiple computing cores on a single processoL which improved processor computing ability through the parallelcomputing Technology of multi-coreprocessors.Single chip multi-processorarchitecture(CMP-ChipMulfiprocessor)was hot spots in this area.The CMPmulti-level Cache storage structure was briefly discussed in this paper,which led to Cache coherence problem,the selection of consistency protocol had a major impact on the performance of the CMP system.The selection of model of theCache Coherence and methods of its design will have a significant impact ofoverall design and development of CMPKey words:CMP Cache; consistency; memory; protocol; replacement strategy1引言在过去的二十年中,计算机处理器设计工艺和处理器体系结构发展迅速,计算机也能够完成所赋予它的大部分任务。
cache一致性协议实现的基本方法
面已经谈到,随着处理机数目N 的增大、存储器容量的增加,所 需要目录的容量以N2 的数量级增加。在目录本身就很庞大的情 况下,还需要增加一位C/D 位,以指示该复本是否允许写。所以 这种目录结构所需要的空间较为庞大。针对这个问题,提出了 有限目录的方法。 2)有限目录 有限目录的基本思想是要解决全映射目录空间过大的问题。 其采用的手段就是对任意一个数据块在高速缓存中同时存在的 复本的数目加以一定的限制,这是基于处理机使用的局部性, 即多机系统解决问题时,短时间内可能只集中使用其中几台机 器,所以某一个数据块的复本只有部分处理机需要,因此只需 要记录这几台机器,而不需要记录所有处理机,目录所需空间 大大减少:记录处理机号码的所需空间呈Log2N 增长,总的空间 需求为O(N XLog2N)。 3)链式目录 链式目录是采用目录指针链来跟踪共享可写数据的复本;链 表既可以采用单链表,又可以采用双链表。对于共享数据块的 复本数没有限制。所占用的空间和可扩展性与有限目录近似。
(3)Write- inv:远程高速缓存在写命中时在总线上广播一个无 效命令 (4)Read-inv:远程高速缓存在写缺失时在总线上广播一个无 效命令 (5)Read-blk:从另外一个高速缓存中读出一份有效复本。 这两条属于一致性命令 3)写操作可能遇到的几种情况 (1)如果C1 为VALID,写C1 时,则写命中(Write hit) a. 如果内存单元所在的块在高速缓存中,则可以写高速缓存 命中。 b. 如果内存单元所在的块不在高速缓存中,则写缺失,将内 存单元所在块读入高速缓存,再进行写操作发P-Write 修改C1 内 容,修改内存,发Write-Inv 给所有高速缓存,使它们的状态变 为无效。同时使本地的高速缓存中数据块的状态变Reserved。 (2)如果C1 为Reserved,对C1 进行写操作时,则写命中。发PWrite 命令修改C1内容,不修改内存中的复本,C1 状态变为 Dirty (3)如果C1 为Dirty,写C1 时则写命中。发出P-Write 命令修
cache工作原理
cache工作原理一、引言Cache是计算机系统中的一种高速缓存存储器,用于提高系统的访问速度。
它通过存储最常用的数据和指令,以便在需要时能够快速访问。
本文将详细介绍Cache的工作原理,包括Cache的层次结构、替换策略、写回策略以及Cache一致性等。
二、Cache的层次结构Cache通常被组织成多级层次结构,以提供更高的访问速度。
常见的层次结构包括L1 Cache、L2 Cache和L3 Cache。
L1 Cache位于处理器核心内部,是最接近处理器的一级缓存,速度最快但容量较小。
L2 Cache位于处理器核心和主存之间,速度较快且容量较大。
L3 Cache则位于L2 Cache和主存之间,容量更大但速度相对较慢。
三、Cache的工作原理1. 缓存命中当处理器需要访问内存中的数据或者指令时,首先会在Cache中进行查找。
如果所需数据或者指令在Cache中存在,即发生了缓存命中,处理器可以直接从Cache中读取数据或者指令,避免了访问主存的延迟。
2. 缓存不命中如果所需数据或者指令不在Cache中,即发生了缓存不命中,处理器需要从主存中读取数据或者指令。
同时,处理器还会将主存中的一部份数据或者指令加载到Cache中,以便下次访问时能够直接命中。
3. 替换策略当Cache已满且需要加载新的数据或者指令时,就需要进行替换。
常见的替换策略有最近至少使用(LRU)、先进先出(FIFO)和随机替换等。
LRU策略会替换最近至少被访问的数据或者指令,而FIFO策略会替换最早被加载到Cache中的数据或者指令。
4. 写回策略当处理器对Cache中的数据进行修改时,有两种写回策略可供选择:写直达(Write-through)和写回(Write-back)。
写直达策略会立即将修改的数据写入主存,保证数据的一致性,但会增加总线流量和延迟。
写回策略则将修改的数据暂时保存在Cache中,惟独在被替换出Cache或者需要被其他处理器访问时才写回主存。
多核处理器及其Cache一致性机制
由于 指令 级 并 行需 要 的硬 件 资源 最 少 , 处理 器 微体 系结 构 中 , 早 在 最 出现 的并 行技 术就 是指 令级 并行 , 而实 现指 令级 并行 通 常采用 的是 V I ( LW 超 长指令 字 ) 技术 和S pr saa( 标量 ) u e— clr超 技术 。 V uw : 处理 器在 处理 一 个 长指令 字 中赋 予编 译程 序 控制 所有 功能 单元
多 核处 理 器 结 构不 仅 有 性 能潜 力 大 、 成度 高 、 集 并行 度 高 、 结构 简 单
指令 , 以获 得 并 行性 。 2线程 级 并行 .
和设计验证方便等诸多优势 , 而且它还能继承传统单核处理器研究 中的某些 成果, 例如 同时 多线 程 、 低 功 耗等 。 减压 但多 核 处理 器 毕竟 是 一种 新 的结 构给多 核处理器 的未来提出了挑战。
1前 言 .
自从计算机诞生 以来 , 推动处理器高速发展的动力主要来源于两个方
面 : 电子 技术 的 巨大 进 步 和处 理 器体 系 结 构 的演 化和 发 展 , 微 而这 两 个 动力 则促成 了多 核处理 器 技 术 的 出现和 发展 。 多 内 核是 在 一 个 处理 器 中集 成两 个 或 多 个 完整 计 算 引擎 , 内核 。 即 而 多核处 理器 则是 将 多个 功能 完全 的 核心 集成 在 同一个 芯 片上 , 个芯 片作 为 整
的能力 , 使得被编译的程序能够精确地调度在何处执行每个操作、 每个寄存 器存储器读写和每个转移操作 。 S p r saa : u e — clr 由于各个指令之间可能用到不同的数据单元, 所以通过 次发射多个指令来获取指令级的并行。 此技术 , 主要是依靠运行时的复杂 硬件 逻 辑 , 打乱 指令 的执 行 顺序 , 发射 阶段 同时 发射 多个 使 用不 同资 源 的 在
Cache与主存一致性
Cache与主存间数据的一致性计算机存储系统中,高速缓冲存储器系统的引入虽然为计算机系统处理数据的速度带来了显著地提高,但是随之而来的Cache(高速缓存)与主存一致性问题也是日益凸显出来。
存储器中的一致性问题,是伴随着存储器结构的概念而提出的,又一直是困扰着计算机设计者的一个重要问题,也是很多从事计算机体系结构研究的人们所共同面对的一个热门研究课题。
特别是近年来出现的多处理系统,超并行机系统,超大规模计算机系统等采用DSM (Distributed Shared Memory)-分布式共享存储器技术的大型系统中,都采用了多级Cache 的存储器层次结构。
在Cache的数据一致性问题上,就更显突出了。
Cachc的操作与存储器一样具有读/写两种模式,其中读操作主要局限在不命中时更新Cache内容,只影响存储系统工作速度。
写操作不仅工作时间比读操作长,而且更新主存内容,直接影响机器性能。
写操作是直接导致数据一致性问题产生的原因。
在一个系统中,同一个数据的多个拷贝可以同时存在,如果一个拷贝改变了而其它的没变,那么两组不同的数据便与主存的同一地址有关。
Cache必须包含一个更新系统以防止老数据(陈旧数据)被使用,即解决一致性问题。
分析产生数据一致性问题的原因主要有三个:1> 同样一个数据可能既存于Cache中,也存于主存中,这样可能前者己更新,后者未更新,造成数据丢失。
2> 在有DMA系统或多处理器系统中,有多个部件可以访问主存,这时可能其中有些部件是直接访问主存,也可能每个DMA部件和每个处理器配一个Cache,这样主存的一块区域可能对应于多个Cache中的各1个块区,产生主存中的数据被某个总线主控部件更新过,而某个Cache中的内容未更新,造成Cache中数据过时。
3> 当主存中同时有多道程序运行时,Cache中均有相应的数据副本与每道程序相对应;对于共享数据,每道程序都有各自的Cache数据与主存数据相一致。
缓存一致性解决方案
缓存一致性解决方案缓存一致性是保持应用程序的数据一致性的重要前提。
缓存一致性是缓存技术的一个关键,可以显著提高系统的性能,提高系统的效率。
缓存一致性问题往往在大多数分布式系统中发生,因为分布式系统中的数据可能被多个程序、进程或服务并发访问和更新。
如果系统中的多个节点未能正确地同步数据,则不能保证系统中的数据有效性,从而导致系统出现不一致的问题。
针对缓存一致性问题,解决的方法有很多,如引入消息中间件服务来处理,使用数据同步机制(例如基于主从模式的rsync)进行数据同步,使用分布式缓存解决方案,如Redis,Memcached,Hazelcast 等,以及基于强一致性和弱一致性算法等。
首先,基于强一致性和弱一致性算法可以用来解决缓存一致性问题。
强一致性算法采用使用协调者组织参与者执行操作的方式,与参与的其他进程或服务协议协商,以达到一致性,但它的处理速度比较慢;而弱一致性算法则虽然不需要协议协商,但只要数据被更新,就可能导致数据不一致。
其次,多个节点可以使用数据同步机制来保证缓存一致性。
数据同步机制中,一般采用主从模式,当主节点数据更新时,会将数据同步到从节点,从而保证数据在多个节点间一致。
最后,一种解决缓存一致性的方法是使用分布式缓存解决方案,比如Redis,Memcached,Hazelcast等。
这些分布式缓存技术采用了节点群集技术,可以将多个节点组织成一个群集,当系统中一个节点的数据发生变化时,会将变化同步到其他节点,从而保证多个节点之间的数据一致性。
总之,缓存一致性是非常重要的一个问题,针对这个问题,可以采用多种方法来解决,如采用基于强一致性和弱一致性算法,使用数据同步机制、采用分布式缓存解决方案等。
这些方法的应用可以实现在系统中多个节点的数据同步,从而达到保证系统数据的一致性,提高系统的性能和效率。
浅谈并行系统中cache一致性问题和解决方法
浅谈并行系统中cache一致性问题和解决方法班级:0920 姓名:储俊学号:09419022摘要:高速缓冲存储器一致性问题是指高速缓冲存储器中的数据必须与内存中的数据保持同步(一致) 这个问题常发生在CPU内核与另一个设备异步访问内存时。
关键词:cache一致性,监听CACHE协议,基于CACHE目录的协议1.Cache一致性问题的发现本项目的目标板为:处理器采用ARM芯片S3C44B0X,存储器采用2片Flash 和1片SDRAM,在调试的时候输入采用键盘,输出采用显示器,用RS232串口实现通信。
在项目的开发过程中,经软件仿真调试成功的程序,烧入目标板后,程序却发生异常中止。
通过读存储器的内容发现,程序不能正常运行在目标板上,是因为存储器中写入的数据与程序编译生成的数据不一致,总是出现一些错误字节。
经过一段时间的调试发现,只要在程序中禁止Cache的使用,存储器中写入的数据将不再发生错误,程序可以正常运行,但速度明显减慢。
经过分析,认为问题是由于Cache数据与主存数据的不一致性造成的。
Cache数据与主存数据不一致是指:在采用Cache的系统中,同样一个数据可能既存在于Cache中,也存在于主存中,两者数据相同则具有一致性,数据不相同就叫做不一致性。
如果不能保证数据的一致性,那么,后续程序的运行就要出现问题2.分析Cache的一致性问题要解释Cache的一致性问题,首先要了解Cache的工作模式。
Cache的工作模式有两种:写直达模式(write-through)和写回模式(copyback)。
写直达模式是,每当CPU把数据写到Cache中时,Cache控制器会立即把数据写入主存对应位置。
所以,主存随时跟踪Cache的最新版本,从而也就不会有主存将新数据丢失这样的问题。
此方法的优点是简单,缺点是每次Cache内容有更新,就要对主存进行写入操作,这样会造成总线活动频繁。
S3C44B0X 中的Cache就是采用的写直达模式(write-through)。
多核处理器cache一致性技术综述
多核处理器cache一致性技术综述摘要:本文介绍了实现多核处理器cache一致性的基本实现技术,并分析了其存在的问题。
根据存在的问题,介绍了几种最新的解决方案。
关键词:cache 一致性监听协议目录协议性能能耗1 基本实现技术:实现cache一致性的关键在于跟踪所有共享数据块的状态。
目前广泛采用的有以下2种协议,它们分别使用不同的技术跟踪共享数据:1.监听协议( Snooping)处理器在私有的缓存中保存共享数据的复本。
同时处理器对总线进行监听,如果总线上的请求与自己相关,则进行处理,否则忽略总线请求信号。
2.目录式(Directory based)使用目录来存放各节点cache中共享数据的信息,把cache一致性请求只发给存放有相应数据块的节点,从而支持cache的一致性。
下面分别就监听协议和目录协议做简单的介绍:1.1 监听协议监听协议通过总线监听机制实现cache和共享内存之间的数据一致性。
因为其可以通过内存的总线来查询cache的状态。
所以监听协议是目前多核处理器主要采用的一致性技术。
监听协议有两种。
一种称为写无效协议(write invalidate protocol) ,它在处理器写数据块之前通过总线广播使其它该数据的共享复本(主要存储在其它处理器的私有缓存中)变为无效,以保证该处理器能独占访问数据块,实现一致性。
另一种称为写更新(write update) ,它在处理器写入数据块时更新该数据块所有的副本。
因为在基于总线的多核处理器中总线和内存带宽是最紧张的资源,而写无效协议不会给总线和内存带来太大的压力,所以目前处理器实现主要都是应用写无效协议。
读请求:如果处理器在私有缓存中找到数据块,则读取数据块。
如果没有找到数据块,它向总线广播读缺失请求。
其它处理器监听到读缺失请求,则检查对应地址数据块状态:无效状态下,向总线发读缺失,总线向内存请求数据块;共享状态下,直接把数据发送给请求处理器;独占状态下,远端处理器节点把数据回写,状态改为共享,并将数据块发送给请求处理器。
Cache一致性问题分析
二、并行系统中的高速缓存一致性问题和解决 方法
2-1、并行系统的特点;
2-2、Cache一致性问题的发现 ;
2-3、分析Cache的一致性问题 ;
2-4、产生高速缓存( Cache )不一致的三个原因 ;
2-5、解决高速缓特点
与单机系统相比,并行系统具有自身的显著特点: (1)具有多个 CPU,同一时刻可以有多个进程同时 进行; (2)各个处理机具有共享内存或私有局部内存,或 两者兼备; (3)各个处理机具有本地高速缓存; (4)各个处理机之间通过共享总线或交换网络进行 通讯,交换数据; 所以除了主存与高速缓存之间可能产生不一致的情况 之外,高速缓存与高速缓存之间也可能存在不一致的情况。
分段 LRU算法基于次数的替换算法 LFU是选择缓存中被 访问次数最少的块为被替换块的替换算法。这种算法中,要为 每个缓存块维护一个计数器,记录该块的被访问次数。在替换 时,选择被访问次数最少的块进行替换。这种算法有两个缺点: 第一,维护和利用访问次数比访问时间困难的多;第二,当某 些短期内被访问多次,却在以后不再被访问的块会长期占据缓 存,降低缓存的利用率。为了解决这些问题,LFU算法在实际 应用中要进行适当的改进。 以上介绍的替换算法在替换时都只是利用缓存块被访问的 状态信息(如访问时间、访、问次数等),没有考虑这些访问 可能来自不同的程序,而且这些不同的应用程序可能具有不同 的数据访问特征,因此这些算法存在如下几个问题: 1、某些应用程序的访问局部性比较差,如果缓存这些访问 应用访问的块,会将其它应用的具有较高缓存价值的块替换掉, 降低缓存的有效性。例如,一些大型文件系统的顺序访问可能 会将缓存中所有的块都替换出缓存,而代以将来可能不会
1-4、高速缓存的组成结构
高速缓冲存储器是存在于主存与CPU之间的一级存 储器, 由静态存储芯片(SRAM)组成,容量比较小但速 度比主存高得多, 接近于CPU的速度。 主要由三大部分组成: Cache存储体:存放由主存调入的指令与数据块。 地址转换部件:建立目录表以实现主存地址到缓存 地址的转换。 替换部件:在缓存已满时按一定策略进行数据块替 换,并修改地址转换部件。
缓存一致性问题(CacheCoherency)
缓存⼀致性问题(CacheCoherency)引⾔ 现在越来越多的系统都会⽤到缓存,只要使⽤缓存就可能涉及到缓存数据与数据库数据之间双写双存储,只要双写就会遇到数据⼀致性的问题,除⾮只有⼀个数据库服务器,数据⼀致性问题也就不存在了。
缓存的作⽤ 1. 临时存储,⽤于提⾼数据查询速度。
⽐如CPU的L1⾼速缓存和L2⾼速缓存,缓存主要是为CPU和内存提供⼀个⾼速的数据缓存区域。
CPU读取数据的百顺序是:先在缓存中寻找,找到后就直接进⾏读取,如果未能找到,才从主内存中进⾏读取。
2. 降低系统反应时间,提⾼并发能⼒。
数据⼀致性的问题的原因 主要是由于两次操作时间不同步导致的数据⼀致性问题。
⽐如Mysql主从复制到时候,master数据在同步slave给数据到过程中会有数据不⼀致的时刻。
如何保证缓存与数据库双写⼀致性 ⼀. 缓存与数据库读写模式(Cache aside pattern) 分两种情况,读数据和写数据(更新) 1. 读数据:读数据时候先读取缓存,如果缓存没有(miss hit)就读取数据库,然后在从数据库中取出数据并添加到缓存中,最后在返回数据给客户端。
2. 更新数据: 先更新数据库数据在删除缓存(也有⼈认为先删除缓存在更新数据库)。
那么为什么在更新数据库同时在删除缓存呢? 这⾥主要考虑⼏个点: 1)缓存懒加载。
有些缓存出来的数据是应⽤在⽐较复杂的场景中,这些缓存存在的时候,不是简单的从数据库取出数据,⽐如更新了数据表中某个字段的值,有⼀条缓存数据值是这个字段的值与另外多个表中字段的值进⾏计算后的结果,当每次该字段被更新的时候都要与其他表多个字段去运算然后得到这个缓存数据,所以这样场景下更新缓存的代价很⾼。
所以要不要实时更新缓存视具体情况来定,⽐如这个字段⼀分钟内修改60次,那么跟该字段相关缓存也跟着要计算60次,但是该缓存⼀分钟内只被访问1次,当缓存真正被访问的时候在进⾏计算,这⼀分钟内缓存只计算了⼀次,开销就⼤幅减少。
缓存一致性协议
缓存一致性协议缓存一致性协议是指在分布式系统中,为了保证数据在不同节点上的一致性而采取的一种协议。
在分布式系统中,数据通常会被缓存在不同的节点上,为了提高数据访问的速度和效率。
然而,由于数据的复制和缓存,可能会导致数据的一致性问题,即不同节点上的数据可能不一致。
因此,需要采取一定的协议来保证数据的一致性。
缓存一致性协议的核心思想是通过一定的机制来保证数据在不同节点上的一致性。
常见的缓存一致性协议包括写回策略、写透传策略和写失效策略等。
这些策略在不同的场景下有不同的应用,可以有效地保证数据的一致性。
在实际的系统设计中,缓存一致性协议扮演着非常重要的角色。
它可以有效地提高系统的性能和可靠性,同时也可以减少数据一致性引发的问题。
因此,了解和应用缓存一致性协议对于系统设计和优化是非常重要的。
在使用缓存一致性协议时,需要考虑一些重要的因素。
首先,需要考虑数据的访问模式和数据的一致性要求。
不同的数据访问模式和一致性要求可能需要采用不同的缓存一致性协议。
其次,需要考虑系统的性能和可靠性。
不同的缓存一致性协议对系统的性能和可靠性会有不同的影响,需要根据实际情况进行权衡和选择。
另外,还需要考虑系统的扩展性和容错性。
在分布式系统中,系统的扩展性和容错性是非常重要的,需要考虑缓存一致性协议对系统扩展性和容错性的影响,以确保系统能够稳定可靠地运行。
总的来说,缓存一致性协议是分布式系统设计中非常重要的一部分。
它可以有效地提高系统的性能和可靠性,同时也可以减少数据一致性引发的问题。
在实际的系统设计和优化中,需要根据实际情况选择合适的缓存一致性协议,并考虑其对系统性能、可靠性、扩展性和容错性的影响,以确保系统能够稳定可靠地运行。
高速缓冲存储器一致性
感谢观看
I(Invalid):这行数据无效。
在该协议的作用下,虽然各cache控制器随时都在监听系统总线,但能监听到的只有读未命中、写未命中以 及共享行写命中三种情况。读监听命中的有效行都要进入S态并发出监听命中指示,但M态行要抢先写回主存;写 监听命中的有效行都要进入I态,但收到RWITM时的M态行要抢先写回主存。总之监控逻辑并不复杂,增添的系统 总线传输开销也不大,但MESI协议却有力地保证了主存块脏拷贝在多cache中的一致性,并能及时写回,保证 cache主存存取的正确性 。
在MESI协议中,每个Cache line有4个状态,可用2个bit表示,它们分别是:
M(Modified):这行数据有效,数据被修改了,和内存中的数据不一致,数据只存在于本Cache中。
E(Exclusive):这行数据有效,数据和内存中的数据一致,数据只存在于本Cache中。
S(Shared):这行数据有效,数据和内存中的数据一致,数据存在于很多Cache中。
一个完整的一致性模型包括高速缓存一致性及存储同一性两个方面,且这两个是互补的:高速缓存一致性定 义了对同一个存储进行的读写操作行为,而存储同一性模型定义了访问所有存储的读写行为。在共享存储空间中, 多个进程对存储的不同单元做并发的读写操作,每个进程都会看到一个这些操作被完成的序。
Cache一致性的基本概念
Cache一致性的基本概念PCI设备对可Cache的存储器空间进行DMA读写的操作的过程较为复杂,有关Cache一致性的话题可以独立成书。
而不同的处理器系统使用的Cache Memory的层次结构和访问机制有较大的差异,这部分内容也是现代处理器系统设计的重中之重。
本节仅介绍在Cache Memory系统中与PCI设备进行DMA操作相关的,一些最为基础的概念。
在多数处理器系统中,使用了以下概念描述Cache一致性的实现过程。
1 Cache一致性协议多数SMP处理器系统使用了MESI协议处理多个处理器之间的Cache一致性。
该协议也被称为Illinois protocol,MESI协议在SMP 处理器系统中得到了广泛的应用。
MESI协议使用四个状态位描述每一个Cache行。
•M(Modified)位。
M 位为1 时表示当前Cache行中包含的数据与存储器中的数据不一致,而且它仅在本CPU的Cache 中有效,不在其他CPU的Cache 中存在拷贝,在这个Cache行的数据是当前处理器系统中最新的数据拷贝。
当CPU对这个Cache行进行替换操作时,必然会引发系统总线的写周期,将Cache行中数据与内存中的数据同步。
•E(Exclusive)位。
E 位为1 时表示当前Cache行中包含的数据有效,而且该数据仅在当前CPU的Cache中有效,而不在其他CPU的Cache中存在拷贝。
在该Cache行中的数据是当前处理器系统中最新的数据拷贝,而且与存储器中的数据一致。
•S(Shared)位。
S 位为1 表示Cache行中包含的数据有效,而且在当前CPU和至少在其他一个CPU中具有副本。
在该Cache行中的数据是当前处理器系统中最新的数据拷贝,而且与存储器中的数据一致。
•I(Invalid)位。
I 位为1 表示当前Cache行中没有有效数据或者该Cache行没有使能。
MESI协议在进行Cache行替换时,将优先使用I位为1的Cache行。
计算机组成原理cache论文缓存一致性的解决方案大学论文
缓存一致性的解决方案摘要:随着计算机技术的飞速发展,CPU时计算机组成的核心部分,提高CPU的性能一直是一个很重要的课题,所以CPU从单核提高到多核,但是总会有一些技术上的难题需要解决,这其中,Cache的一致性问题的解决就推动计算机多核的发展,解决一致性人们提出了一些协议,这其中比较好的解决方案是MESI协议,MESI协议通过监视机制,实时监视总系的事务,当修改某一缓存时,通过通知其它同样持有同一内容的缓存来保持缓存的一致性。
这一协议是目前比较好的解决缓存一致性问题的解决方案,本篇文章就这一经典协议做了分析与总结。
关键词:缓存一致性窥探协议引言现代的CPU上,大部分都需要通过缓存来进行内存访问,由于物理架构的原因,CPU没有管脚直接连到内存,所以CPU的读/写(以及取指令)单元正常情况下不能进行直接内存访问。
相反,CPU和一级缓存通讯,而一级缓存才能和内存通讯。
而现在又大多有了二级缓存,甚至三级缓存。
缓存是分段(line)的,即下文要用的“缓存段”(cache line),当我们提到”缓存段”的时候,就是指一段和缓存大小对齐的内存,而不关心里面的内容是否真正被缓存进去。
当CPU看到一条读内存指令时,它会把内存地址传递给一级数据缓存,一级数据缓存会检查它是否有这个内存地址对应的缓存段,没有的话,它会把对应的缓存段加载进来。
如果进行的是读操作,这就很简单,所有级别的缓存都遵循以下规律:在任意时刻,任意级别缓存中的缓存段的内容,等同于它关联内存中的内容。
如果进行写操作,情况就会变得复杂些,一般分为两种基本的写模式:直写(write-through)和回写(write-back)。
直写简单一点:透过缓存,直接把数据写到下一级内存中,如果对应的段被缓存了,就更新缓存中的内容,同样遵循前面的定律:缓存中的段永远和它关联内存的内容匹配。
回写相对复杂一些,回写模式下不会立即把数据传递给下一级,而是仅仅修改本级缓存中的内容,并将其标记为“脏段”,“脏段”会在触发回写,就是将缓存段中的内容传递给下一级,然后脏段又变干净了,即当一个脏段被丢弃了,总是要进行一次回写,在回写模式中,去掉了“任意时刻”这个修饰词,而是以相对弱化的条件代替它:缓存段干净时,缓存段的内容和内存一致;缓存段是脏段时,缓存段中的内容最终要回写到内存中,也就是说可以允许关联内存不和缓存内容同步,但最终要同步。
Cache的一致性问题
Cache的⼀致性问题Cache中的内容是主存中的副本。
访问数据是先访问Cache,Cache中没有再看主存中有没有。
当对cache中的内容更新时,就会存在cache和主存如何保持数据⼀致的问题。
此外,下列问题也会导致cache⼀致性问题。
多个设备都允许访问主存时,cache中的内容被cpu修改,⽽主存中的没有,同时该内容需要写⼊磁盘,此时从内存写⼊到磁盘的数据和cache(希望的数据)不⼀样。
当多个CPU都有各⾃的cache⽽共享主存时,若有⼀个cpu修改了⾃⾝cache中的内容,则对应的主存块和其他cpu中对应的cache⾏的内容都变为⽆效(共享数据,数据更改了,未及时更改的那些数据都没⽤了)Cache⼀致性问题的关键是处理好写操作。
全写法对写命中,写未命中的解释:cache的写命中和写未命中,就是磁盘或者内存上的存储区域之前有没有写过数据。
如果有,这次再写到相同的区域叫写命中;如果写到其他区域,叫写未命中。
写操作时,若写命中,则同时写cache和主存;若写不命中,则有以下两种⽅式。
写分配法:先更新主存中的数据,再将更新后的主存块装⼊到cache中。
可重复利⽤程序的局部性原理。
⾮写分配法:仅更新主存中数据不写⼊cache,可减少读⼊主存块的时间,但是没有很好地利⽤程序地局部性原理。
为减少写主存地开⼼,通常再cache和主存之间加⼀个写缓冲,写⼊cache时也写⼊缓冲中,然后由存储控制器将写缓冲中的数据写⼊主存。
(写缓冲的读取速度很快,远远⾼于对主存的读取速度)回写法CPU执⾏写操作时,若写命中,则信息只写⼊cache不写⼊主存;若写不命中,则在cache中分配⼀⾏,将主存块调⼊该cache⾏中并更新相应单元的内容。
该⽅式下,写不命中时通常采⽤写分配法进⾏写操作。
我个⼈理解,写命中就是这个数据在cahce和内存⾥,但是内容不对需要更新。
写未命中就是,这个数据不在内存,也不在cache,需要申请⼀块新的空间存放它。
Cache一致性
Cache⼀致性Cache⼀致性问题,主要是指由于某些操作导致Cache和内存(如DDR)之间的数据不⼀致,且我们⽆法正确取到最新的数据。
正常情况下,Cache控制器有⼀套完善协议去保证我们对内存读写操作的正确性。
但在某些复杂场景下,会发⽣cache⼀致性问题,此问题常发⽣在多核之间或使⽤DMA进⾏数据搬运前后。
本⽂主要讨论DMA搬运数据前后的cache⼀致性问题。
考虑如下场景:1)读0x80000000地址的数据2)经过⼀系列操作后,我们通过DMA将结果拷贝到0x80000000地址所在的内存3)读上⼀步中的结果分析:第1步,读操作会将内存中数据先加载到对应的cache(cache-line)中(cache操作都是以cache-line为最⼩单元进⾏操作的,常见的⼤⼩为64bytes),假设此时此地址的数据为0xFF,即cache中数据为0xFF;第2步,DMA对地址0x80000000写数据,由于DMA操作都是直接对物理内存进⾏操作的,即跳过cache,直接将内存中数据改写,假设为0x55。
那么此时便产⽣了cache⼀致性问题(cache中数据和内存中数据不⼀致,且cache并未更新数据状态(dirty))。
第3步,我们在代码中去访问此地址,由于cache状态未更新(cache控制器以为cache中数据是最新数据),从⽽读到错误数据。
解决:⼀般的,在遇到这种情况的时候,需要对cache进⾏flush或者invalidate操作。
通常可以在DMA写数据之前进⾏flush或者DMA写数据之后invalidate,具体需要看当时的实际情况。
但需要特别注意cache的invalidate操作,有较⼤风险引起“把有效数据⽆效掉”的问题。
备注:了解cache机制,推荐阅读下⼀章“Cache的⼏种读写机制”。
Cache一致性协议之MESI
Cache⼀致性协议之MESI转⾃:处理器上有⼀套完整的协议,来保证Cache⼀致性。
⽐较经典的Cache⼀致性协议当属MESI协议,奔腾处理器有使⽤它,很多其他的处理器都是使⽤它的变种。
单核Cache中每个Cache line有2个标志:dirty和valid标志,它们很好的描述了Cache和Memory(内存)之间的数据关系(数据是否有效,数据是否被修改),⽽在多核处理器中,多个核会共享⼀些数据,MESI协议就包含了描述共享的状态。
在MESI协议中,每个Cache line有4个状态,可⽤2个bit表⽰,它们分别是:状态描述M(Modified)这⾏数据有效,数据被修改了,和内存中的数据不⼀致,数据只存在于本Cache中。
E(Exclusive)这⾏数据有效,数据和内存中的数据⼀致,数据只存在于本Cache中。
S(Shared)这⾏数据有效,数据和内存中的数据⼀致,数据存在于很多Cache中。
I(Invalid)这⾏数据⽆效M(Modified)和E(Exclusive)状态的Cache line,数据是独有的,不同点在于M状态的数据是dirty的(和内存的不⼀致),E状态的数据是clean的(和内存的⼀致)。
(Shared)状态的Cache line,数据和其他Core的Cache共享。
只有clean的数据才能被多个Cache共享。
I(Invalid)表⽰这个Cache line⽆效。
E状态⽰例如下:E状态只有Core 0访问变量x,它的Cache line状态为E(Exclusive)。
S状态⽰例如下:S状态3个Core都访问变量x,它们对应的Cache line为S(Shared)状态。
M状态和I状态⽰例如下:M状态和I状态Core 0修改了x的值之后,这个Cache line变成了M(Modified)状态,其他Core对应的Cache line变成了I(Invalid)状态。
在MESI协议中,每个Cache的Cache控制器不仅知道⾃⼰的读写操作,⽽且也监听(snoop)其它Cache的读写操作。
Cache一致性
Cache⼀致性
Cache 的⼀致性特性
即使内存区域满⾜了cache的使⽤条件,要正确的使⽤cache,仍然可能会碰到cache⼀致性的问题,由于cache会使得某⼀确定的时
刻,cpu看到的储存内容和内存中的实际内容不⼀致,如果仅仅只是CPU来操作这⽚区域,这不会产⽣任何问题,担当有其他外设也参与读写的时候,就会产⽣以下两种情况的cache⼀致性问题。
1、储存位置被其它外设修改
以⽹卡为例,⽹卡会将接收到的数据包写⼊到指定的内存中(A处地址),⽽如果此内存带cache,且cache中刚刚存A处地址内存的缓存,此时,CPU访问这段内存的时候cache并不知道这段内存已经被⽹卡更新,CPU获得的数据还是cache中缓存的内容,也就是说获取的不是最新数据包的内容。
2、外设需要看到CPU对某块区域储存的修改
以⽹卡发送为例,CPU将要发送的数据包写⼊指定的内存,然后通知⽹卡将此内存中的数据发送出去,如果此内存带cache,CPU写⼊到此内存的数据可能还停留在cache中,内存的数据还未更新,⽹卡就发送了错误的数据。
确保Cache⼀致性的操作
对应于产⽣cache⼀致性问题的两种情况,确保cache⼀致性的操作主要有:
1、cache ⽆效:cache⽆效是将cache中指定的区域的缓存标记为⽆效,当CPU再次访问这个区域时,将强制cache从这个区域重新缓存数据。
2、cache 刷新:cache刷新时指⽴即将cache中指定区域的内容写⼊到内存。
5.3.5_Cache的一致性问题
5.3.5 Cache的一致性问题 Cache中的内容是主存的副本情况1:当Cache中的内容进行更新时,而没有改变主存中的相应内容时,Cache 和主存之间产生了不一致(inconsistent) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 8 9 14 3Cache存储器 主存储器 写数据 Cache的一致性问题指什么? 5.3.5 Cache的一致性问题 Cache的一致性问题指什么? 情况2:当多个设备都允许访问主存时 例:I/O设备可通过DMA方式直接读写主存时,如果Cache中的内容被修改,则I/O设备读出的对应主存单元的内容无效;若I/O设备修改了主存单元的内容,则对应Cache行中的内容无效。
情况3:当多个CPU都有各自私有的Cache并且共享主存时 例:某个CPU修改了自身Cache中的内容,则对应的主存单元和其他CPU中对应的Cache行的内容都要变为无效。
5.3.5 Cache 的一致性问题 P3私有Cache 中的变量u 被更新后,各处理器读到的是不同的u 值处理器私有Cache 引入的问题• 同一变量拷贝可能出现在多个处理器私有Cache 中• 某处理器写操作可能对其它处理器是不可见的 程序不能容忍这样的错误, 但这种现象却很常见!I/O devicesMemoryP 1$ $$P2 P3 u :5u :512u :5 3u = 75u = ?4u = ?5.3.5 Cache 的一致性问题 需要研究Cache 写机制l● Write T hrough (写直达、写通过、直写) l● Write B ack (写回、一次性写、回写) 如何保持Cache 一致性呢? 当CPU 写存储地址命中Cache 时 如何保持。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3. 局部命令(Local commands) (1)P-Read:本地处理机读自己的Cache 副本。 (2)P-Write:本地处理机写自己的Cache 副本。
4. 一致性命令 (1)Read-blk:从另一Cache读一份有效 的副本。 (2)Write-inv:在写命中时在总线上广 播一个无效命令。 (3)Read-inv:在写缺失时在总线上广播 一个无效命令。
下 一 节
Invalid
P-Read(2)
Valid
Dirty
Reserved
(2)P-Read(miss: if no dirty copy exists, memory supplies a valid copy, otherwise, the cache inhibits memory and supplies a copy and updates memory. Both copies become valid).
3. I/O操作(绕过Cache的I/O操作)
P1
x
P2
x
P1
c1 x
P2
c2 x 总线
P1
x’
P2
x
x
存储器 I/O
x’ 存储器
x’ 输入
x 存储器
x 输出
写通过
写回
上图中: 中间图为:当I/O处理机将一个新的数据x’ 写入主存储器时,绕过采用写通过策略的 cache,则C1和共享存储器之间产生了不一 致。 右图为:直接从主存储器输出数据时(绕 过Cache),采用写回策略的高速缓存产生 不一致性。
5. 写更新的问题 由于更新时,所有的副本均需要更新,开 销很大。
第五章 Cache Coherence
5.1 Cache Coherence问题 5.2 监听总线协议
5.2.1 写一次协议
5.3 基于目录的Cache一致性协议 5.4 三种Cache一致性策略
5.2 监听总线协议(Snoopy protocol)
1. 一致性协议的内容 一致性协议包括: (1)Cache可能出现的状态集合 (2)共享主存的状态 (3)为维护一致性而引起的状态转换。
2. 每份Cache中的副本可能出现的四种状态 (1)有效(valid state):与主存储器副 本一致的Cache副本,即该副本未经修改, 所以这个Cache副本不是唯一的副本。 (2)保留(reserved state):这一Cache副 本是第一次修改,并用写通过方法写入主存, 所以这一Cache副本和主存储器副本一致。
x …… 总线 x P1 x P2 …… x P3 Cache 处理机 共享存储器
下图表示P1进行写无效操作后的情形。 写通过:
x’ ……
x’ P1
I P2
……
I P3 I表示无效
写回:
I ……
x’ P1
I P2
……
I P3 I表示无效
下图表示P1进行写更新操作后的情形(写 通过)。
x’ ……
2.写更新(write update) 任一处理器写它的私有Cache时,它都立即 更新所有其它的Cache中的副本。 对Write-through,它也更新主存储器中的副 本。 对Write-back,对存储器中副本的更新延迟 到这个Cache被臵换的时刻。
3. 示意图 下图表示数据块x在共享存储器和三台处理 机的Cache中的副本一致的情形。
Read-inv(4)/Write-inv(5) Invalid P-Read(2) Read-inv(4) Valid
P-Read (hit:always local, no state transition)
P-Write (hit:local,update Read-inv Read-blk memory copy, P-Write(1) (4) (3) broadcast write-inv Read-blk(3) to all cache, Dirty Reserved local copy P-Write becomes (hit:local, not memory P-Write reserved) (hit:local still dirty) update, local copy becomes dirty)
下 一 节
Invalid
Valid
Read-blk (3)
Dirty
Reserved
(3)Read-blk(read from remote processors, the local copy become valid).
下 一 节
Invalid
Valid
Read-blk(3) Dirty Reserved
下 一 节
Read-inv(4)/Write-inv(5) Invalid Valid
Dirty
Reserved
(4)Read-inv(A remote cache reads a block during a write-miss, updates it and invalidates all other copies). (5)Write-inv(A remote cache updates its local copy during a write-hits and invalidates all other copies).
高等计算机体系结构
北京科技大学计算机系 李建江
参考课件:清华大学计算机科学与技术系高性能计算研究所 郑纬民 教授
第五章 Cache Coherence
5.1 Cache Coherence问题
5.1.1 Cache Coherence的提出 5.1.2 多个Cache不一致的原因 5.1.3 两种设计Cache一致性协议策略
Cache Cache …… P P
Cache
P
5.1.2 多个Cache不一致的原因
1.共享可写数据的不一致性(sharing of writable data)
处理机 Cache shared memory P1 P2 P1 P2 P1 P2
x
x
x’
x
x’
x
x
x’
x
更新前
写通过
写回
2.进程迁移的不一致性
(3)重写(dirty state):Cache副本不止 一次被修改过,由于不再采用写通过方法, 所以这个Cache副本是唯一的副本。与存储 器和其它的Cache副本都不一致。主存储器 中的副本也是无效的。 (4)无效(invalid state)与存储器或其它 的Cache副本不一致,或在Cache中找不到。
x’ P1
x’ P2
……
x’ P3 I表示无效
4.写无效的问题 主要开销在两个方面: (1)作废各Cache副本的开销; (2)由作废引起缺失造成的开销,即处理 机需要访问已经作废的数据时将引起Cache的 缺失。
后果: 如果一个处理机经常对某个块连续写,且各 处理处理机间对共享块的竞争较小,这时写无 效策略维护一致性的开销是很小的。如发生严 重竞争,即处理机之间对某个地址的共享数据 竞争,将产生较多的作废,引起更多的作废缺 失。结果是共享数据在各Cache间倒来倒去, 产生颠簸现象,当缓存块比较大时,这种颠簸 现象更为严重。
(3)Read-blk(read from remote processors, the local copy become valid). (4)Read-inv(A remote cache reads a block during a write-miss, updates it and invalidates all other copies). (5)Write-inv(A remote cache updates its local copy during a write-hits and invalidates all other copies).
处理机
Cache shared memory源自P1xP2P1
x
P2
x’
P1
x’
P2
x
x
x’
x
迁移前
写通过
写回
上图中: 右图为:包含共享变量x的进程原来在P1上 运行,并对x进行了修改(但采取写回策略, 所以暂时没有修改Memory),由于某种原因 迁移到P2,修改过的x’仍在P1的Cache中,P2 运行时从Memory中得到x(因为缺失),这个 x其实是“过时”的,所以造成了不一致。 中间图为:P2中运行的进程对x进行了修改, 采取写通过策略,所以把Memory中的x也修改 为x’,由于某种原因该进程迁移到P1,但P1的 Cache中仍为x,所以造成不一致。
(3)Read-blk(read from remote processors, the local copy become valid).
下 一 节
Invalid
Valid
Read-inv (4)
Dirty
Reserved
(4)Read-inv(A remote cache reads a block during a write-miss, updates it and invalidates all other copies).
(用鼠标点击连线来察看详细信息)
下 一 节
Invalid
Valid
P-Write(1)
Dirty
Reserved
(1)P-Write(miss: take a dirty copy from a remote cache, or from memory; send Read-invto invalidate all copies; update local copy into a dirty one).