2024年5月5日发(作者:)

CPU一级缓存、二级缓存和三级缓存的作用:

首先我们来简单了解一下一级缓存。目前所有主流处理器大都具有一级缓存和二级缓

存,少数高端处理器还集成了三级缓存。其中,一级缓存可分为一级指令 缓存和一级数据

缓存。一级指令缓存用于暂时存储并向CPU递送各类运算指令;一级数据缓存用于暂时存

储并向CPU递送运算所需数据,这就是一级缓存的作用 (如果大家对上述文字理解困难

的话,可参照下图所示)。

那么,二级缓存的作用又是什么呢?简单地说,二级缓存就是一级缓存的缓冲器:一

级缓存制造成本很高因此它的容量有限,二级缓存的作用就是存储那些CPU处 理时需要

用到、一级缓存又无法存储的数据。同样道理,三级缓存和内存可以看作是二级缓存的缓

冲器,它们的容量递增,但单位制造成本却递减。需要注意的是, 无论是二级缓存、三级

缓存还是内存都不能存储处理器操作的原始指令,这些指令只能存储在CPU的一级指令缓

存中,而余下的二级缓存、三级缓存和内存仅用于 存储CPU所需数据。

根据工作原理的不同,目前主流处理器所采用的一级数据缓存又可以分为实数据读写

缓存和数据代码指令追踪缓存2种,它们分别被AMD和Intel所采用。不同的一级数据缓

存设计对于二级缓存容量的需求也各不相同,下面让我们简单了解一下这两种一级数据缓

存设计的不同之处。

一、AMD一级数据缓存设计

AMD采用的一级缓存设计属于传统的“实数据读写缓存”设计。基于该架构的一级

数据缓存主要用于存储CPU最先读取的数据;而更多的读取数据则分别存储在 二级缓存

和系统内存当中。做个简单的假设,假如处理器需要读取“AMD ATHLON 64 3000+ IS

GOOD”这一串数据(不记空格),那么首先要被读取的“AMDATHL”将被存储在一级数

据缓存中,而余下的“ON643000+ISGOOD”则被分 别存储在二级缓存和系统内存当中

(如下图所示)。

需要注意的是,以上假设只是对AMD处理器一级数据缓存的一个抽象描述,一级数

据缓存和二级缓存所能存储的数据长度完全由缓存容量的大小决定,而绝非以上 假设中的

几个字节。“实数据读写缓存”的优点是数据读取直接快速,但这也需要一级数据缓存具

有一定的容量,增加了处理器的制造难度(一级数据缓存的单位制 造成本较二级缓存高)。

二、Intel一级数据缓存设计

自P4时代开始,Intel开始采用全新的“数据代码指令追踪缓存”设计。基于这种架

构的一级数据缓存不再存储实际的数据,而是存储这些数据在二级缓存中 的指令代码(即

数据在二级缓存中存储的起始地址)。假设处理器需要读取“INTEL P4 IS GOOD”这一串

数据(不记空格),那么所有数据将被存储在二级缓存中,而一级数据代码指令追踪缓存需

要存储的仅仅是上述数据的起始地址(如下图所示)。

由于一级数据缓存不再存储实际数据,因此“数据代码指令追踪缓存”设计能够极大

地降CPU对一级数据缓存容量的要求,降低处理器的生产难度。但这种设计的弊端在于数

据读取效率较“实数据读写缓存设计”低,而且对二级缓存容量的依赖性非常大。

在了解了一级缓存、二级缓存的大致作用及其分类以后,下面我们来回答以下硬件一

菜鸟网友提出的问题。

从理论上讲,二级缓存越大处理 器的性能越好,但这并不是说二级缓存容量加倍就能

够处理器带来成倍的性能增长。目前CPU处理的绝大部分数据的大小都在0-256KB之间,

小部分数据的 大小在256KB-512KB之间,只有极少数数据的大小超过512KB。所以只

要处理器可用的一级、二级缓存容量达到256KB以上,那就能够应付正常 的应用;512KB

容量的二级缓存已经足够满足绝大多数应用的需求。

这其中,对于采用“实数据读写缓存”设计的AMD Athlon 64、Sempron处理器而

言,由于它们已经具备了64KB一级指令缓存和64KB一级数据缓存,只要处理器的二级

缓存容量大于等于128KB就能够存 储足够的数据和指令,因此它们对二级缓存的依赖性

并不大。这就是为什么主频同为1.8GHz的Socket 754 Sempron 3000+(128KB二级

缓存)、Sempron 3100+(256KB二级缓存)以及Athlon 64 2800+(512KB二级缓存)

在大多数评测中性能非常接近的主要原因。所以对于普通用户而言754 Sempron 2600+

是值得考虑的。

反观Intel目前主推的P4、赛扬系列处理器,它们都采用了“数据代码指令追踪缓存”

架构,其中Prescott内核的一级缓存中只包含了12KB一级 指令缓存和16KB一级数据

缓存,而Northwood内核更是只有12KB一级指令缓存和8KB一级数据缓存。所以P4、

赛扬系列处理器对二级缓存的依 赖性是非常大的,赛扬D 320(256KB二级缓存)与赛

扬 2.4GHz(128KB二级缓存)性能上的巨大差距就很好地证明了这一点;而赛扬D和

P4 E处理器之间的性能差距同样十分明显。

最后,如果您是狂热的游戏发烧友或者从事多媒体制作的专业用户,那么具有1MB

二级缓存的P4处理器和具有512KB/1MB二级缓存的Athlon 64处理器才是您理想的选

择。因为在高负荷的运算下,CPU的一级缓存和二级缓存近乎“爆满”,在这个时候大容

量的二级缓存能够为处理器带来5%-10% 左右的性能提升,这对于那些要求苛刻的用户

来说是完全有必要的。

CPU之CPU一级二级三级缓存

CPU缓存

缓存大小也是CPU的重要指标之一,而且缓存的结构和大小对CPU速度的影响非常

大,CPU内缓存的运行频率极高,一般是和处理器同频运作,工作效率远远 大于系统内

存和硬盘。实际工作时,CPU往往需要重复读取同样的数据块,而缓存容量的增大,可以

大幅度提升CPU内部读取数据的命中率,而不用再到内存或 者硬盘上寻找,以此提高系

统性能。但是由于CPU芯片面积和成本的因素来考虑,缓存都很小。

L1 Cache(一级缓存)是CPU第一层高速缓存,分为数据缓存和指令缓存。内置的L1

高速缓存的容量和结构对CPU的性能影响较大,不过高速缓冲存储器均 由静态RAM组

成,结构较复杂,在CPU管芯面积不能太大的情况下,L1级高速缓存的容量不可能做得

太大。一般服务器CPU的L1缓存的容量通常在32— 256KB。

L2 Cache(二级缓存)是CPU的第二层高速缓存,分内部和外部两种芯片。内部的芯片

二级缓存运行速度与主频相同,而外部的二级缓存则只有主频的一半。 L2高速缓存容量

也会影响CPU的性能,原则是越大越好,现在家庭用CPU容量最大的是512KB,而服务

器和工作站上用CPU的L2高速缓存更高达 256-1MB,有的高达2MB或者3MB。

L3 Cache(三级缓存),分为两种,早期的是外置,现在的都是内置的。而它的实际作

用即是,L3缓存的应用可以进一步降低内存延迟,同时提升大数据量计算 时处理器的性

能。降低内存延迟和提升大数据量计算能力对游戏都很有帮助。而在服务器领域增加L3

缓存在性能方面仍然有显著的提升。比方具有较大L3缓存的 配置利用物理内存会更有效,

故它比较慢的磁盘I/O子系统可以处理更多的数据请求。具有较大L3缓存的处理器提供更

有效的文件系统缓存行为及较短消息和处 理器队列长度。

其实最早的L3缓存被应用在AMD发布的K6-III处理器上,当时的L3缓存受限于制

造工艺,并没有被集成进芯片内部,而是集成在主板上。在只能够和系 统总线频率同步的

L3缓存同主内存其实差不了多少。后来使用L3缓存的是英特尔为服务器市场所推出的

Itanium处理器。接着就是P4EE和至强MP。 Intel还打算推出一款9MB L3缓存的

Itanium2处理器,和以后24MB L3缓存的双核心Itanium2处理器。

但基本上L3缓存对处理器的性能提高显得不是很重要,比方配备1MB L3缓存的

Xeon MP处理器却仍然不是Opteron的对手,由此可见前端总线的增加,要比缓存增加

带来更有效的性能提升。