码迷,mamicode.com
首页 > 其他好文 > 详细

缓存一致

时间:2018-06-13 12:02:54      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:脏数据   bar   ali   读写   watch   invalid   实现   date   内存屏障   

内存屏障有两个能力:
1. 阻止屏障两边的指令重排序。
2. 强制把写缓冲区/高速缓存中的脏数据等写回主内存,让缓存中相应的数据失效。

对Load Barrier来说,在读指令前插入读屏障,可以让高速缓存中的数据失效,重新从主内存加载数据。
对Store Barrier来说,在写指令之后插入写屏障,能让写入缓存的最新数据写回到主内存。

Lock前缀实现了类似的能力,
1. 它先对总线/缓存加锁,然后执行后面的指令,最后释放锁后会把高速缓存中的脏数据全部刷新回主内存。
2. 在Lock锁住总线的时候,其他CPU的读写请求都会被阻塞,直到锁释放。Lock后的写操作会让其他CPU相关的cache line失效,从而从新从内存加载最新的数据。这个是通过缓存一致性协议做的。

lock前缀(或cpuid、xchg等指令)使得本CPU的Cache写入了内存,该写入动作也会引起别的CPU invalidate其Cache。IA32在每个CPU内部实现了Snoopying(BUS-Watching)技术,监视着总线上是否发生了写内存操作(由某个CPU或DMA控制器发出的),只要发生了,就invalidate相关的Cache line。 因此,只要lock前缀导致本CPU写内存,就必将导致所有CPU去invalidate其相关的Cache line。








references:
https://blog.csdn.net/iter_zc/article/details/42006811

缓存一致

标签:脏数据   bar   ali   读写   watch   invalid   实现   date   内存屏障   

原文地址:https://www.cnblogs.com/pfsi/p/9176115.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!