高速缓存-Cache

02-计算机硬件 飞快学 427浏览

Cache 用于解决CPU与主存之间速度的不匹配,高速缓存不与主存统一编址。Cache采用SRAM介质,具有低延迟、高速度、高成本的特点。

为什么要有Cache?CPU与主存之间速度的不匹配。(CPU速度很快,而主存速度慢,迫使CPU要停下来等待主存),为解决这个问题,提出Cache。

Cache的结构示意图

Cache 用 SRAM 制作,直接制作在CPU内,速度几乎与CPU一样快。寄存器速度 > Cache的速度

①主存是用DRAM。②硬盘的CACHE用的是DRAM。因此:不是所有的CACHE都是用SRAM制作的。
③访问方式:CPU先访问CACHE,若CACHE访问不到,再到主存中访问。
④命中率:CPU需要的指令或数据在CACHE中直接找到的概率。
⑤CACHE容量与命中率的关系?容量越大,命中率越高。从而CPU的执行效率越高。
⑥程序的结构与命中率的关系?程序结构会影响命中率。同样的CACHE容量下,CACHE友好的程序结构会大大提高命中率。反之,结构不友好的程序结构会大大降低命中率。

Cache的编址

figure02-fully-associative

⑦Intel CPU: CORE 2中CACHE结构:

(A) CORE2中CACHE又进一步分为:一级CACHE(L1 CACHE—容量小如64KB、速度更快)、二级CACHE(L2 CACHE—容量大如2MB、速度略慢)。访问方式:CPU先访问L1 CACHE,若不在L1 ACHE,则访问L2CACHE,仍不在,再通过CPU总线访问内存(并传送附近的一批数据)。

(B) CORE2 是多核心结构。每一个核心有自己的L1CACHE,而L2CACHE是由所有的核心共享。

Cache的概念、起源与发展

Cache最初来源于法语,指的是隐秘的,保存贵重东西的地方,也有临时、暂时的意思。综合两者,对 Cache 的定义就是——临时的保存贵重东西的隐秘地方。在计算机中,贵重代表着CPU所要用到的数据或者指令是十分重要的;临时的含义是说 Cache只是在CPU工作时存在,而断电以后就消失;隐秘是针对软件层来说的,Cache对软件层来说是不可见的。大家一般把它叫做缓存,说到底,也是一种存储器,和内存这些存储体做着一样的事情,只不过它有着不一样的特性,使得它成为CPU内部的存储体,担着CPU与内存的中转站的责任。在现代计算机中,缓存就是嵌在CPU内部的一些微小,低延迟的存储体。

时间回到1978年,第一颗在个人PC上使用的微处理器——8088,它的主频才4.77MHz,导致当时CPU的存取时间(800ns左右)远大于内存的存取时间(200ns左右),所以那时候根本不需要Cache。

到80386开始,CPU的频率一下提高到40MHz,但是内存的上升速度却没有象 CPU一样快,导致没有相匹配的内存可以使用,使得CPU要耗费几个甚至十几个时钟周期来等待内存的读写,这显然不能让人接受。

于是有两种解决方案同时被提出来:一种是在CPU内加入等待周期,降低CPU的处理能力;而另一种就是寻找一种速度快、面积小、延迟短的存储体来做CPU与内存的中转站,也就是我们现在所说的Cache(缓存)。第一种方法显然是自欺欺人,牺牲CPU的性能来换取整体的平衡,所以第二种方法立刻被采用。

不过在386时期,由于成本的问题,并没有内部L1 Cache,只有外部的Cache。而486时代,CPU频率再次增加,外部Cache的速度也要相应提高,使得成本太高,于是内嵌了8K的L1 Cache,同时也可以使用外部的L2 Cache。

直到Pentium时代,由于Pentium采用了双路执行的超标量结构,有2条并行整数流水线,需要对数据和指令进行双重的访问,为了使得这些访问互不干涉,于是出现了8K的数据Cache和8K的指令Cache,并且可以同时读写,不过L2还是外部的;接着出现的Pentium Pro为了提高性能,把L2内嵌了,到此为止,就确定了现代缓存的基本模式(多级缓存)了,并一直沿用至今。

多级Cache的结构

Cache 概念的扩充

如今缓存的概念已被扩充,不仅在CPU和主内存之间有Cache,而且在内存和硬盘之间也有Cache(磁盘缓存),乃至在硬盘与网络之间也有某种意义上的Cache──称为Internet临时文件夹或网络内容缓存等。凡是位于速度相差较大的两种硬件之间,用于协调两者数据传输速度差异的结构,均可称之为Cache。

延伸阅读:为何采用 SRAM 制作Cache

在现代计算机中,半导体存储体主要有三种:用于存储BIOS信息的EEPROM(Electrically Erasable Programmable Read Only Memory,电可擦写可编程只读存储器),用于存储临时工作数据的DRAM(Dynamic Random Access Memory,动态随机访问存储器)与 SRAM(Static Random Access Memory,静态随机访问存储器)。

EEPROM由于成本过高,速度太慢,肯定不能做为Cache材料的选择,而DRAM和SRAM两种,为什么是SRAM用来做Cache,而不是DRAM呢?当然最大的原因是速度。

DRAM目前最常见的应用就是内存了,它是利用每个单元的寄生电容来保存信号的,正因如此,它的信号强度就很弱,容易丢失,所以DRAM需要时时刷新来确定其信号(根据DRAM制造商的资料,DRAM至少64ms要刷新一次,并且由于每次读取操作都会破坏DRAM中的电荷,所以每次读取操作之后也 要刷新一次,这就表示,DRAM至少有1%的时间是用来刷新的)。这样,DRAM的存储周期就增大了,当然潜伏期也变大了。

从Cache的起源可以看出,正是因为内存的读取时间过高而引入Cache的,所以DRAM不符合做Cache的标准。而SRAM不是通过电容充放电来存储数据,而是利用设置晶体管的状态来决定逻辑状态,让其保存数据,并且这种逻辑状态和CPU本身的逻辑状态相象,换句话说,SRAM可以以接近CPU频率的速度来运行(在今年秋季 的IDF上,Intel公布的65nm工艺的SRAM,可以运行在3.4GHz的频率上),再加上读取操作对SRAM是不具破坏性的,不存在刷新问题,大大的缩短了潜伏期。所以这种低延迟、高速度的SRAM才是Cache材料的首选。

不过由于SRAM内部采用的双稳态电路的结构,并且利用这种电路来控制晶体管的状态来存储数据,使得SRAM的电路结构非常复杂,往往要采用大量的晶体管来 确保寄存器的数量,一般SRAM内部每个单元(保存1bit数据)需要6个晶体管,而DRAM只要1个晶体管,相比之下,SRAM的成本要比DRAM高的多,所以现代计算机系统中,都是用少量的SRAM加上大量的DRAM来使计算机达到性能与成本的平衡

小结一下SRAM的特点:低延迟、高速度、高成本

服务器和个人电脑的差别

fig2-1

深入了解:每个程序员都应该了解的 CPU 高速缓存