cache缓存一致性

1、cacha的一致性

Cache的一致性有这么几个层面

1. 一个CPU的icache和dcache的同步问题

2. 多个CPU各自的cache同步问题

3. CPU与设备(其实也可能是个异构处理器,不过在Linux运行的CPU眼里,都是设备,都是DMA)的cache同步问题

MESI协议定义了4种状态:

M(Modified): 当前cache的内容有效,数据已被修改而且与内存中的数据不一致,数据只在当前cache里存在;

E(Exclusive):当前cache的内容有效,数据与内存中的数据一致,数据只在当前cache里存在;

S(Shared):当前cache的内容有效,数据与内存中的数据一致,数据在多个cache里存在;

I(Invalid): 当前cache无效。

多核Cache一致性由硬件保证,对软件来说是透明的。

2、Cache Line 伪共享

这些变量表面上是不同的变量,但是实际上却存储在同一条 Cache Line 里

在这种情况下,由于 Cache 一致性协议,两个处理器都存储有相同的 Cache Line 拷贝的前提下,本地 CPU 变量的修改会导致本地 Cache Line 变成 Modified 状态,然后在其它共享此 Cache Line 的 CPU 上, 
引发 Cache Line 的 Invaidate 操作,导致 Cache Line 变为 Invalidate 状态,从而使 Cache Line 再次被访问时,发生本地 Cache Miss,从而伤害到应用的性能。 
在此场景下,多个线程在不同的 CPU 上高频反复访问这种 Cache Line 伪共享的变量,则会因 Cache 颠簸引发严重的性能问题。

参考文档:

CPU Cache Line伪共享问题的总结和分析

宋宝华:深入理解cache对写好代码至关重要

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值