CMP中Cache一致性协议的验证

合集下载

基于SystemC的Cache一致性协议描述与验证

基于SystemC的Cache一致性协议描述与验证

K e y Wo r d S : Ca c h e Co h e r e n c e P r o t o c o l S y s t e mC Hi g h — l e v e l L a n ua g g e S i mu la t i o n v e i r f y i n g F L AS H S CI P r o t o c o l


l l _
应 用 研究
基于 S y s t e mC的 C a c h e 一致性协议描述与验证
张娅
f 西北核技术研 究所科技信息中心 新疆乌鲁木齐 8 4 1 7 0 0 )
摘要: F L S A H S C I 协议作 为Ca c h e  ̄ 致性 协议 的一种 , 具 有灵 活性 、 高效 性和 适应性 强等 特 点, 是 目前 最具发展 潜 力的Ca c h e - 致性协议 之一 。 该协 议在 继 承标 准S CI 协议低 存储 开销 、 维护精 确 共享信 息 等优点 的 同时 对标 准S CI 协 议进 行优 化, 得 到 更 为高效 、 灵 活的F L A S H S C I 协议 。 本 文 用S y s t e mC高层 次语 言对 F L AS H S C I 协议 进行 建模 与描 述, 并验证其 正 确性 。 模 拟 结果证 明 了F L AS H S C I 协议 的正 确性 以及 其在 存储 开销和执 行
d e c l a r e s ha t t F LAS H S CI p r o t o c o l i s e n ir f e d c o re c t a nd p r o v e he t c or r e c ne t s s o f F L AS H S CI p r o t o c o l wi h t i t s s u pe io r it r y i n s t or ag e C O S t a nd e ic f i e n c y i n i mp l e me n t a io t n.

cache一致性协议实现的基本方法

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一致性问题和解决方法作者辽宁工程技术大学摘要高速缓冲存储器一致性问题是指高速缓冲存储器中的数据必须与内存中的数据保持同步(一致) 。

多核处理器将一个以上的计算内核集成在一个处理器中,通过多个核心的并行计算技术,增强处理器计算性能。

单片多处理器结构(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一致性协议验证中覆盖率驱动的随机验证方法

一种Cache一致性协议验证中覆盖率驱动的随机验证方法
中 图分类号
软件高速缓存 ( ah ) 随机 验证 覆盖率驱动 机器 学习 朴素贝叶斯模 型 C c e
T 32 P0 文献标识码 A
A CoVERAGE- DRI VEN RANDoM VERI CATI FI oN ETHoD N M I CACHE CoHERENCE
第2 8卷 第 1 期 1
21 0 1年 1 1月
计 算机 应 用与软 件
Co mpu e p iai n n o t r trAp lc to s a d S f wa e
Vo . .1 128 No 1 NO .2 1 V 01

种 C c e一 致 性 协 议 验 证 中覆 盖 率 驱 动 的 随机 验 证 方 法 ah
经成为集成 电路设计 的瓶 颈。
上 述 问题 。
图1 展示 了一个简单 的以覆 盖率 为驱动 的验证工作流程 。
随机测试生成技术是 当今 大规模集成 电路仿真验证 流程中
的重要支撑技术 , 在集成 电路验证领域 , 特别是微处理器功 能验 证领域 , 具有 重要 地位… 。但是人 工编 写测试 向量需 要花 费 它 大量的时间和人力成本 , 并且测试 向量 的整体规 模会受到局 限。
李 拓 王恩东 胡雷均 秦济龙
( 浪潮 ( 北京 ) 电子信息产业有限公司 北京 10 8 0 05)
摘 要
随机验证技术是 当今 大规模集成 电路仿真验证流程 中的一项重要支撑 技术 , 盖率驱 动的随机测试 生成方法是 目前该 覆
领 域研 究的热 点之 一。针 对 C ce一致性协议 的验证 目标 , ah 介绍一种 引入 基于朴 素贝叶斯模 型的机器学 习来 完善基 于覆盖率驱 动 的随机 验证 的方法 , 并结合相关 的实 际验证过程对该 方法进 行 了分析和讨论。 关键词

多核处理器及其Cache一致性机制

多核处理器及其Cache一致性机制

由于 指令 级 并 行需 要 的硬 件 资源 最 少 , 处理 器 微体 系结 构 中 , 早 在 最 出现 的并 行技 术就 是指 令级 并行 , 而实 现指 令级 并行 通 常采用 的是 V I ( LW 超 长指令 字 ) 技术 和S pr saa( 标量 ) u e— clr超 技术 。 V uw : 处理 器在 处理 一 个 长指令 字 中赋 予编 译程 序 控制 所有 功能 单元
多 核处 理 器 结 构不 仅 有 性 能潜 力 大 、 成度 高 、 集 并行 度 高 、 结构 简 单
指令 , 以获 得 并 行性 。 2线程 级 并行 .
和设计验证方便等诸多优势 , 而且它还能继承传统单核处理器研究 中的某些 成果, 例如 同时 多线 程 、 低 功 耗等 。 减压 但多 核 处理 器 毕竟 是 一种 新 的结 构给多 核处理器 的未来提出了挑战。
1前 言 .
自从计算机诞生 以来 , 推动处理器高速发展的动力主要来源于两个方
面 : 电子 技术 的 巨大 进 步 和处 理 器体 系 结 构 的演 化和 发 展 , 微 而这 两 个 动力 则促成 了多 核处理 器 技 术 的 出现和 发展 。 多 内 核是 在 一 个 处理 器 中集 成两 个 或 多 个 完整 计 算 引擎 , 内核 。 即 而 多核处 理器 则是 将 多个 功能 完全 的 核心 集成 在 同一个 芯 片上 , 个芯 片作 为 整
的能力 , 使得被编译的程序能够精确地调度在何处执行每个操作、 每个寄存 器存储器读写和每个转移操作 。 S p r saa : u e — clr 由于各个指令之间可能用到不同的数据单元, 所以通过 次发射多个指令来获取指令级的并行。 此技术 , 主要是依靠运行时的复杂 硬件 逻 辑 , 打乱 指令 的执 行 顺序 , 发射 阶段 同时 发射 多个 使 用不 同资 源 的 在

cache一致性协议实现的基本方法

cache一致性协议实现的基本方法

在全映射目录中,存放与全局存储器中每个数据块相关的信 息。即该数据块在哪些高速缓存中。系统中的每个高速缓存可 以同时存储任何存储任何数据块的复本。即每个目录项包含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)状态,表示不允许任何处理机写入该数据块。
第三种状态是在C3 请求对该块进行写操作的许可权,这时重 写位被置成重写(D)状态,而且有一个指针指向C3 的数据块。 下面详细分析第三种状态。 在第二种状态下,C1,C2,C3 同时请求X 单元的复本,这时 目录项中的三个指针(处理机位)被置1,表示这三个高速缓存 中已经有数据的复本。在第三种状态下,P3 请求对该复本的允 许写权。则需要经过下面6 个步骤: a. C3 检查出包含单元X 的块是有效的,但允许写位状态是不 允许写状态。 b. C3 向包含X 的存储器模块发出写请求,并暂停P3 工作 c. 该存储器模块发出一个无效命令给 C1 和C2(根据目录项中 的内容发无效命令) d. C1 和C2 收到无效命令之后,把相应位置0,表示含单元X 的 数据块已经无效,并发送一个回答信号给存储器 e.存储器受到回答信号之后,将 C/D 位置1,清除指向C1 和C2 的指针,发允许写信号给C3 f.C3 收到允许写信号之后,修改高速缓存状态并激活P3在上

ARMLinux内核panic之cache一致性——cci-400cache一致互联

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一致性问题和解决方法

浅谈并行系统中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一致性的基本概念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一致性

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中指定区域的内容写⼊到内存。

系统结构实验二报告 多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⼀致性问题。

多个设备都允许访问主存时,cache中的内容被cpu修改,⽽主存中的没有,同时该内容需要写⼊磁盘,此时从内存写⼊到磁盘的数据和cache(希望的数据)不⼀样。

当多个CPU都有各⾃的cache⽽共享主存时,若有⼀个cpu修改了⾃⾝cache中的内容,则对应的主存块和其他cpu中对应的cache⾏的内容都变为⽆效(共享数据,数据更改了,未及时更改的那些数据都没⽤了)Cache⼀致性问题的关键是处理好写操作。

全写法对写命中,写未命中的解释:cache的写命中和写未命中,就是磁盘或者内存上的存储区域之前有没有写过数据。

如果有,这次再写到相同的区域叫写命中;如果写到其他区域,叫写未命中。

写操作时,若写命中,则同时写cache和主存;若写不命中,则有以下两种⽅式。

写分配法:先更新主存中的数据,再将更新后的主存块装⼊到cache中。

可重复利⽤程序的局部性原理。

⾮写分配法:仅更新主存中数据不写⼊cache,可减少读⼊主存块的时间,但是没有很好地利⽤程序地局部性原理。

为减少写主存地开⼼,通常再cache和主存之间加⼀个写缓冲,写⼊cache时也写⼊缓冲中,然后由存储控制器将写缓冲中的数据写⼊主存。

(写缓冲的读取速度很快,远远⾼于对主存的读取速度)回写法CPU执⾏写操作时,若写命中,则信息只写⼊cache不写⼊主存;若写不命中,则在cache中分配⼀⾏,将主存块调⼊该cache⾏中并更新相应单元的内容。

该⽅式下,写不命中时通常采⽤写分配法进⾏写操作。

我个⼈理解,写命中就是这个数据在cahce和内存⾥,但是内容不对需要更新。

写未命中就是,这个数据不在内存,也不在cache,需要申请⼀块新的空间存放它。

5.3.5_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 时  如何保持。

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一致性

多机系统中的Cache一致性

CACHE一致性策略
对于执行同一数 据的多次写操作,而 且期间没有读操作的 情况,写更新协议会 执行多次广播,而写 无效协议只要在最初 时设置一次无效即可。 对于一个处理器写入数据和另外一 个处理器读出写入数据的情况,通常在 写更新协议中两者间的延迟会小一些, 因为在执行读操作处理器的高速缓存中 所写数据的副本能够立即更新。在写无 效协议中,数据副本先要被置为无效, 然后执行读操作时,发现数据无效后会 阻塞,直到读入新的副本才能继续执行。
CACHE一致性策略
写更新( write-update )
其设计思想是:某处理器要修改其Cache中的一共 享块时,要广播具体的修改数据及地址,含有此共享 块的各个Cache同时予以修改。
写失效( write-invalidate )
其设计思想是:某处理器要修改其Cache中的一共 享块时,无需广播具体的修改数据,只需给出块地址 和其它必要的指示信息,将其它Cache中的副本设置 为无效,然后处理器对Cache中的该共享块完成一次 本地写操作。
造成多处理机系统Cache不一致问题的原因主要有三个方 面:
共享可写数据所造成的不一致
进程迁移所造成的不一致性
绕过高速缓存的I/O所造成的不一致
共享可写数据所造成的不一致
核 Cache shared memory
core1 core2
x x
ore2
监听CACHE一致性协议
监听协议实际上是一组互相协作的有限状态机所代表的分 布式算法,它由三部分组成:①状态集合:一个与本地高速 缓存块相关联的状态集合;②状态转换图:以当前状态和处
理器请求,或观察到的总线事务作为输入,并输出该高速缓
存块的下一个状态;③动作:与每个状态转换相关的实际动 作,这是由总线、高速缓存和处理器的具体设计来决定的。 同一个块的不同状态机不是独立操作的,而是由总线事务来 协调的。

Cache与主存一致性

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数据与主存数据相一致。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

CMP中Cache一致性协议的验证摘要: CMP是处理器体系结构发展的一个重要方向,其中Cache一致性问题的验证是CMP设计中的一项重要课题。

基于MESI一致性协议,本文建立了CMP的Cache一致性协议的验证模型,总结了三种三种验证方法验证方法——状态列举法、模型检验法和符号状态法,并给出了每一种方法的复杂性分析。

关键词: CMP Cache一致性状态列举模型检验符号状态模型集成电路工艺的发展使得芯片的集成度不断提高,一种新型体系结构——CMP(Chip Multiprocessor ——片上多处理器)应运而生,通过在一个芯片上集成多个微处理器核心来提高程序的并行性。

多个微处理器核心可以并行地执行程序代码,具有较高的线程级并行。

由于CMP采用了相对简单的单线程微处理器作为处理器核心,使得CMP具有高主频、设计和验证周期短、控制逻辑简单、扩展性好、易于实现、功耗低、子通信延迟低等优点。

此外,CMP还能充分利用不同应用的指令级并行和线程级并行,成为处理器体系结构发展的一个主要趋势。

在CMP中,多个处理器核心对单一内存空间的共享使得处理器和主存储器之间的速度差距的矛盾更加突出,因此CMP设计必须采用多级高速缓存Cache,通过层次化的存储结构来缓解这一矛盾。

图1给出了共享内存的CMP系统模型系统模型。

与常规SMP系统类似,CMP 系统必须解决由此而引发的Cache一致性问题以及一致性验证问题。

采用什么样的Cache一致性模型与它的验证方法都将对CMP的整体设计与开发产生重要影响。

从CMP中Cache 一致性协议的验证技术的发展来看,目前应用比较广的验证方法有状态列举法[1]、模型检验法[2][3]、符号状态模型法[4]三种。

本文结合CMP的特点,建立了基于MESI一致性协议的CMP验证模型,并在此模型基础上分析了这三种验证方法的基本原理,每一种方法的复杂性分析及优缺点。

1 Cache一致性协议的建模从本质上看Cache一致性协议是由一些过程组成的,这些过程包括Cache与内存控制器之间交换信息以及对处理器事件做出的反应。

因此用有限状态机有限状态机模型来描述Cache一致性协议是一件很自然的事情。

Cache一致性协议可以在三种不同的层次上建立验证建模。

最高层次是对整个协议行为的抽象,中间层次是在系统/消息传递一级进行抽象,最低层次则是在结构模型一级进行抽象,表1给出了这三个层次的抽象模型的特点[5]。

目前对Cache一致性协议验证研究中,主要是对一致性协议在系统级系统级进行模型抽象。

这主要有三方面的原因:首先,在行为级的抽象中把所有的状态转换操作都看作是原子操作是不切合实际的。

其次,在行为级层次上进行的验证实际作用不大。

最后,由于系统复杂性的急剧增加,在结构模型的层次上验证一个Cache一致性协议是不可行的。

在系统级上对Cache一致性协议进行验证具有相对适中的复杂性。

在这个层次上,可以通过有限状态机之间的消息传递来描述各个组件间的操作,加深对系统各个组件间相互作用的理解。

此外,基于有限状态机的模型使得我们可以应用层次性验证的方法。

即首先在系统级的层次上验证协议的正确性,之后就可以进入到更加低级的层次去验证具体的实现了。

2 Cache一致性协议的验证方法2.1 系统模型为了重点说明验证方法原理,减少具体验证过程的复杂性,本文所用的验证分析模型由两个相同的处理器组成,每个处理器有一个Cache;每个Cache 有一个Cache行,应用MESI一致性协议。

Cache的有限状态机具有四个状态[6]:M:修改状态,E:独占状态,S:共享状态, I:无效状态。

图2给出了验证模型,图3给出了MESI 一致性协议的有限状态机。

应该指出,建立只有一个Cache行的系统模型对于大多数的Cache协议验证都是足够的。

这是由于协议执行的粒度是Cache行。

而对于执行粒度是word的Cache协议,就必须建立起每一个Cache行有几个word的模型,但是验证的基本原理都是相同的。

2.2 状态列举法(StateEnumeration) 状态列举法[1][7]研究整个系统的状态空间。

首先用有限状态机来描述协议中组件的模型,并定义全局状态由所有组件的状态组成。

然后推导系统所有的可达状态,推导过程从一个初始的全局状态出发,进行每一种可能的转换,这将产生出一些新的状态。

新的状态如果是第一次出现,将被插入到工作队列,重复这个过程直到再没有新的状态产生为止。

在得到所有的可达状态集合后,需要验证对于每一个可达的全局状态。

若所有Cache 中的数据都是一致的,即可说明要验证的协议的正确性。

在我们的验证模型中,全局状态用(s1,s2)表示,其中s1,s2∈[M E S I]。

可以从初始状态(I,I)出发,逐步得到全部可达状态集合。

表2给出了所有全局状态,其中有下划线的为不可达状态。

在所有可达状态下,Cache 间的数据都是一致的,从而验证了在本文模型下MESI一致性协议的正确性。

由于系统的全局状态是由各个处理器的Cache状态共同组成的。

若一个系统有n个处理器,Cache状态有m个,有k个与状态转换有关的操作,那么系统的状态空间大小是mn,有k*mn个状态转换操作。

随着处理器数目与Cache协议复杂性的增加,验证工作的工作量也呈指数级增长。

由于状态列举法是采用穷举系统状态的方法进行验证,所以其实现复杂性是O(mn)。

即使考虑到全局状态之间的等价关系,把等价的状态用一个状态表示,这虽然可以大大减少要验证状态的数目,但其实现复杂性依然是O(mn)。

状态列举法的优点是方法的概念比较简单,易于理解和实现;协议的模型可以随着设计的变动而快速的修改,在协议设计初期可以快速地找出设计中的错误;可以方便地用程序设计语言对Cache协议进行建模,并可以应用自动化的工具进行验证。

状态列举法的主要不足是随着处理器数目的增加,状态空间会急剧地以指数级膨胀,因此它的适用性被局限在规模较小的系统中。

2.3 模型检验法(Model Checking) 模型检验就是验证某个系统的设计是否满足某种规范,系统的规范用时态逻辑公式来刻画。

而通过对系统可达状态空间的遍历来证明设计符合规范。

验证时的输入是系统设计与要满足的规范。

如果给定的模型满足给定规范,那么验证输出为是,否则可以找出违反了规范的反例,通过反例可以了解设计无法满足规范的原因,精确地定位设计缺陷。

可以用来刻画模型的规范化语言不是唯一的,这里以CTL(Computation Tree Logic 运算树逻辑)[2]为例来定义模型和进行验证。

CTL是常用的布尔命题逻辑(BPL)的扩展,除了支持常规的逻辑操作外,还支持辅助的时序操作和路径操作符。

在运算树逻辑中,一条路径是一个无限的状态序列(s0,s1,...),其中存在着由si到si+1的转换。

这种方法首先要得到系统的全局状态图,由系统所有可达的全局状态及状态间的转换操作构成。

图4给出了我们的验证模型的全局状态图。

要证明系统满足数据一致性的性质用AGf表示,这里f为数据保持一致性的命题。

并且要求在系统中的所有路径上的所有状态都要满足命题f。

在本例中条件满足,这就说明本文模型下MESI一致性协议的正确性。

除了上面的CTL逻辑以外,还可以用其它的时序逻辑公式来描述Cache协议[3][8]。

不同的时态逻辑公式描述方式有所不同,但一般都要先对Cache一致性协议进行抽象,得到一个简单的模型然后再验证。

早期模型检验工具采用显式的方法来表示状态空间。

由于这种方法的验证过程也是通过对于全局状态空间的遍历实现的,所以也存在着状态空间膨胀的问题。

其实现复杂性与状态列举法一样也是O(mn)。

尽管后来在符号模型检验[3][9]中采用了将状态空间转化为布尔函数的方法,应用了ORBDD(ordered reduced binary decision diagram)来表示状态空间,存储BDD节点所需要的空间仍然与所表达的系统的规模呈指数关系。

模型检验方法的优点在于时序逻辑强大的表达能力,与状态列举法相比,找到满足Cache一致性性质的表达方式要容易得多。

模型检验方法的一个主要缺点是建立系统模型的过程非常复杂,经常需要包括一些不必要的协议细节,而且要建立自动检验程序也是很困难的。

另外在符号状态检验中BDD的大小对布尔变量的顺序敏感,不同布尔变量顺序对BDD大小影响是显著的。

2.4 符号状态模型法(SSM Symbolic State Model) SSM[4][10][11]法与前面讨论的状态列举法的不同在于对全局状态的表示。

SSM方法对系统的全局状态进行了抽象,这种抽象是由以下观察引发的:首先若系统的各个组件的状态机是相同的,则所有处于相同状态的有限状态机可以集成在一起成为一个集成状态。

其次在所有协议中,不是通过写更新,就是通过写无效来实现数据的一致性。

而处于Shared状态拷贝的具体数目与协议正确性无关,关键是对某一个特定状态存在的拷贝的数目是0、1还是多个,从而可以把全局状态用更抽象的状态来映射,而不深究处于某一个状态的Cache的具体数目。

定义如下表示符:0:表示有0个实例;1:表示有且只有一个实例;*:表示0个,1个或者多个实例;+:表示1个或者多个实例。

通过这些符号,可以构建复杂状态的简明表示,例如可以用(I+,S*)来表示一个或多个Cache处于无效状态,0、1或者多个Cache处于共享状态。

一个系统的全局状态可以用(q1r1,q2r2,...,qnrn)来表示,这里n是Cache有限状态机的状态数目,ri属于[0,1,+,*]。

根据其表示的内容,这些表示符号的顺序为1<+<*,0<*。

并定义一个状态集S2包含另一个状态集S1的条件为:qr1∈S1,qr2∈S2,有qr1≤qr2,即r1≤r2,其中q为Cache状态,ri属于[0,1,+,*]。

包含关系的重要性在于,如果S2包含S1,那么S2所表示的状态是S1所表示的状态的一个超集,只要验证了S2的正确性,就可以不必再去验证S1的正确性。

这是因为对于S1所进行的下一次的状态转换所形成的状态集肯定包含在对S2所进行的下一个的状态转换所形成的状态集之中。

在SSM中,状态集的产生是与状态列举方法相同的。

首先通过当前可以进行的转换产生新的状态,然后是一个聚合过程,把处于相同状态的Cache归为一类,最后再检查包含的情况,对于本文的系统模型,从初始的(I+)状态开始的状态扩张过程,最后形成的状态转换图。

可以看出在状态扩张过程结束时,只产生了另外的四种状态:(E,I*)、(M,I*)、(S,I+)和(S+,I*)。

在这五个状态中,Cache都是一致的,从而验证了MESI协议的正确性。

SSM方法发现协议错误的方法与状态列举法相同。

相关文档
最新文档