CPU多级缓存与缓存一致性

Posted caibixiang123

tags:

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

   1.为什么要有缓存?

   随着现代半导体工艺的发展,CPU的频率越来越快,相对内存快了一个数量级,对于访存的操作CPU就需要等待主存,这样会导致资源的白白浪费。所以cache的出现为了解决CPU与内存速度不匹配的问题。(cpu ->cache->memory)

   cache的思想在我们日常的生活随处可见,我们周围的超市就是很好的例子。工厂把我们日常用品部分在超市,减少了我们去工厂购买的时间开销,方便了我们的生活。

   2.CPU缓存有什么意义?

    时间局部性:如果某个数据被访问,它在将来的某个时间也有可能在被访问。

    空间局限性:如果某个数据被访问,那么它相邻的数据也有可能被访问。

 

   3.CPU读取数据的过程

技术分享图片

cache中保存着cpu刚用过的数据或者是循环使用的数据,这时,从cache中读取数据就会很快,减少了cpu等待的时间,提高了系统的性能

 

    4.cache 缓存带来的问题 

 导致数据不一致的问题,对于多核系统来说。

 

   5.如何解决缓存带来的问题,比较常见的缓存一致性(MESI),当然也有锁住总线。

  我们来介绍一下缓存一致性:

       在MESI协议中,每个cache line有4个状态,可用2个bit表示,它们分别是:

状态描述
M(Modified) 这行数据有效,数据被修改了,和内存中的数据不一致,数据只存在于本Cache中。
E(Exclusive) 这行数据有效,数据和内存中的数据一致,数据只存在于本Cache中。
S(Shared) 这行数据有效,数据和内存中的数据一致,数据存在于很多Cache中。
I(Invalid) 这行数据无效


    MESI为了保证多个CPU缓存中共享数据的一致性,定义了cache line的四种状态,而CPU对cache line的四种操作可能会产生不一致的状态,因此缓存控制器监听到本地操作和远程操作的时候,需要对地址一致的cache line 状态进行一致性修改,从而保证数据在多个缓存之间保持一致性(M:modified   E:Exclusive   S:shared   I:invalid) 。

技术分享图片

3个Core都访问变量x,它们对应的Cache line为S(Shared)状态

 

技术分享图片

 


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

SpringCache优化、缓存一致性、多级缓存

并发与高并发

Java并发基础

计算机多级缓存架构和MESI缓存一致性协议

Java 并发MESI缓存一致性协议

高并发学习