缓存一致

Posted pfsi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了缓存一致相关的知识,希望对你有一定的参考价值。

内存屏障有两个能力:
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














以上是关于缓存一致的主要内容,如果未能解决你的问题,请参考以下文章

缓存系列:缓存一致性问题的解决思路

redis缓存与数据一致性

什么是/使用缓存(Cache),缓存更新策略数据库缓存不一致解决方案 及 实现缓存与数据库双写一致

缓存一致性问题

小工匠聊架构-Redis 缓存一致性设计

5 分钟快速学习,缓存一致性优化方案!