缓存的工作原理是当 CPU 要读取一个数据时,首先从缓存中查找,如果找到就立即读取并送给
CPU 处理;如果没有找到,就用相对慢的速度从内存中读取并送给 CPU 处理,同时把这个数据所在
的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。
正是这样的读取机制使 CPU 读取缓存的命中率非常高(大多数 CPU 可达 90%左右),也就是
说 CPU 下一次要读取的数据 90%都在缓存中,只有大约 10%需要从内存读取。这大大节省了 CPU
直接读取内存的时间,也使 CPU 读取数据时基本无需等待。总的来说, CPU 读取数据的顺序是先缓
存后内存。
最早先的 CPU 缓存是个整体的,而且容量很低,英特尔公司从
分类。当时集成在 CPU 内核中的缓存已不足以满足 CPU 的需求,而制造工艺上的限制又不能大幅度
提高缓存的容量。因此出现了集成在与 CPU 同一块电路板上或主板上的缓存,此时就把 CPU 内核
集成的缓存称为一级缓存, 而外部的称为二级缓存。 一级缓存中还分数据缓存 (Data Cache ,D-Cache )
和指令缓存( Instruction Cache ,I-Cache )。二者分别用来存放数据和执行这些数据的指令,而且
两者可以同时被 CPU 访问,减少了争用 Cache 所造成的冲突,提高了处理器效能。英特尔公司在推
出 Pentium 4 处理器时,用新增的一种一级追踪缓存替代指令缓存,容量为
12K 条微指令。
随着 CPU 制造工艺的发展,二级缓存也能轻易的集成在
再用集成在 CPU 内部与否来定义一、 二级缓存,已不确切。而且随着二级缓存被集成入 CPU 内核中,
以往二级缓存与 CPU 大差距分频的情况也被改变,此时其以相同于主频的速度工作,可以为
二级缓存是 CPU 性能表现的关键之一,在 CPU 核心不变化的情况下,增加二级缓存容量能使性
能大幅度提高。而同一核心的 CPU 高低端之分往往也是在二级缓存上有差异,由此可见二级缓存对
于 CPU 的重要性。
CPU 在缓存中找到有用的数据被称为命中, 当缓存中没有 CPU 所需的数据时(这时称为未命中) ,
CPU 才访问内存。从理论上讲,在一颗拥有二级缓存的
就是说 CPU 一级缓存中找到的有用数据占数据总量的
CPU 中,读取一级缓存的命中率为 80%。也
80%,剩下的 20%从二级缓存中读取。由于不
能准确预测将要执行的数据, 读取二级缓存的命中率也在 80%左右(从二级缓存读到有用的数据占总
数据的 16%)。那么还有的数据就不得不从内存调用,但这已经是一个相当小的比例了。目前的较高
端的 CPU 中,还会带有三级缓存,它是为读取二级缓存后未命中的数据设计的
级缓存的 CPU 中,只有约 5%的数据需要从内存中调用,这进一步提高了
为了保证 CPU 访问时有较高的命中率,缓存中的内容应该按一定的算法替换。一种较常用的算
法是“最近最少使用算法 ”(LRU 算法),它是将最近一段时间内最少被访问过的行淘汰出局。因此需
要为每行设置一个计数器, LRU 算法是把命中行的计数器清零,其他各行计数器加
淘汰行计数器计数值最大的数据行出局。这是一种高效、科学的算法,其计数器清零过程可以把一些
频繁调用后再不需要的数据淘汰出缓存,提高缓存的利用率。
CPU 产品中,一级缓存的容量基本在 4KB 到 64KB 之间,二级缓存的容量则分为 128KB 、256KB 、
512KB 、1MB、2MB 等。一级缓存容量各产品之间相差不大,而二级缓存容量则是提高
关键。二级缓存容量的提升是由 CPU 制造工艺所决定的,容量增大必然导致 CPU 内部晶体管数的增
加,要在有限的 CPU 面积上集成更大的缓存,对制造工艺的要求也就越高。