cache一致性协议实现的基本方法
基于总线侦听Cache一致性协议算法与实现
个 处理 机共 享地 访 问 主存 {o mo moy , cm nme r} 同时 每 个处 理 机义 有 自己的高速缓 存 ( nci ahs 。其 O —hpC ce) 中 C ce 速度 比主存快 得 多的缓 冲存 储 器 , 是 其 ah 是 但
总 第 1 6期 4
基 于 总线 侦 听 C ce一 致性 协 议 算 法 与 实 现 ah
彭 军 杨 , 乐 , 婵 新 盛 立琨 稂 ,
(, 1 江西农业 大学,江西 南 昌 3 04 ; . 30 5 2 江西师范 大学计算机信息工程学院 ,江西 南昌 30 2 ) 30 2
摘要 : 以共 享 总 线 的 多处 理 机 系统 为例 , 文 介 绍 了在 共 享 总线 系统 中 ah 并 基 于 总 线侦 听 Cc e一 致性 协议 的优 点 和 协议 区分 状 态 的 原 因 , 出 了一 个评 价 协 议 好 坏 的 角 度 : 线 的 流 量 和 存 储 器 ah 给 总
Prt c 1 o oo.
Ke r s c c e c h rn e y wo d : a h o e e c ;Ca h ;s o p rtc l ce n y p oo o ;ME I S
基于共享总线的多处理器cache一致性的硬件实现
oh ri lme t t n fc c ec h rn e a d t erp r r n e P te mp e n ai so a h o ee c n h i e o ma c .F GA x e i n ss o t a i b s s o p u i c n e s r o f e p rme t h w tt s u n o n t a n u e h h
的定义如下 :
a )M态。被寻址 的 cce 在 cc e中, cce块与 内 ah 块 ah 但 ah 存 中该 块相 比已被修改 。 b )E态。被寻址 的 cc e 在 cce中, ah 块 ah 并且 该 cce块 ah
L u — io,Z IJ n xa HANG S e g b n h n — i g,S N Xu b n HE — a g
( v t nMi oபைடு நூலகம் t nc C ne,N r w sr oyehi lU i ri ,X ’ n7 0 7 A i i c e co i et ao r er s r ot eenP l c n a n esy ia 1 02,C ia h t t c v t hn )
t a he c nsse c n mulir c s os’ s se c re ty a fii nl he c c o itn y i tp o e sr y t m o r cl nd efc e ty、 K e wo ds: ss o p; mutpr c s o s o itn y; c py b c y r bu n o li o e s r ;c nsse c o —a k
基 于 共 享总 线 的 多处 理 器 c c e一 致 性 的硬 件 实现 米 ah
cache 的mesi协议
cache 的mesi协议摘要:1.什么是Cache?2.Cache 的一致性问题和解决方案3.MESI 协议的提出4.MESI 协议的工作原理5.MESI 协议的优点和局限性6.总结正文:1.什么是Cache?Cache 是一种存储器,用于存储最近访问的数据。
在计算机系统中,Cache 位于处理器和主存储器之间,其作用是缓存主存储器中的数据,以便处理器能够更快地访问数据。
2.Cache 的一致性问题和解决方案当多个处理器同时访问Cache 时,可能会出现一致性问题。
为了解决这个问题,人们提出了多种一致性协议,其中最常用的是MESI 协议。
3.MESI 协议的提出MESI 协议是由加州大学伯克利分校的计算机科学家们提出的。
它是一种基于监听的总线协议,旨在解决Cache 一致性问题。
4.MESI 协议的工作原理MESI 协议根据数据的修改情况将Cache 分为四种状态:M(Modified)、E(Exclusive)、S(Shared)和I(Invalid)。
当处理器修改Cache 中的数据时,它将数据的状态设置为M。
当其他处理器请求访问该数据时,它将检查数据的状态,如果数据的状态为M,则处理器会拒绝访问;如果数据的状态为E,则处理器会允许访问;如果数据的状态为S,则处理器会共享数据;如果数据的状态为I,则处理器会重新加载数据。
5.MESI 协议的优点和局限性MESI 协议的优点是简单、高效,能够解决Cache 一致性问题。
然而,MESI 协议也有一些局限性,例如,它要求处理器能够区分不同状态的数据,这可能会增加处理器的复杂性。
6.总结MESI 协议是一种基于监听的总线协议,用于解决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)是一种用于存储临时数据的高速存储器,通常位于计算机的内部或接近CPU。
它具有快速的读写速度和较小的容量,以提高系统的性能和响应速度。
缓存的基本原理是利用数据的局部性原理,将最常用的数据复制到高速存储器中,使CPU能够更快地访问这些数据,从而减少对慢速外部存储器的访问次数。
缓存的基本原理可以分为三个层面:局部性原理、缓存一致性原理和替换策略。
1.局部性原理:局部性原理是缓存能够有效工作的基础。
程序在执行时的数据访问往往表现出两种局部性:时间局部性和空间局部性。
时间局部性指的是一旦程序访问了某个数据,它在短时间内很可能再次被访问到;空间局部性指的是一旦程序访问了某个数据,它附近的数据也很可能会被访问。
缓存利用了时间局部性特征,将最近被CPU访问的数据复制到缓存中,以便下次CPU再次访问相同数据时可以直接从缓存中读取,避免了从主存中读取数据的延迟。
同时,缓存还利用了空间局部性特征,在CPU访问一个数据时,将它所在的数据块一并复制到缓存中,预先加载相邻的数据,提高数据的连续性访问。
2.缓存一致性原理:缓存一致性原理是指在多级缓存系统中,各级缓存之间需要保持数据的一致性。
多级缓存系统中,数据可能被同时存储在多个级别的缓存中,当CPU修改了一个数据时,需要保证这个修改操作对其他缓存可见。
缓存一致性通过使用一致性协议来实现。
常见的一致性协议有:MESI协议(Modified、Exclusive、Shared、Invalid)和MOESI协议(Modified、Owned、Exclusive、Shared、Invalid)。
这些协议通过处理缓存之间的通信和同步,确保数据的一致性,避免了数据的冲突和错误。
3.替换策略:由于缓存容量有限,当缓存已满时,需要替换掉一个缓存行(Cache Line)来给新的数据腾出位置。
替换策略是决定哪个缓存行被替换的规则。
常见的替换策略有:随机替换、先进先出替换(FIFO)、最近最久未使用替换(LRU)等。
多核处理器cache一致性
一.多核处理器cashe一致性 (2)二.基于无锁机制的事务存储 (3)1.事务的基本概念 (3)2.实现流程-design (4)3.缓存状态 (5)4.事务行为 (5)5. 回退机制 (6)三.TCC模型 (6)1.编程模型 (6)2.TCC系统 (7)四.ASTM (7)1.背景 (7)2.STM设计 (8)2.1. 急迫申请与懒惰申请 (8)2.2.元数据结构 (8)2.3. 间接引用对象 (8)3.基本ASTM设计 (9)五.参考文献 (10)一.多核处理器cache一致性由于后续章节要用到多处理器cashe一致性的协议,这里先简单阐述一下!维持多处理器cashe一致性的协议叫做cashe一致性协议。
而实现cashe一致性协议的关键就是要跟踪一个共享数据块的任何状态。
目前有两种协议,分别使用不同的技术来跟踪共享状态。
一种是基于目录的,一个物理内存中数据块的共享状态保存在一个位置,叫做目录。
另外一种就是snooping协议。
我们先来看看snooping协议的具体实现。
Snooping的做法是,每个cashe不仅保存着一份物理内存的拷贝,而且保存着数据块的共享状态的拷贝。
通过广播介质这些cashe可以被访问,所有的cashe控制器通过介质检测来决定自己是否拥有一份来自总线请求的数据块的拷贝。
目前多处理器普遍采用写无效协议来维持一致性的需求。
它的核心思想就是一个处理器在写数据之前必须确保它对该数据块的互斥访问。
如果一个读操作紧随一个写操作之后,由于写操作是互斥的,它在写之前必须对无效化所有该数据块在其它cashe上的拷贝,当读发生时,它获得一个读缺失而被迫去获取新的拷贝。
如果两个写操作试图对同一数据同时操作,那么只有一个获胜,获胜方使得其它处理器种的cashe拷贝无效化,其它操作要完成它的写操作必须先获得数据的新拷贝,也就是更新的数据的拷贝,因此写无效协议实际上实现了写的序列化。
实现写无效协议的关键是使用总线(bus),或者其它的广播介质来执行无效操作。
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一致性
x’
core1
x’
core2
……
x’
core3
I表示无效
4.写无效的问题 主要开销在两个方面: (1)作废各Cache副本的开销; (2)由作废引起缺失造成的开销,即处理 机需要访问已经作废的数据时将引起Cache的 缺失。
后果: 如果一个Core经常对某个块连续写,且Core 间对共享块的竞争较小,这时写无效策略维护 一致性的开销是很小的。如发生严重竞争,即 Core之间对某个地址的共享数据竞争,将产生 较多的作废,引起更多的作废缺失。结果是共 享数据在各Cache间倒来倒去,产生颠簸现象, 当缓存块比较大时,这种颠簸现象更为严重。
5. Write-Once一致性协议状态转移表
current command state P-Read P-Write 有效 有效 next state status action
P-Write
保留
必是局部进行, 有效 Read-hit 不影响有效状态 第一次写命中,用 保留 Write-hit 写通过法。同时修 改本地和主存副本 并广播Write-inv 使所有副本失效 第二次写命中,用 重写 Write-hit 写回法。但不修改 主存的副本
5. 写更新的问题 由于更新时,所有的副本均需要更新,开 销很大。
1.1 Cache Coherence问题 1.2 监听总线协议
1.2.1 写一次协议
1.3 基于目录的Cache一致性协议 1.4 三种Cache一致性策略
1.2 监听总线协议(Snoopy protocol)
通过总线监听机制实现Cache和共享存储 器之间的一致性。 适用性分析: 适用于具有广播能力的总线结构多Core系 统,允许每个Core监听其它Core的存储器访 问情况。 只适用于小规模的多Core系统。
缓存一致性解决方案
缓存一致性解决方案缓存一致性是保持应用程序的数据一致性的重要前提。
缓存一致性是缓存技术的一个关键,可以显著提高系统的性能,提高系统的效率。
缓存一致性问题往往在大多数分布式系统中发生,因为分布式系统中的数据可能被多个程序、进程或服务并发访问和更新。
如果系统中的多个节点未能正确地同步数据,则不能保证系统中的数据有效性,从而导致系统出现不一致的问题。
针对缓存一致性问题,解决的方法有很多,如引入消息中间件服务来处理,使用数据同步机制(例如基于主从模式的rsync)进行数据同步,使用分布式缓存解决方案,如Redis,Memcached,Hazelcast 等,以及基于强一致性和弱一致性算法等。
首先,基于强一致性和弱一致性算法可以用来解决缓存一致性问题。
强一致性算法采用使用协调者组织参与者执行操作的方式,与参与的其他进程或服务协议协商,以达到一致性,但它的处理速度比较慢;而弱一致性算法则虽然不需要协议协商,但只要数据被更新,就可能导致数据不一致。
其次,多个节点可以使用数据同步机制来保证缓存一致性。
数据同步机制中,一般采用主从模式,当主节点数据更新时,会将数据同步到从节点,从而保证数据在多个节点间一致。
最后,一种解决缓存一致性的方法是使用分布式缓存解决方案,比如Redis,Memcached,Hazelcast等。
这些分布式缓存技术采用了节点群集技术,可以将多个节点组织成一个群集,当系统中一个节点的数据发生变化时,会将变化同步到其他节点,从而保证多个节点之间的数据一致性。
总之,缓存一致性是非常重要的一个问题,针对这个问题,可以采用多种方法来解决,如采用基于强一致性和弱一致性算法,使用数据同步机制、采用分布式缓存解决方案等。
这些方法的应用可以实现在系统中多个节点的数据同步,从而达到保证系统数据的一致性,提高系统的性能和效率。
ARMLinux内核panic之cache一致性——cci-400cache一致互联
ARMLinux内核panic之cache⼀致性——cci-400cache⼀致互联ARM Linux 内核 panic 之cache ⼀致性 ——cci-400 cache⼀致互联CCI-400 集合了互联和⼀致性功能,有 2 个ACE slave接⼝和 3 个ACE-Lite slave接⼝,有 3 个AXI master接⼝。
2 个 ACE slave 接⼝可以相互 snoop 对⽅,ACE-Lite slave 接⼝可以 snoop 这 2 个 ACE slave 接⼝。
本⽂⾸先介绍cci-400相关结构,然后以内核的panic为引⼦,最后给出导致内核panic的真正原因。
1 cci-400cci-400参考⼿册中的例⼦系统⼊下图所⽰。
ACE slave 接⼝的3和4接cortex-a7或者a-15处理器;ACE-Lite slave 接⼝的2接GPU(Mali-T604),1接⼀致性的I/O设备,0接DMA或者LCD;AXI master接⼝的1和1接内存控制器,0接其它的设备。
⽽本⽂中的平台,cci结构图如下所⽰。
挂接了4核的Cortex-A7、Mali T628的GPU、单核的Cortex-A7。
2 内核panicARM Linux ⼤⼩核切换——cortex-A7 big.LITTLE ⼤⼩切换代码分析。
此处的⼤核就是4核中的CPU0,⽽⼩核就是那个单独的CPU。
实际使⽤中,为了省电等,需要在这两个CPU之间来回切换。
⽬前的使⽤环境是这样的,5个Cortex-A7 CPU都处于ARM TrustZone的None-Secure模式(⾮安全的模式),这样让⼤核和⼩核互相切换。
经过测试发现,⼩核⼀旦执⾏下电操作,就会导致内核的panic,且每次的panic位置都不⼀样,我截取了⼏处,下⾯详细分析。
2.1 sched_info_arrive2.1.1 原始⽇志[ 186.935821]{4} IRQ41 no longer affine to CPU4[ 186.936523]{0} CPU4: shutdown[ 186.956817]{0} BUG: recent printk recursion![ 186.956817]{0} Unable to handle kernel paging request at virtual address 600101a7[ 186.969970]{0} pgd = d31d8000[ 186.973297]{0} [600101a7] *pgd=00000000[ 186.977600]{0} Internal error: Oops: 5 [#1] PREEMPT SMP ARM[ 186.983886]{0} Modules linked in:[ 186.987609]{0} in dump_stack_print_info, line:2909 mpidr:0x80000100[ 186.994659]{0} CPU: 0 PID: 2034 Comm: sh Not tainted 3.10.0 #88[ 187.001312]{0} task: d5912880 ti: d3baa000 task.ti: d3baa000[ 187.007690]{0} PC is at sched_info_arrive+0x14/0xc8[ 187.013183]{0} LR is at __schedule+0x380/0x504[ 187.018188]{0} pc : [<c0103b78>] lr : [<c05a6058>] psr: 200f0193[ 187.018188]{0} sp : d3babdf8 ip : 00000590 fp : d3babe0c[ 187.031677]{0} r10: d6c51b00 r9 : 0000002b r8 : 877ea4da[ 187.037841]{0} r7 : d5912b58 r6 : d3baa000 r5 : c0d36a80 r4 : d5912880[ 187.045501]{0} r3 : c0838a80 r2 : c08588d8 r1 : 60010193 r0 : d6c51b00[ 187.053131]{0} Flags: nzCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment user[ 187.061553]{0} Control: 10c5387d Table: 195d806a DAC: 00000015[ 187.068298]{0}[ 187.068298]{0} PC: 0xc0103af8:[ 187.073699]{0} 3af8 e59f505c e59f605c e1a00005 eb12862a e595401c e2855018 e2444004 ea00000a [ 187.083190]{0} 3b18 e7962107 e5943000 e7930002 e3500000 0a000003 e5d4302c e3530000 1a000000 [ 187.092681]{0} 3b38 ebffe422 e5944008 e2444004 e2843004 e1530005 1afffff1 e59f0004 e8bd40f8[ 187.102203]{0} 3b58 ea12857e c088044c c08588d8 e92d48f0 e28db014 e5901004 e59f20ac e59f30ac [ 187.111694]{0} 3b78 e591c014 e792210c e3a0ce1f e0833002 e2833e49 e1c360d0 e18020dc e1924003 [ 187.121185]{0} 3b98 01a04002 01a05003 0a000003 e1a04006 e1a05007 e0544002 e0c55003 e3a02000 [ 187.130676]{0} 3bb8 e3a03000 e18020fc e3a0ce1e e18020dc e0922004 e0a33005 e18020fc e3a03f7a [ 187.140167]{0} 3bd8 e59f2044 e18060f3 e59031d8 e2833001 e58031d8 e5911014 e59f3030 e7921101 [ 187.149688]{0}[ 187.149688]{0} LR: 0xc05a5fd8:[ 187.155059]{0} 5fd8 e1c380d0 e3a03f7a e18400d3 0a000006 e3a0ce59 e18e20dc e0922008 e0a33009 [ 187.164550]{0} 5ff8 e0522000 e0c33001 e18e20fc e5943000 e3530000 1a00000c e3a01e1f e18420d1 [ 187.174072]{0} 6018 e1920003 1a000008 e5942004 e59f3194 e5920014 e59f2190 e7922100 e0833002 [ 187.183563]{0} 6038 e2833e49 e1c320d0 e18420f1 e59e347c e15a0003 0a000001 e1a0000a ebed76c2 [ 187.193054]{0} 6058 e59a8214 e3a03001 e58a3018 e3580000 e5947218 1a000007 e58a7218 e2873030 [ 187.202575]{0} 6078 e1932f9f e2822001 e1831f92 e3310000 1afffffa ea000019 e5983158 e5969014 [ 187.212066]{0} 6098 e313001f 0a00000b e3590000 e289301f a1a03009 e1a032c3 e0883103 e5932158 [ 187.221557]{0} 60b8 e209301f e1a03332 e3130001 1a000001 ebe9c24d f57ff04f e1a00009 e2881f56 [ 187.231048]{0}[ 187.231048]{0} SP: 0xd3babd78:[ 187.236419]{0} bd78 c0d36ac8 877ea4da d59128b8 c010ce60 c0d36ac8 d59128b8 84652f3a 0000000c [ 187.245941]{0} bd98 d59128b8 c0103b78 200f0193 ffffffff d3babde4 c000d4d8 d6c51b00 60010193[ 187.255432]{0} bdb8 c08588d8 c0838a80 d5912880 c0d36a80 d3baa000 d5912b58 877ea4da 0000002b [ 187.264923]{0} bdd8 d6c51b00 d3babe0c 00000590 d3babdf8 c05a6058 c0103b78 200f0193 ffffffff[ 187.274414]{0} bdf8 d5912880 c0d36a80 d3baa000 d5912b58 d3babe3c c05a6058 c083fad0 c0838a80 [ 187.283905]{0} be18 0000004c d3baa000 200f0013 ffffffff d3babe84 c000d560 d3baa000 00000000[ 187.293365]{0} be38 d3babe4c c05a6614 000003ff c02ba184 ******** c000d578 0000b9ca ffffffff[ 187.302825]{0} be58 0000475c c02ba158 ******** 00000014 f8899000 c088e470 0000001c 00000000 [ 187.312286]{0}[ 187.312286]{0} FP: 0xd3babd8c:[ 187.317657]{0} bd8c d59128b8 84652f3a 0000000c d59128b8 c0103b78 200f0193 ffffffff d3babde4[ 187.327117]{0} bdac c000d4d8 d6c51b00 60010193 c08588d8 c0838a80 d5912880 c0d36a80 d3baa000[ 187.336608]{0} bdcc d5912b58 877ea4da 0000002b d6c51b00 d3babe0c 00000590 d3babdf8 c05a6058 [ 187.346130]{0} bdec c0103b78 200f0193 ffffffff d5912880 c0d36a80 d3baa000 d5912b58 d3babe3c[ 187.355621]{0} be0c c05a6058 c083fad0 c0838a80 0000004c d3baa000 200f0013 ffffffff d3babe84[ 187.365112]{0} be2c c000d560 d3baa000 00000000 d3babe4c c05a6614 000003ff c02ba184 ******** [ 187.374633]{0} be4c c000d578 0000b9ca ffffffff 0000475c c02ba158 ******** 00000014 f8899000[ 187.384124]{0} be6c c088e470 0000001c 00000000 00000000 00000000 c0d34344 d3babe98 c001ab70 [ 187.393646]{0}[ 187.393646]{0} R0: 0xd6c51a80:[ 187.399047]{0} 1a80 d6c3e004 d6c50000 00000000 c08ca248 c08ca248 ffffffff 00000000 00000000[ 187.408538]{0} 1aa0 60010193 00000000 00000000 d6c51ac0 c00e02e8 c05a6dd8 a0010193 ffffffff[ 187.418029]{0} 1ac0 00000000 00000000 fffff6ff 68fe7bdf fefe7fdb fffe7ffb fdfffff5 89fffffd[ 187.427551]{0} 1ae0 fb773bd7 00000000 ffbffffd 00001008 c0862a38 c08ca248 d6c51bd8 00000000 [ 187.437072]{0} 1b00 00000000 60010193 00000000 c05980f0 c06fb857 d6c51b2c 00001008 d6c51b2c [ 187.446563]{0} 1b20 00001008 c0008364 c06fb857 c06fb93b 00001008 c08ca248 00000400 00400000 [ 187.456054]{0} 1b40 d6c50dc1 00000000 00000000 d6c51b4c d6c51b4c 00000000 877ea4da 0000002b [ 187.465576]{0} 1b60 000ba43c 00000000 ffea937b ffffffff 00007736 00000000 00000000 00000000[ 187.475067]{0}[ 187.475067]{0} R2: 0xc0858858:[ 187.480468]{0} 8858 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 187.489959]{0} 8878 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 187.499450]{0} 8898 00000064 c0d610c0 00009000 0000000f c0d61100 00000005 00000009 c0d61080 [ 187.508941]{0} 88b8 0000002c c0d34000 c0d61000 c0d61040 00000001 00001000 00000000 00000004 [ 187.518463]{0} 88d8 004fe000 00507000 00510000 00519000 00522000 00000000 00000002 0001dffb [ 187.527954]{0} 88f8 0001dfff 00002c0c 00002000 00000001 00000032 0000fffa 00000001 00000000 [ 187.537445]{0} 8918 00000001 d6c08800 d6d400c0 c0592010 c018b5ec c018a65c c0187d74 00000000 [ 187.546966]{0} 8938 c018b4e8 c0188298 c018824c 00000000 00000000 c0187650 00000003 00000000 [ 187.556457]{0}[ 187.556457]{0} R3: 0xc0838a00:[ 187.561859]{0} 8a00 6d75536b 7972616d 3178303d 556d202c 41726573 76697463 53797469 616d6d75 [ 187.571350]{0} 8a20 303d7972 202c3078 6f6f426d 6d6f4374 74656c70 743d6465 0a657572 302d3130 [ 187.580841]{0} 8a40 32312031 3a32353a 352e3632 20203039 33373720 38202020 44203332 776f5020 [ 187.590362]{0} 8a60 614d7265 6567616e 72655372 65636976 6168203a 656c646e 646e6153 3a6e616d [ 187.599853]{0} 8a80 6e616320 61657244 61663d6d 2c65736c 61576d20 7566656b 73656e6c 73413d73 [ 187.609374]{0} 8aa0 7065656c 2d31300a 31203130 32353a32 2e36323a 20303935 37372020 20202033 [ 187.618865]{0} 8ac0 20353837 63412056 69766974 614d7974 6567616e 73203a72 74726174 76726553 [ 187.628356]{0} 8ae0 3a656369 746e4920 20746e65 6361207b 6f633d74 6e612e6d 696f7264 6d6d2e64 [ 187.637847]{0}[ 187.637847]{0} R4: 0xd5912800:[ 187.643249]{0} 2800 00001008 c08ca248 00000000 00000000 00000000 00000000 00000000 00000020[ 187.652740]{0} 2820 00000000 0000c350 0000c350 00000000 00000000 00000000 00000000 00000000 [ 187.662261]{0} 2840 00000000 00000000 e5900000 e3031670 e7d00001 e3500000 1a00001a e51f0da8 [ 187.671752]{0} 2860 e5900000 e3041230 e0800001 e5d00001 e3500002 1a000001 e3a00000 eb00f0e1 [ 187.681274]{0} 2880 00000000 d3baa000 00000002 00404100 00000000 c05a6dd8 a0010193 ffffffff [ 187.690765]{0} 28a0 d59128dc c000d4d8 c08ca248 ffffffff 00000011 d5912000 00000000 c08ca248[ 187.700286]{0} 28c0 c08ca248 ffffffff 00000000 00000000 60010193 00000000 00000000 d59128f0[ 187.709777]{0} 28e0 c00e02e8 c05a6dd8 a0010193 ffffffff 04306afd 00000000 00000008 00000000[ 187.719268]{0}[ 187.719268]{0} R5: 0xc0d36a00:[ 187.724670]{0} 6a00 00000000 d6c4d460 d6c4d460 00000000 00000001 00000000 00000000 00000000 [ 187.734161]{0} 6a20 d6c216c0 00000000 00000000 00000001 00000000 00000000 00000000 00000000 [ 187.743682]{0} 6a40 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 187.753173]{0} 6a60 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 187.762664]{0} 6a80 39133912 00000002 00000400 00000500 00000340 000001d0 000000f4 ffffd3cb [ 187.772186]{0} 6aa0 00000000 00000000 00000000 00000000 00000400 00000000 00002f5b 00000000 [ 187.781677]{0} 6ac0 0003ec12 00000000 00000400 00000000 00000001 00000001 3c41cf92 0000000f [ 187.791198]{0} 6ae0 84652f3a 0000000c 84652f3a 0000000c d59128c0 d59128c0 00000000 00000000 [ 187.800689]{0}[ 187.800689]{0} R6: 0xd3ba9f80:[ 187.806060]{0} 9f80 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 187.815582]{0} 9fa0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 187.825073]{0} 9fc0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 187.834564]{0} 9fe0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 187.844055]{0} a000 00000000 40000003 00000000 d5912880 c087e268 00000000 00000015 d5912880 [ 187.853576]{0} a020 c0d36a80 d3baa000 d54b4e00 d54b4a80 00000000 d542c380 d3babe04 d3babdd8 [ 187.863067]{0} a040 c05a6118 00000000 00000000 00000000 00000000 00000000 01010000 00000000 [ 187.872589]{0} a060 b6f3ff24 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 187.882080]{0}[ 187.882080]{0} R7: 0xd5912ad8:[ 187.887481]{0} 2ad8 d5910d80 d5912adc d5912adc d5910fdc d5910fdc d5912880 d5912af0 d5912af0 [ 187.896972]{0} 2af8 d5912af8 d5912af8 00000000 d0997848 d0997840 00000000 d099784c d0997840 [ 187.906463]{0} 2b18 d5911018 d185dc10 d185dc00 d5912b24 d5912b24 00000000 00000000 00000000 [ 187.915985]{0} 2b38 00000000 00000006 00000000 00000006 00000000 00000000 00000000 c05a6dd8 [ 187.925476]{0} 2b58 a0010193 ffffffff d5912b9c c000d4d8 c08ca248 ffffffff 0000000f d5912000[ 187.934967]{0} 2b78 00000000 c08ca248 c08ca248 ffffffff 00000000 00000000 60010193 00000000[ 187.944488]{0} 2b98 00000000 d5912bb0 c00e02e8 c05a6dd8 a0010193 ffffffff 00000030 00000000 [ 187.953979]{0} 2bb8 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 187.963470]{0}[ 187.963470]{0} R10: 0xd6c51a80:[ 187.968963]{0} 1a80 d6c3e004 d6c50000 00000000 c08ca248 c08ca248 ffffffff 00000000 00000000[ 187.978485]{0} 1aa0 60010193 00000000 00000000 d6c51ac0 c00e02e8 c05a6dd8 a0010193 ffffffff[ 187.987976]{0} 1ac0 00000000 00000000 fffff6ff 68fe7bdf fefe7fdb fffe7ffb fdfffff5 89fffffd[ 187.997497]{0} 1ae0 fb773bd7 00000000 ffbffffd 00001008 c0862a38 c08ca248 d6c51bd8 00000000[ 188.006988]{0} 1b00 00000000 60010193 00000000 c05980f0 c06fb857 d6c51b2c 00001008 d6c51b2c[ 188.016479]{0} 1b20 00001008 c0008364 c06fb857 c06fb93b 00001008 c08ca248 00000400 00400000[ 188.025970]{0} 1b40 d6c50dc1 00000000 00000000 d6c51b4c d6c51b4c 00000000 877ea4da 0000002b[ 188.035461]{0} 1b60 000ba43c 00000000 ffea937b ffffffff 00007736 00000000 00000000 00000000[ 188.044982]{0} Process ??? (pid: 2034, stack limit = 0xd3baa238)[ 188.052337]{0} Stack: (0xd3babdf8 to 0xd3bac000)[ 188.057525]{0} bde0: d5912880 c0d36a80[ 188.067016]{0} be00: d3baa000 d5912b58 d3babe3c c05a6058 c083fad0 c0838a80 0000004c d3baa000[ 188.076538]{0} be20: 200f0013 ffffffff d3babe84 c000d560 d3baa000 00000000 d3babe4c c05a6614[ 188.086029]{0} be40: 000003ff c02ba184 ******** c000d578 0000b9ca ffffffff 0000475c c02ba158[ 188.095520]{0} be60: 00000001 00000014 f8899000 c088e470 0000001c 00000000 00000000 00000000[ 188.105041]{0} be80: c0d34344 d3babe98 c001ab70 c02ba184 200f0013 ffffffff 0000001e 00000000[ 188.114532]{0} bea0: 00000000 c08616f8 00000000 c001ac00 00000000 00000000 00000064 c001775c[ 188.124053]{0} bec0: 00000000 c00179a0 00000004 00000000 00000000 c0593da8 00000004 c0591ac8[ 188.133544]{0} bee0: b8f1ec44 0000080f 00000028 0000080f 00000000 00000004 00000004 00000002[ 188.143035]{0} bf00: d6ce01c0 d09f3180 d09f3198 c05fe518 c0d58050 c0591bec c0d58048 c05921c8[ 188.152557]{0} bf20: 00000002 d3babf80 00000002 c02f9ee0 00000002 c01dca14 c5034480 00000002[ 188.162048]{0} bf40: b8f23e54 d3babf80 00000000 00000000 00000000 c018ed10 c5034480 b8f23e54[ 188.171569]{0} bf60: 00000002 c5034480 00000000 b8f23e54 00000002 00000000 00000000 c018f050[ 188.181060]{0} bf80: 00000000 00000000 00000002 00000003 00000002 00000001 00000004 c000dac4[ 188.190582]{0} bfa0: d3baa000 c000d940 00000003 00000002 00000001 b8f23e54 00000002 ffffffff[ 188.200073]{0} bfc0: 00000003 00000002 00000001 00000004 b8f23e54 00000000 00000000 00000000[ 188.209594]{0} bfe0: 00000000 bede57b8 b6f50c5d b6eef338 20010010 00000001 e3c0600f e320f000[ 188.219085]{0} [<c0103b78>] (sched_info_arrive+0x14/0xc8) from [<c05a6058>] (__schedule+0x380/0x504) [ 188.229370]{0} [<c05a6058>] (__schedule+0x380/0x504) from [<c05a6614>] (preempt_schedule_irq+0x44/0x64) [ 188.239959]{0} [<c05a6614>] (preempt_schedule_irq+0x44/0x64) from [<c000d578>] (svc_preempt+0x8/0x18) [ 188.250366]{0} [<c000d578>] (svc_preempt+0x8/0x18) from [<c02ba184>] (__loop_delay+0x0/0xc)[ 188.259765]{0} Code: e28db014 e5901004 e59f20ac e59f30ac (e591c014)[ 188.266906]{0} ---[ end2.1.2 分析原因sched_info_arrive函数的代码如下:static void sched_info_arrive(struct task_struct *t){unsigned long long now = task_rq(t)->clock, delta = 0;if (t->sched_st_queued)delta = now - t->sched_st_queued;sched_info_reset_dequeued(t);t->sched_info.run_delay += delta;t->sched_st_arrival = now;t->sched_info.pcount++;rq_sched_info_arrive(task_rq(t), delta);}内核panic后PC指针的位置在sched_info_arrive+0x14/0xc8,将这个函数反汇编后如下:00000000 <sched_info_arrive>:0: e92d48f0 push {r4, r5, r6, r7, fp, lr}4: e28db014 add fp, sp, #208: e5901004 ldr r1, [r0, #4]c: e59f20ac ldr r2, [pc, #172] ; c0 <sched_info_arrive+0xc0>10: e59f30ac ldr r3, [pc, #172] ; c4 <sched_info_arrive+0xc4>14: e591c014 ldr ip, [r1, #20]18: e792210c ldr r2, [r2, ip, lsl #2]task_rq(t) -> cpu_rq(task_cpu(p))task_cpu(p) -> task_thread_info(p)->cpu;#define task_thread_info(task) ((struct thread_info *)(task)->stack)(task)->stack) 就是传⼊的参数指针p的第⼆个变量,是个指针,然后将其转化为struct thread_info型的指针。
cache 的mesi协议
cache 的mesi协议【最新版】目录一、MESI 协议的概念与作用二、MESI 协议的类型三、MESI 协议的具体内容四、MESI 协议的优点与应用正文一、MESI 协议的概念与作用MESI 协议,全称为 Write-Once 总线监听协议,是一种用于管理计算机系统中 Cache 一致性的协议。
在现代计算机系统中,由于多个 Cache 的存在,如何保证各个 Cache 之间的数据一致性成为了一个重要的问题。
MESI 协议通过规定 Cache 的行为,解决了这个问题,保证了 Cache 的一致性。
二、MESI 协议的类型MESI 协议主要有两大类,分别是监听协议和目录协议。
1.监听协议:每个 Cache 被监听监听其他 Cache 的总线活动。
这种协议下,每个 Cache 都可以观察到其他 Cache 的数据变化,从而实现一致性。
2.目录协议:全局统一管理 Cache 状态。
这种协议下,系统中有一个专门的目录 Cache,负责管理所有 Cache 的状态,其他 Cache 只需根据目录 Cache 的指示进行操作即可。
三、MESI 协议的具体内容MESI 协议的核心思想是“写一次,读多次”。
具体来说,当一个 Cache需要修改数据时,它首先将数据写入自己的缓存,然后向其他 Cache 发送通知,让其他 Cache 也修改相应的数据。
这个过程分为以下几个步骤:1.Write-Once:每个 Cache 在接收到数据写入请求时,只会将数据写入一次,不会覆盖已有的数据。
2.Update:当 Cache 中的数据被修改后,Cache 会将修改后的数据通知给其他 Cache,让其他 Cache 也进行相应的修改。
3.Response:其他 Cache 在接收到通知后,会根据通知进行数据修改。
4.Invalidate:当 Cache 中的数据被证明是无效的时,Cache 会立即将该数据标记为无效,不再使用。
多核处理器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存储体:存放由主存调入的指令与数据块。 地址转换部件:建立目录表以实现主存地址到缓存 地址的转换。 替换部件:在缓存已满时按一定策略进行数据块替 换,并修改地址转换部件。
高速缓冲存储器一致性
感谢观看
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论文缓存一致性的解决方案大学论文
缓存一致性的解决方案摘要:随着计算机技术的飞速发展,CPU时计算机组成的核心部分,提高CPU的性能一直是一个很重要的课题,所以CPU从单核提高到多核,但是总会有一些技术上的难题需要解决,这其中,Cache的一致性问题的解决就推动计算机多核的发展,解决一致性人们提出了一些协议,这其中比较好的解决方案是MESI协议,MESI协议通过监视机制,实时监视总系的事务,当修改某一缓存时,通过通知其它同样持有同一内容的缓存来保持缓存的一致性。
这一协议是目前比较好的解决缓存一致性问题的解决方案,本篇文章就这一经典协议做了分析与总结。
关键词:缓存一致性窥探协议引言现代的CPU上,大部分都需要通过缓存来进行内存访问,由于物理架构的原因,CPU没有管脚直接连到内存,所以CPU的读/写(以及取指令)单元正常情况下不能进行直接内存访问。
相反,CPU和一级缓存通讯,而一级缓存才能和内存通讯。
而现在又大多有了二级缓存,甚至三级缓存。
缓存是分段(line)的,即下文要用的“缓存段”(cache line),当我们提到”缓存段”的时候,就是指一段和缓存大小对齐的内存,而不关心里面的内容是否真正被缓存进去。
当CPU看到一条读内存指令时,它会把内存地址传递给一级数据缓存,一级数据缓存会检查它是否有这个内存地址对应的缓存段,没有的话,它会把对应的缓存段加载进来。
如果进行的是读操作,这就很简单,所有级别的缓存都遵循以下规律:在任意时刻,任意级别缓存中的缓存段的内容,等同于它关联内存中的内容。
如果进行写操作,情况就会变得复杂些,一般分为两种基本的写模式:直写(write-through)和回写(write-back)。
直写简单一点:透过缓存,直接把数据写到下一级内存中,如果对应的段被缓存了,就更新缓存中的内容,同样遵循前面的定律:缓存中的段永远和它关联内存的内容匹配。
回写相对复杂一些,回写模式下不会立即把数据传递给下一级,而是仅仅修改本级缓存中的内容,并将其标记为“脏段”,“脏段”会在触发回写,就是将缓存段中的内容传递给下一级,然后脏段又变干净了,即当一个脏段被丢弃了,总是要进行一次回写,在回写模式中,去掉了“任意时刻”这个修饰词,而是以相对弱化的条件代替它:缓存段干净时,缓存段的内容和内存一致;缓存段是脏段时,缓存段中的内容最终要回写到内存中,也就是说可以允许关联内存不和缓存内容同步,但最终要同步。
cache 的mesi协议
cache 的mesi协议【最新版】目录一、MESI 协议的概述二、MESI 协议的工作原理三、MESI 协议的优点与应用正文一、MESI 协议的概述MESI(Modified, Exclusive, Shared, Invalid)协议,即写一次总线监听协议,是一种用于维护 Cache 一致性的协议。
在计算机系统中,Cache 一致性是指多个 Cache(缓存)之间的数据一致性问题。
当多个处理器访问同一个数据时,需要确保各个处理器所访问的数据是一致的。
MESI 协议就是在这样的背景下应运而生的。
二、MESI 协议的工作原理MESI 协议的核心思想是让每个 Cache(缓存)监听其他 Cache(缓存)的总线活动,以达到数据一致性的目的。
MESI 协议的工作过程可以分为以下几个步骤:1.写入(Write):当一个处理器向 Cache(缓存)写入数据时,该数据会被标记为“Modified(修改)”状态。
此时,该处理器会向其他处理器发送写入请求,要求其他处理器也将其 Cache(缓存)中的相应数据标记为“Modified(修改)”。
2.独占(Exclusive):在数据被标记为“Modified(修改)”后,该数据在一段时间内只能被对应的处理器访问和修改。
其他处理器在此期间不能对该数据进行访问和修改,以确保数据的一致性。
3.共享(Shared):在独占期结束后,该数据会被标记为“Shared(共享)”状态。
此时,其他处理器可以访问和修改该数据,但需要遵循一定的协议规定,例如在修改数据时需要向其他处理器发送写入请求。
4.无效(Invalid):当数据在一段时间内未被访问时,该数据会被标记为“Invalid(无效)”状态。
此时,该数据可以被重新写入或删除。
三、MESI 协议的优点与应用MESI 协议的优点主要体现在以下几个方面:1.简单易懂:MESI 协议的工作原理相对简单,容易理解和实现。
2.高效性:MESI 协议能够保证 Cache(缓存)之间的数据一致性,减少因为数据不一致导致的处理器执行错误。
系统结构实验二报告 多Cache一致性 —— 目录协议
实验二多Cache一致性——目录协议一、实验目的1、加深对多Cache一致性的理解。
2、进一步掌握解决多Cache一致性的目录协议的基本思想。
3、掌握在各种情况下,目录协议是如何工作的。
能给出要进行什么样的操作以及状态的变化情况。
二、实验内容及步骤2.1、模拟器使用方法简介该模拟器模拟4个CPU(A、B、C、D)访存的工作过程。
每个CPU中都有一个Cache,该Cache包含有4个块,其块地址为0-3。
分布式存储器中有32个块,其块地址为0-31。
每个块状态用色块表示,其中灰色为“无效”状态,淡青色为“共享”状态,橘红色为“独占”。
主存中块的状态由其右边的目录项的颜色来表示,未缓冲状态由黄色来表示,其他两种状态同Cache块。
对于每一个CPU都可以指定所要进行的访问是读还是写(从列表中选),并在输入框中输入所要访问的主存块号,然后用鼠标单击在其右边的标有“↓”的按钮,模拟器就将开始演示该访问的工作过程。
2.2、目录协议基本思想(自己补充)2.3、实验步骤对于以下访问序列,写出目录协议所进行的操作。
实验二多Cache一致性——监听协议一、实验目的1、加深对多Cache一致性的理解。
2、进一步掌握解决多Cache一致性的监听协议的基本思想。
3、掌握在各种情况下,监听协议是如何工作的。
能给出要进行什么样的操作以及状态的变化情况。
二、实验内容及步骤2.1、模拟器简介该模拟器模拟4个CPU(A、B、C、D)访存的工作过程。
每个CPU中都有一个Cache,该Cache包含有4个块,其块地址为0-3。
集中共享存储器中有32个块,其块地址为0-31。
每个块状态用色块表示,其中灰色为“无效”状态,淡青色为“共享”状态,橘红色为“独占”。
对于每一个CPU都可以指定所要进行的访问是读还是写(从列表中选),并在输入框中输入所要访问的主存块号,然后用鼠标单击在其右边的标有“↓”的按钮,模拟器就将开始演示该访问的工作过程。
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,需要申请⼀块新的空间存放它。
解决分布式缓存数据一致性问题的四种有效方法
解决分布式缓存数据一致性问题的四种有效方法
作为一名程序员,如何解决好分布式缓存数据一致性问题是工作中常遇到的重要问题,今天,我们就来看看解决这一问题的四种有效方法!
1. 利用一致性哈希算法:一致性哈希算法可以确保在动态增加或减少节点时,能够有效地将键值对分布到所有的节点上,从而保证一致性。
2. 利用复制方法:缓存的数据需要复制到不同的节点上,以确保数据冗余性,防止单点故障,从而保证一致性。
3. 利用心跳机制:心跳机制可以定期检查缓存集群中所有节点的状态,并及时将不可用的节点从缓存集群中剔除,以确保缓存中的数据都是最新的,从而保证一致性。
4. 利用锁机制:在分布式缓存中,可以采用锁机制,如分布式锁,来保证多个节点之间的数据一致性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
面已经谈到,随着处理机数目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 命令修
改C1 的内容,不修改主存中的复本,C1 保持Dirty 状态 (4)如果C1 为Invalid,则写不命中。如果其他高速缓存中也没有 该数据块的复本,只有主存中有该数据块的复本,则将主存中的 复本复制到C1 中,再将要写入的内容 13写入C1,这是C1 和主存内容不一致。把C1 状态置为Dirty。写入 后,C1 与主存中的内容至少有一个单元不一致。 (5)如果C1 为Invalid,C2 为Dirty,这时主存中的内容与C2 中的 不一致。将C2 中的数据块复制到C1 中,将C1 的状态置为Dirty,发 Read-inv 使其他高速缓存的有关复本变成无效 (6)如果C1 为Invalid,C2 为Reserved,这时主存中的内容和C2 的 一致,将C1 的状态置为Dirty,发Read-inv,使其他高速缓存中的有 关复本变成无效状态。 4)读操作可能遇到的情况 (1)如果C1 为Valid,读C1 则读命中(Read-Hit),C1 状态不变 (2)如果C1 为Reserved,读C1 则读命中(Read-Hit),C1 状态不 变 (3)如果C1 为Dirty,读C1 则读命中(Read-Hit),C1 状态不
监听总线协议
如果接在共享总线上的处理机具有自己的本地高速缓存,那 么可以采用两种方法: 1.写无效策略和写更新策略: 1)写无效(Write invalidate ) 当任何一个处理机写自己的高速缓存时,由它负责把其他的高 速缓存复本变成无 效的,使其他高速缓存中(和主存中)的复本都是“过时”的。 根据对于主存中复本 的处理不同,又可以分成写通过和写回策略: ——写通过:更新主存中的复本,最后的状态是一个高速缓存 中的复本和主存中的复 本是有效的,其他复本都是无效的。 ——写回: 它使主存中的复本也无效,最终只有一个高速缓存 中的复本使有效的。 2)写更新 当任何一个处理机写自己的高速缓存时,改写其它所有的复 本。所以操作的结果是所有数据块的复本都是“有效”的。
基于目录的高速缓存一致性协扩展性差的缺陷,提出基于 目录的方法,使无效命令只发给存放特定数据块复本的某些高速 缓存。比如,对于一台处理机而言,如果除了本地高速缓存之外, 还有三个高速缓存中有这个数据块的复本,当对本地高速缓存进 行写操作时,只要发三个无效命令给对应的高速缓存即可,以。 这种点对点的高效方式代替了广播方式。因此这种方法在共享总 线结构的并行系统中应用时,可以降低总线带宽的占用;更为重 要的,这种方法也可以有效地使用在通过交换网络进行通信的并 行系统中。 2、 目录 显然,为了能够发挥这种方法的优势,就要要解决解决这样 的问题:无效命令发给谁?因此采用一个目录记录有关信息。这 也是该方法命名的原因。常见的目录结构有三种:全映射目录、 有限目录与链式目录,详细介绍全映射与链式目录。 1) 全映射目录
1)每个高速缓存复本可能出现的四种状态 (1)有效(Valid)与主存复本一致的高速缓存复本,即该复 本未经修改,所以这个复本不是唯一的正确复本。别的高速缓 存中也可能存在该数据块的有效复本。 (2)保留(Reserved)这一高速缓存的复本是第一次被修改, 并采用写通过方法写入主存。所以这个高速缓存中的复本与主 存中的复本是一致的。而且系统中也只有这两个复本是有效的。 (3)重写(Dirty)高速缓存中的复本不止一次被修改过,由于 不再采用写通过的方法,所以这个高速缓存中的复本是唯一的 有效复本,与主存和其他高速缓存中的复本都不一致。主存中 的复本也是无效的。 (4)无效(Invalid)与主存中和其他高速缓存中的复本不一致 或在高速缓存中根本没有该复本。 2)进行高速缓存操作时用到的信号 (1)P-Write:本地处理机写自己的高速缓存复本 (2)P-Read:本地处理机读自己的高速缓存复本 这两条命令都是局部/本地命令
Cache 一致性协议实现的基本方法
主讲:周艳芳 副讲:缴万鑫
知识回顾(一)
解决主存速度与CPU速度差距的办法: Cache --主存存储层次:采用高速缓冲存储器方式
知识回顾(二)
问题引出
Cache存储器中保存的字块是主存中相应字块的一个副 本。如果程序执行过程中要对该字块的某个单元进行读写 操作,就会遇到如何保持Cache与主存的一致性问题。 1)不命中时:直接把待写的信息写入主存。 2)命中时:有两种写入方式。 ①写回法:只更新Cache单元,并加以标记, 当该块从Cache 移出时,再更新相应的主存单元。 ②写直达法:Cache单元与主存单元同时写。 写回法速度快,但有一段时间主存内容与 Cache内容不一致; 写直达法能随时保持主存数据的正确性,但有可能增加多次 不必要的写主存。
变 (4)如果C1 为Invalid,C2 和C3 中没有相应复本。则读C1 时读缺 失。这时只有内存中有正确的复本。将其取到C1 中,C1 改为 Valid。 (5)如果C1 为Invalid,C2 为Dirty,则读C1 时读缺失。这时只有 C2 中的内容是正确的。发Read-Blk 信号将C2 的复本拷贝到C1 中, 同时修改内存复本。C1 和C2 都改为Valid (6)如果C1 为Invalid,C2 为Reserved,则读C1 时发生读缺失, 这时发Read-blk 信号,把C2 中的复本复制到C1 中,C1 和C2 的状 态都改为Valid 5)写一次协议存在的问题: (1)开销大:发无效命令使对应复本变成无效状态的开销;读 高速缓存时由于数据块复本变成无效状态造成读缺失,从其他地 方取得数据的开销。 (2)发诸如无效命令时,通常只用共享总线才能提供所需要有 效的广播手段,其他高速缓存才能够进行监听。所以这种写一次 协议的应用对象主要是共享总线的并行系统,因此可扩展性不好。
在全映射目录中,存放与全局存储器中每个数据块相关的信 息。即该数据块在哪些高速缓存中。系统中的每个高速缓存可 以同时存储任何存储任何数据块的复本。即每个目录项包含N 个指针(N 为处理机的个数),一个复本可以在N 个高速缓存中。 随着处理机数目N 的增大、存储器容量的增加,所需要目录的 容量以N2 的数量级增加。在目录本身就很庞大的情况下,还需 要增加一位C/D 位,以指示该复本是否允许写。所以每个高速 缓存的数据块有两个状态位,有效与允许写。 (1) 全映射目录的三种不同状态 通过一个例子进行说明:假设有有3 台处理机P1,P2,P3 (对应的高速缓存为C1,C2,C3),都要对主存中的数据单元X 进行操作(实际上,需要对X 所在的数据块进行操作,下面类似 “单元X 的复本”的只是为了明确讨论对象的一种说法)。 第一种状态:系统中所有高速缓存中都没有单元X 的复本P1, P2,P3 所有高速缓存中都没有单元X 的拷贝。 当三个高速缓存C1,C2,C3 同时请求单元X 的拷贝时,就进 入了第二种状态。在这种状态下,目录项的重写位(C/D 位) 被置为未写(C)状态,表示不允许任何处理机写入该数据块。
Cache 一致性
Cache数据与主存数据一致是指:在采用Cache的系统中, 同样一个数据可能既存在于Cache中,也存在于主存中, 两者数据相同则具有一致性,数据不相同就叫做不一致 性。如果不能保证数据的一致性,那么,后续程序的运 行就要出现问题。
解决Cache一致性问题的两种协议
目前,在并行系统的产品中大多数都采用基于总线的存 储器结构。总线是保证高速缓存一致性的最方便的设备,它 允许系统中各个处理机能够监测对存储器进行的所有操作, 如果这些操作破坏了本地高速缓存中数据的一致性状态,高 速缓存控制器就可以采取相应的动作维护高速缓存的一致性。 采用这种机制维护高速缓存一致性的协议的系统中,每个高 速缓存都在监听其它高速缓存的操作,所以称为监听总线协 议。而对于可扩展多处理机系统,常常采用互连网络实现多 处理机互连,其网络带宽随着处理机数目的增加而增大,但 是这些网络没有方便的监听机制,也难于进行有效的广播, 所以常常采用基于目录的协议。下面分别对这两类协议进行 介绍。
这两种策略都存在缺点和问题。写无效的问题在于两个方面: 使各个高速缓存中数据块的复本无效的开销比较大;由于无效复 本引起缺失造成的开销。而写更新的问题在于更新所有复本的开 销比较大。 2、写一次协议 结合了上面介绍的协议的优点,James Goodman 在1983 年提 出了一种基于总线的多处理机系统的高速缓存一致性协议。它的 主要思想和作法是:高速缓存块的第一次写采用写通过策略,产 生一份正确的主存复本,并且使其他高速缓存的复本无效;之后, 就采用写回策略:其他高速缓存和主存中的复本均无效。 在设计、分析高速缓存一致性协议时要考虑和解决的几个主要 问题有 1)高速缓存可能出现的状态集合 2)共享主存的状态 3)为维护一致性而引起的状态转换 下面分别结合写一次协议进行说明