CMP中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一致性协议实现的基本方法

面已经谈到,随着处理机数目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一致性问题和解决方法作者辽宁工程技术大学摘要高速缓冲存储器一致性问题是指高速缓冲存储器中的数据必须与内存中的数据保持同步(一致) 。
多核处理器将一个以上的计算内核集成在一个处理器中,通过多个核心的并行计算技术,增强处理器计算性能。
单片多处理器结构(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一致性协议验证中覆盖率驱动的随机验证方法

软件高速缓存 ( 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一致性机制

由于 指令 级 并 行需 要 的硬 件 资源 最 少 , 处理 器 微体 系结 构 中 , 早 在 最 出现 的并 行技 术就 是指 令级 并行 , 而实 现指 令级 并行 通 常采用 的是 V I ( LW 超 长指令 字 ) 技术 和S pr saa( 标量 ) u e— clr超 技术 。 V uw : 处理 器在 处理 一 个 长指令 字 中赋 予编 译程 序 控制 所有 功能 单元
多 核处 理 器 结 构不 仅 有 性 能潜 力 大 、 成度 高 、 集 并行 度 高 、 结构 简 单
指令 , 以获 得 并 行性 。 2线程 级 并行 .
和设计验证方便等诸多优势 , 而且它还能继承传统单核处理器研究 中的某些 成果, 例如 同时 多线 程 、 低 功 耗等 。 减压 但多 核 处理 器 毕竟 是 一种 新 的结 构给多 核处理器 的未来提出了挑战。
1前 言 .
自从计算机诞生 以来 , 推动处理器高速发展的动力主要来源于两个方
面 : 电子 技术 的 巨大 进 步 和处 理 器体 系 结 构 的演 化和 发 展 , 微 而这 两 个 动力 则促成 了多 核处理 器 技 术 的 出现和 发展 。 多 内 核是 在 一 个 处理 器 中集 成两 个 或 多 个 完整 计 算 引擎 , 内核 。 即 而 多核处 理器 则是 将 多个 功能 完全 的 核心 集成 在 同一个 芯 片上 , 个芯 片作 为 整
的能力 , 使得被编译的程序能够精确地调度在何处执行每个操作、 每个寄存 器存储器读写和每个转移操作 。 S p r saa : u e — clr 由于各个指令之间可能用到不同的数据单元, 所以通过 次发射多个指令来获取指令级的并行。 此技术 , 主要是依靠运行时的复杂 硬件 逻 辑 , 打乱 指令 的执 行 顺序 , 发射 阶段 同时 发射 多个 使 用不 同资 源 的 在
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⼀致互联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一致性问题和解决方法班级: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)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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方法发现协议错误的方法与状态列举法相同。