Linux内存管理-SMP缓存一致性

【推荐阅读】

浅谈linux 内核网络 sk_buff 之克隆与复制

深入linux内核架构--进程&线程

了解Docker 依赖的linux内核技术

对称多处理(SMP)或集中式共享存储器:一致性内存访问(UMA),缺点是对内存带宽要求高、难扩展

分布式共享存储器(DSM):非一致性内存访问(NUMA),缺点是访问本地内存延迟低、带宽高,访问远端内存延迟高、带宽低

多处理器系统:有些数据是多个处理器共享的,共享数据在每个cache中(每个处理器具有私有的L1 cache)均缓存,带来缓存一致性问题。

缓存一致性 :一个处理器核读取某个地址时,总是得到该地址对应的最新值。保证缓存一致性的两种典型方法:监听式、目录式。

监听式协议

写更新协议 :处理器写入某一数据时,同步更新所有副本;总线开销大,不常用

写失效协议 :处理器写入某一数据之前,获取该数据的独占权,在写入数据时强制其它副本作废(过程:处理器在总线上广播地址、其他处理器监听地址并判断该地址是否在自己的cache中,如果在则使其失效),最常用的协议,如下示例:

如果发生cache miss:如果是write through系统,很容易找到最新的值(因为已经写到系统中)。但如果是write back系统,就不太容易,因为有可能有个处理器修改了该数据(将其标为dirty),但是还没有写到内存中,即最新的值在该处理器的私有cache中。解决:发生cache miss的处理器会将所需数据地址放到总线上,其他所有处理器均会监听,如果发现自己有该地址的dirty副本,则响应请求。注:cache line的标签和有效位会帮助实现监听。

写回系统的写无效协议

每个block的可能状态:未缓存、clean、dirty(只有一个cache有)。所以,MSIMSI协议中,block具有如下三种状态:

Invalid(无效的):block中没有有效数据

Shared(共享的):a clean block

Modified(修改的/独占的):a dirty block

注意:一个block如果在一个cache中是修改的,那么在其他所有cache中均是无效的

例子:考虑两个处理器C1与C2

若C1发生读取缺失,且C2有这个块,那么C2中断内存响应并写回,C1得到后该块在所有cache中为共享状态。

若C1在一个共享块上发生写命中,那么C1将地址放到总线上,其他处理器监听并使对应副本失效。

若C1在一个修改块上发生写命中,并没有什么发生。

若C1在一个无效块上发生写缺失,C1将地址放到总线上,其他处理器监听:

若C2的对应块为共享,那么C2使其失效。

若C2的对应块为修改,那么将其写回并令其失效。

若没有cache有这个块,那么内存将提供。

若C1得到这个块,将其状态设置为修改。

MSIMSI缺陷:操作不是原子性的,可能造成死锁和竞争,解决办法,MES****IMESI增加独占(Exclusive)状态,一个处理器对一个缓存行拥有“独占”权限时,写入操作无需总线广播。

目录式协议

监听式协议对集中总线的带宽要求较高,难以扩展。目录式协议:每个处理器核上存在一个目录,记录它所负责的内存地址的共享状态。

主节点:一个地址的存储器位置及目录所在节点

请求节点:发出访存请求的节点(发出访存请求的也可能是主节点)

目录式协议的缺陷:存储开销,优化:有限指针方案,利用大多数处理器不共享行的事实;稀疏目录方案,利用大多数行不一致的事实

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值