• 超能网 >> 
  • 课堂 >> 
  • CPU >> 
  • 超能课堂(133):为什么CPU缓存会分为L1、L2、L3?

超能课堂(133):为什么CPU缓存会分为L1、L2、L3?

2018-4-26 18:45  |  作者:谭智耀   |  关键字:CPU,缓存,Cache Memory,超能课堂

CPU缓存是CPU一个重要的组成部分,大家都知道三级缓存的重要性,但是知不知道三级缓存意味着什么,是不是三级缓存越大越好呢?让我们一起来看一下吧。

本文约3072字,需5分钟阅读

缓存这个词想必大家都听过,其实缓存的意义很广泛:电脑整机最大的缓存可以体现为内存条、显卡上的显存就是显卡芯片所需要用到的缓存、硬盘上也有相对应的缓存、CPU有着最快的缓存(L1、L2、L3缓存等),缓存就是数据交换的缓冲区(称作Cache)。缓存往往都是RAM(断电即掉的非永久储存),它们的作用就是帮助硬件更快地响应。我们今天就来讲一下,关于最快的缓存——CPU缓存的那些事。

CPU缓存是什么?

CPU缓存的定义为CPU与内存之间的临时数据交换器,它的出现是为了解决CPU运行处理速度与内存读写速度不匹配的矛盾——缓存的速度比内存的速度快多了。CPU缓存一般直接跟CPU芯片集成或位于主板总线互连的独立芯片上。(现阶段的CPU缓存一般直接集成在CPU上)CPU往往需要重复处理相同的数据、重复执行相同的指令,如果这部分数据、指令CPU能在CPU缓存中找到,CPU就不需要从内存或硬盘中再读取数据、指令,从而减少了整机的响应时间。


CPU-缓存-主内存图示,图片来自:CPU Caches


CPU缓存速度和内存速度差多少?

我们来简单地打个比方:如果CPU在L1一级缓存中找到所需要的资料要用的时间为3个周期左右,那么在L2二级缓存找到资料的时间就要10个周期左右,L3三级缓存所需时间为50个周期左右;如果要到内存上去找呢,那就慢多了,可能需要几百个周期的时间。


I3-8300处理器技术规格

对CPU缓存有一定了解了吗,让我们再深入一点。以Intel为例,Intel官网上产品-处理器界面内对缓存的定义为:“CPU高速缓存是处理器上的一个快速记忆区域。英特尔智能高速缓存(SmartCache)是指可让所有内核动态共享最后一级高速缓存的架构。”这里就提及到了最后一级高速缓存的概念,即为CPU缓存中的L3(三级缓存),那么我们继续来解释一下什么叫三级缓存,分别又是指哪三级缓存。


CPU-缓存-主内存图示,图片来自:CPU Caches

三级缓存(L1、L2、L3)是什么?

以近代CPU的视角来说,三级缓存(包括L1一级缓存、L2二级缓存、L3三级缓存)都是集成在CPU内的缓存,它们的作用都是作为CPU与主内存之间的高速数据缓冲区,L1最靠近CPU核心;L2其次;L3再次。运行速度方面:L1最快、L2次快、L3最慢;容量大小方面:L1最小、L2较大、L3最大。CPU会先在最快的L1中寻找需要的数据,找不到再去找次快的L2,还找不到再去找L3,L3都没有那就只能去内存找了。L1、L2、L3可以说是各有特点,下面我们就分开来讲一下。

一级缓存(L1 Cache)

一级缓存这个名词出现应该是在Intel公司Pentium处理器时代把缓存开始分类的时候,当时在CPU内部集成的CPU缓存已经不能满足整机的性能需求,而制造工艺上的限制不能在CPU内部大幅提高缓存的数量,所以出现了集成在主板上的缓存,当时人们把CPU内部集成的CPU缓存成为一级缓存,在CPU外部主板上的缓存称为二级缓存。


Intel Pentium 4

而一级缓存其实还分为一级数据缓存(Data Cache,D-Cache,L1d)和一级指令缓存(Instruction Cache,I-Cache,L1i),分别用于存放数据及执行数据的指令解码,两者可同时被CPU访问,减少了CPU多核心、多线程争用缓存造成的冲突,提高了处理器的效能。一般CPU的L1i和L1d具备相同的容量,例如I7-8700K的L1即为32KB+32KB。

二级缓存(L2 Cache)

随着CPU制造工艺的发展,本来处于CPU外部的二级缓存也可以轻易地集成进CPU内部,这种时候再用缓存是否处于CPU内部来判断一二级缓存已经不再确切。集成进CPU的L2二级缓存运行速率渐渐可以跟上CPU的运行速度了,,其主要作用为当CPU在L1中没读取到所需要的数据时再把数据展示给CPU筛选(CPU未命中L1的情况下继续在L2寻求命中,缓存命中的工作原理我们稍后再讲)。

L2二级缓存比L1一级缓存的容量要更大,但是L2的速率要更慢,为什么呢?首先L2比L1要更远离CPU核心,L1是最靠近CPU核心的缓存,CPU需要读取L2的数据从物理距离上比L1要更远;L2的容量比L1更大,打个简单的比喻,在小盒子里面找东西要比在大房间里面找要方便快捷。这里也可以看出,缓存并非越大越好,越靠近CPU核心的缓存运行速率越快越好,非最后一级缓存的缓存容量自然是够用即可。


Core Duo酷睿双核处理器

L2二级缓存实际上就是L1一级缓存跟主内存之间的缓冲器,在2006年的时间点上,Intel和AMD当家在售的几款处理器可以看出他们对最后一级缓存不同的见解:Intel Core Duo不同于它的前辈Pentium D、EE,采用了双核心共享的2M L2二级缓存,是属于当时最先二级缓存架构,即“Smart Cache”共享缓存技术,这种技术沿用到以后的Intel推出的所有多核心处理器上;而AMD Athlon 64 X2处理器则是每个CPU核心都具备独立的二级缓存,Manchester核心的处理器为每核心512KB、Toledo核心为每核心1MB,两个核心之间的缓存的数据同步是通过CPU内置的SRI(系统请求接口)控制,这样的数据延迟及占用资源情况都要比Intel的Pentium D、EE核心要好,但还是比不上Core为代表的Smart Cache缓存共享。

三级缓存(L3 Cache)

最初出现L3三级缓存的应该是AMD的K6-III处理器,当时受限于制造工艺,L3只能集成在主板上。然后Intel首次出现L3三级缓存的是Itanium安腾服务器处理器,接着就是P4EE和至强MP。L3三级缓存的出现其实对CPU性能提升呈一个爬坡曲线——L3从0到2M的情况CPU性能提升非常明显,L3从2M到6M提升可能就只有10%不到了,这是在近代CPU多核共享L3的情况下;当L3集成进CPU正式成为CPU内部缓存后,CPU处理数据时只有5%需要在内存中调用数据,进一步地减少了内存延迟,使系统的响应更为快速。


Intel Nehalem L3 SmartCache示意图

同理,L3即为L2与主内存之间的缓冲器,主要体现在提升处理器大数据处理方面的性能,对游戏表现方面有较大的帮助。那么也许有人就会问了,是不是选择CPU的时候看准L3买,哪个CPU的L3大就买哪个?非也,只有同架构的情况下这种比较才具有意义,先举个比较久远的例子:Intel具备1MB L3的Xeon MP处理器仍然不是AMD没有L3的皓龙处理器对手,再来个现有的:Intel I7-8700K 12MB L3和AMD Threadripper 1950X 32MB L3相比,自然是32MB比12MB大,但是平均下来也是一个核心2MB L3,性能就见仁见智了。

CPU缓存是怎样帮助CPU工作的呢

知道了L1、L2、L3的由来,我们再深入地了解一下CPU缓存是怎么帮助CPU提高工作效率的。


局限性原理,图片来自:CMU

由于数据的局限性,CPU往往需要在短时间内重复多次读取数据,内存的运行频率自然是远远跟不上CPU的处理速度的,怎么办呢?缓存的重要性就凸显出来了,CPU可以避开内存在缓存里读取到想要的数据,称之为命中(hit)。L1的运行速度很快,但是它的数据容量很小,CPU能在L1里命中的概率大概在80%左右——日常使用的情况下;L2、L3的机制也类似如此,这样一来,CPU需要在内存中读取的数据大概为5%-10%,其余数据命中全部可以在L1、L2、L3中做到,大大减少了系统的响应时间,总的来说,所有CPU读取数据的顺序都是先缓存再内存。

L1、L2、L3缓存跟内存速度相差很大,它们构成上的不同导致了其速度的差距,那么CPU缓存和内存分别是怎样构成的呢?

缓存SRAM与内存DRAM的区别

CPU缓存基本由SRAM(Static RAM,静态RAM)构成,内存的DRAM其实是SDRAM(同步动态随机储存器),是DRAM(Dynamic RAM,动态)的一种。


DRAM

DRAM只含一个晶体管和一个电容器,集成度非常高,可以轻松做出大容量(内存),但是因为靠电容器来储存信息,所以需要不断刷新补充电容器的电荷,充电放电之间的时间差导致了DRAM比SRAM的反应要缓慢得多。


SRAM

SRAM相比DRAM的复杂度就高了不止一筹,所以导致SRAM的集成度很低——前期CPU缓存不能集成进CPU内部也有这个原因。SRAM的特点就是快,有电就有数据,不需要刷新时间所以凸显其数据传输速度很快,缺点就是占据面积大、成本低。假如一个DRAM占据一个单位的地方,一个SRAM就要占据六个单位的地方,差别还是挺大的。

:L4四级缓存和eDRAM


I7-4750H

并不是每个CPU都会使用SRAM作为CPU缓存,IBM的Power系列处理器就使用了eDRAM作为CPU缓存;我们再看看Intel Haswell I7-4750H这个CPU,其主要受关注的地方在于CPU内嵌入了128MB的eDRAM作为显存让核心显卡Iris Pro 5200使用,在不使用核心显卡的时候,128MB eDRAM将会成为处理器的L4四级缓存。当然了,I7-4750H多了L4之后在处理器性能上也没提高多少,eDram缓存的主要作用还是在于给核心显卡当显存上。

用着旧机不爽的你,是否准备购买一波新装备啦,想要各类硬件推荐的请找小超哥(微信9501417),也可以让小超哥拉你进去超能群与其他网友一起聊哦~ 

    
  • 游客  05-07 21:54

    游客:

    看似懂了,可是还有些不明白。当我用电脑看硬盘上的新濠天地的时候,那缓存是怎么工作的?新濠天地文件大小远超缓存和内存,CPU要播放新濠天地的时候,新濠天地的数据要不要进缓存?还是进内存?还是根本就不进,而是直接读取硬盘?如果要进缓存 ,那缓存不是一直在更新数据,不是拖慢了系统?
    05-06 11:10
  • 支持(0)  |   反对(0)  |   举报  |   回复
  • 闲得蛋疼回复一下吧,播放新濠天地这种情况内存和缓存中都不会有预存数据,所以一定要从硬盘中读取到内存,再一级一级往缓存传输。新濠天地文件在播放的时候是以流的形式传输,速度就是俗称的码率,假如播放8Mbps的新濠天地流,换算成数据就是1MB/秒,而一般流传的新濠天地文件码率都在几Mbps到几十Mbps之间,这对于读写速度几十GB的内存和几百GB的CPU缓存来说跟本构不成任何压力。就算有码率大到300+Mbps的4K 120HZ变态新濠天地,瓶颈也会在解码和存储媒介的读取速度而不是内存和CPU缓存。 ...

    支持(7)  |   反对(0)  |   举报  |   回复

    28#

  • 
  • 游客  05-06 11:10

    看似懂了,可是还有些不明白。当我用电脑看硬盘上的新濠天地的时候,那缓存是怎么工作的?新濠天地文件大小远超缓存和内存,CPU要播放新濠天地的时候,新濠天地的数据要不要进缓存?还是进内存?还是根本就不进,而是直接读取硬盘?如果要进缓存 ,那缓存不是一直在更新数据,不是拖慢了系统?

    支持(0)  |   反对(0)  |   举报  |   回复

    27#

  • 
  • 游客  05-03 21:27

    从盒子里找东西这个例子好像举得不怎么合适,缓存读写速度的快慢不直接取决于缓存的大小,而是缓存的速度,而因为缓存运行速度越高,容量就越难做大,所以缓存才小而快,大而慢

    支持(0)  |   反对(0)  |   举报  |   回复

    25#

  • 
  • 游客  04-30 20:57

    挺不错的文章!实际种强实时性的软件,比如游戏,复杂场景且内容以非常高的帧频切换,内存的读取率远远高于5%-10%,这种内存低延迟非常重要

    支持(3)  |   反对(0)  |   举报  |   回复

    24#

  • 
  • 游客  04-27 18:43

    游客:

    难怪AMD的CPU这么垃圾,原来是缓存响应太慢
    04-26 23:02 已有25次举报
  • 支持(4)  |   反对(24)  |   举报  |   回复
  • (要讲文明有礼貌)死的太快

    支持(0)  |   反对(0)  |   举报  |   回复

    23#

  • 
  • 游客  04-27 18:24

    游客:

    难怪AMD的CPU这么垃圾,原来是缓存响应太慢
    04-26 23:02 已有25次举报
  • 支持(4)  |   反对(24)  |   举报  |   回复
  • 我觉得说得 不离谱啊,这么多人反对?AMD就是在最近的Zen架构才带来"smart cache",以前的各种农机就是差在这点,高频低Hit,还有就是共享浮点单元也很不中用。

    已有1次举报

    支持(1)  |   反对(0)  |   举报  |   回复

    22#

  • 
  • Adonis研究生 04-27 09:46

    游客:

    还有cpuz里缓存后面显示的4way、8way的影响呢,比如amd的一级指令比Intel大一倍,但是amd是4wayIntel是8way,到二级缓存的时候intel是4way256k,amd是8way512k
    04-26 22:36
  • 支持(0)  |   反对(0)  |   举报  |   回复
  • 谭智耀 编辑 :

    way数增加命中率也越高,但是会导致查找数据时对比次数的增加、延迟因此上升,很难有一个直观比较
    04-26 23:02
  • 支持(5)  |   反对(0)  |   举报  |   回复
  • CPU对数据访问的延迟更敏感,GPU对数据传输的带宽更敏感。
    L1、L2、L3和SDRAM构成CPU的缓存系统。当前,CPU核心已经足够快速,瓶颈在缓存上。如何降低缓存延迟,是CPU研发的重点。当年K10微架构主要因为缓存效率落后Core,性能被甩开一大截。
    AMD Zen和Zen + L1、L2和L3缓存,设计达到了预期;目前最大的问题是IMC内存控制器有待改进,降低SDRAM内存延迟,提升整机性能。

    支持(5)  |   反对(0)  |   举报  |   回复

    21#

  • 
  • 游客  04-27 00:40

    因为穷

    支持(0)  |   反对(0)  |   举报  |   回复

    20#

  • 
  • 游客  04-26 23:37

    文章还不错,逻辑比较清楚

    支持(3)  |   反对(0)  |   举报  |   回复

    17#

  • 
  • 游客  04-26 23:02

    难怪AMD的CPU这么垃圾,原来是缓存响应太慢

    已有25次举报

    支持(4)  |   反对(24)  |   举报  |   回复

    15#

  • 
  • 谭智耀编辑 04-26 23:02

    游客:

    还有cpuz里缓存后面显示的4way、8way的影响呢,比如amd的一级指令比Intel大一倍,但是amd是4wayIntel是8way,到二级缓存的时候intel是4way256k,amd是8way512k
    04-26 22:36
  • 支持(0)  |   反对(0)  |   举报  |   回复
  • way数增加命中率也越高,但是会导致查找数据时对比次数的增加、延迟因此上升,很难有一个直观比较

    支持(5)  |   反对(0)  |   举报  |   回复

    14#

  • 
  • hianghokung一代宗师 04-26 23:02

      以后发这类文章不嫌多。

    支持(10)  |   反对(0)  |   举报  |   回复

    13#

  • 
  • 游客  04-26 22:50

    支持干货

    支持(1)  |   反对(0)  |   举报  |   回复

    12#

  • 
  • 游客  04-26 22:36

    还有cpuz里缓存后面显示的4way、8way的影响呢,比如amd的一级指令比Intel大一倍,但是amd是4wayIntel是8way,到二级缓存的时候intel是4way256k,amd是8way512k

    支持(0)  |   反对(0)  |   举报  |   回复

    11#

  • 
  • 游客  04-26 22:08

    缺点就是占据面积大、成本低

    支持(0)  |   反对(0)  |   举报  |   回复

    10#

  • 
  • 游客  04-26 21:13

    有L4缓存的路过......

    支持(0)  |   反对(0)  |   举报  |   回复

    8#

  • 
  • yjhercule的爹研究生 04-26 20:39

    明白了,你要买AMD处理器。

    支持(2)  |   反对(0)  |   举报  |   回复

    7#

  • 
  • 谭智耀编辑 04-26 20:26

    游客:

    簡而言之,快的做不大、大的做不快、又大又快的不便宜
    04-26 20:06
  • 支持(2)  |   反对(0)  |   举报  |   回复
  • 缓存大了就没有那么快了,合理的大小速度平衡才是关键

    支持(0)  |   反对(0)  |   举报  |   回复

    6#

  • 
  • 游客  04-26 20:06

    簡而言之,快的做不大、大的做不快、又大又快的不便宜

    支持(2)  |   反对(0)  |   举报  |   回复

    4#

  • 
  • 游客  04-26 19:36

    不错 希望多看到点这种有营养的东西

    支持(1)  |   反对(0)  |   举报  |   回复

    3#

查看全部评论(20)

回复