CPU Cache 机制

1、为什么要有Cache?

随着制造的进步与提高,CPU的工作频率越来越高,但与CPU进行数据交互的内存的运行速度没有跟上(从而产生带宽问题),基于短板效应,计算机的整体性能将受限。为了不给CPU拖后腿,解决带宽瓶颈,一般有两个解决方案:1、提高内存RAM的工作频率,目前DDR4的内存条工作频率可达2GHz,但和高端的CPU相比,仍具有一定额差距;2、引入Cache缓存机制。

2、Cache 的简易工作原理

Cache在物理实现上就是一块 静态随机访问存储器(Static Random Access Memory, SRAM),Cache的运行速度介于CPU和内存DRAM之间,其工作也处于两者之间,相当于在CPU和内存之前插入了一个高速的缓冲存储器,用来解决两者间速度不匹配带来的带宽问题,起到一个桥梁的作用。
  Cache的工作原理是:利用其空间局部性和时间局部性原理,通过其自由的存储空间,缓存一部分内存中的数据和指令,减少CPU直接对内存的访问,从而提高系统整体的性能。
读内存:如图1所示:当CPU读取内存中地址为8的数据时,CPU会将内存中地址为8的一片数据缓存到cache中。等下一次CPU读取内存地址为12的数据时,会首先到cache中检查该地址是否在cache中。如果在,就称为缓存命中(Cache Hit),CPU就直接从cache中取数据;如果该地址不在cache中,就称为缓存未命中(Cache Miss),CPU就重新转向内存读取数据,并重新缓存从该地址开始的一片数据到Cache中。
图片
图1、 CPU通过Cache机制读内存示意
  写内存:如图2所示,和读类似,当CPU往地址为16的内存写入数据0时,并没有真正地写入RAM,而是暂时写到了cache里。此时cache和内存RAM的数据就不一致了,缓存的每块空间里一般会有一个特殊的标记位,叫“Dirty Bit”,用来记录这种变化。当cache需要刷新时,如cache空间已满而CPU又需要缓存新的数据时,在清理缓存之前,会检查这些“Dirty Bit”标记的变化,并把这些变化的数据回写到RAM中,然后才腾出空间去缓存新的内存数据。

图 2、 CPU通过Cache机制写内存示意

3、一级Cache 和 二级Cache

为什么要有二级Cache?
  CPU从cache里读取数据,如果缓存命中,就不用再访问内存,效率大大提升;如果缓存未命中,CPU不仅要重新到内存中取数据,还要缓存一片新的数据到cache中,如果cache已经满了,还要清理cache,如果cache中的数据有“Dirty Bit”,还要回写到内存中。一通操作猛如虎,发现已经过去了上百个时钟周期,影响CPU的读写效率,为了减少这种情况,我们可以通过增大cache的容量来提高缓存命中的概率,但随之带来的就是成本的上升。在CPU内部,cache和寄存器的电路比内存DRAM复杂的多,会占用很大的芯片面积,如果大量使用,芯片发热量会急剧上升,所以在CPU内部寄存器一般也就几十个,靠近CPU的一级cache也就几十K字节。既然无法继续增加一级Cache的容量,一个折中的办法就是在一级Cache和内存之间添加二级Cache,如图3所示:
在这里插入图片描述
图3、CPU处理器中的多级Cache

4、多核CPU下的Cache架构

现在的CPU一般都是多核结构,多个Core集成到一个处理器上,当CPU负载很大时,多个Core一起上阵可以提高工作效率,但是当工作任务不是很多时,如只开一个QQ,然后八个核一起跑,只有一个Core在工作,其他Core也开始跟着空转打酱油,随之带来的就是功耗的上升。为了避免这种情况,ARM推出了big.LITTLE架构,也就是大小核架构:一个处理器内部集成的有高性能的Core,也有低功耗的Core。当CPU工作负载很重时,启动高性能的Core工作;当CPU很闲时,则切换到低功耗的Core上工作。根据不同的应用场景和工作负载,CPU分配不同的Core工作,可以在性能和功耗之间达到一个平衡。
  ARM处理器针对多核采取了分层设计,如下图所示,将所有的高性能核放到一个簇(Cluster)里,构成一个big Cluster,将多个低功耗核放到另一个Cluster里,构成LITTLE Cluster。处理器中的每个Core都有自己独立的数据Cache和指令Cache,每个Cluster共享L2 Cache。如图4所示
在这里插入图片描述
图4、 ARM架构多核CPU的存储结构

5、为什么有些处理器没有Cache

  为什么有些处理器没有Cache?如C51 系列单片机、cortex-M0 、cortex-M1 、cortex-M2、cortex-M3、cortex-M4系列的ARM处理器都没有Cache。
  Cache的作用主要是缓解CPU和内存之间的带宽瓶颈,一般用在高性能处理器中,因此并不是所有的处理器都有Cache ,更详细地说,主要原因有三个:

  一是这些处理器都是低功耗、低成本处理器,在CPU内集成Cache会增加芯片的面积和发热量,不仅功耗增加,芯片的成本也会增加不少。
  以Intel酷睿i7-3960X处理器为例,如图5所示,L3 Cache大约占了芯片面积的1/4,再加上每个Core内部集成的独立L1 Cache和L2 Cache,整个Cache面积差不多就占了芯片总面积的1/3。
在这里插入图片描述
图 5、i7-3960x处理器的设计版图
  二是这些处理器本来工作频率就不高(从几十兆赫到几百兆赫不等),和RAM之间不存在带宽问题,有些处理器甚至不需要外接RAM,直接使用片内SRAM就可满足开发需求。
 三是使用Cache无法保证实时性。当缓存未命中时,CPU从RAM中读取数据的时间是不确定的,这是嵌入式实时控制场景无法接受的。因此,在一些面向嵌入式工业控制、实时领域、超低功耗的处理器中,大家可以看到很多没有集成Cache的处理器。
参考《嵌入式C语言自我修养从芯片、编译器到操作系统》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值