⼤家如果想⾃⼰组装电脑的话,肯定需要购买⼀个
CPU
,但是存储器⽅⾯的设备,分类⽐较多,那我们肯 定不能只买⼀种存储器,⽐如你除了要买内存,还要买硬盘,⽽针对硬盘我们还可以选择是固态硬盘还是机械硬盘。
相信⼤家都知道内存和硬盘都属于计算机的存储设备,断电后内存的数据是会丢失的,⽽硬盘则不会,因为硬盘是持久化存储设备,同时也是⼀个 I/O
设备。
但其实
CPU
内部也有存储数据的组件,这个应该⽐较少⼈注意到,⽐如
寄存器、
CPU L1/L2/L3 Cache
也都是属于存储设备,只不过它们能存储的数据⾮常⼩,但是它们因为靠近 CPU
核⼼,所以访问速度都⾮常快,快过硬盘好⼏个数量级别。
问题来了,
那机械硬盘、固态硬盘、内存这三个存储器,到底和
CPU L1 Cache
相⽐速度差多少倍呢?
在回答这个问题之前,我们先来看看「
存储器的层次结构
」,好让我们对存储器设备有⼀个整体的认识。

存储器的层次结构
我们想象中⼀个场景,⼤学期末准备考试了,你前去图书馆临时抱佛脚。那么,在看书的时候,我们的⼤脑会思考问题,也会记忆知识点,另外我们通常也会把常⽤的书放在⾃⼰的桌⼦上,当我们要找⼀本不常⽤的书,则会去图书馆的书架找。
就是这么⼀个⼩⼩的场景,已经把计算机的存储结构基本都涵盖了。
我们可以把
CPU
⽐喻成我们的⼤脑,⼤脑正在思考的东⻄,就好⽐
CPU
中的
寄存器
,处理速度是最快的,但是能存储的数据也是最少的,毕竟我们也不能⼀下同时思考太多的事情,除⾮你练过。
我们⼤脑中的记忆,就好⽐
CPU Cache
,中⽂称为
CPU
⾼速缓存,处理速度相⽐寄存器慢了⼀点,但是能存储的数据也稍微多了⼀些。
CPU Cache
通常会分为
L1
、
L2
、
L3
三层
,其中
L1 Cache
通常分成「数据缓存」和「指令缓存」,
L1是距离 CPU
最近的,因此它⽐
L2
、
L3
的读写速度都快、存储空间都⼩。我们⼤脑中短期记忆,就好⽐L1 Cache,⽽⻓期记忆就好⽐
L2/L3 Cache
。
寄存器和
CPU Cache
都是在
CPU
内部,跟
CPU
挨着很近,因此它们的读写速度都相当的快,但是能存储的数据很少,毕竟 CPU
就这么丁点⼤。
知道
CPU
内部的存储器的层次分布,我们放眼看看
CPU
外部的存储器。
当我们⼤脑记忆中没有资料的时候,可以从书桌或书架上拿书来阅读,那我们桌⼦上的书,就好⽐
内存
, 我们虽然可以⼀伸⼿就可以拿到,但读写速度肯定远慢于寄存器,那图书馆书架上的书,就好⽐
硬盘
,能
存储的数据⾮常⼤,但是读写速度相⽐内存差好⼏个数量级,更别说跟寄存器的差距了。
我们从图书馆书架取书,把书放到桌⼦上,再阅读书,我们⼤脑就会记忆知识点,然后再经过⼤脑思考,这⼀系列过程相当于,数据从硬盘加载到内存,再从内存加载到 CPU
的寄存器和
Cache
中,然后再通过CPU 进⾏处理和计算。
对于存储器,它的速度越快、能耗会越⾼、⽽且材料的成本也是越贵的,以⾄于速度快的存储器的容量都
⽐较⼩。
CPU
⾥的寄存器和
Cache
,是整个计算机存储器中价格最贵的,虽然存储空间很⼩,但是读写速度是极快的,⽽相对⽐较便宜的内存和硬盘,速度肯定⽐不上 CPU
内部的存储器,但是能弥补存储空间的不⾜。
存储器通常可以分为这么⼏个级别:

寄存器
最靠近
CPU
的控制单元和逻辑计算单元的存储器,就是寄存器了,它使⽤的材料速度也是最快的,因此价格也是最贵的,那么数量不能很多。
存储器的数量通常在⼏⼗到⼏百之间,每个寄存器可以⽤来存储⼀定的字节(
byte
)的数据。⽐如:
- 32 位 CPU 中⼤多数寄存器可以存储 4 个字节;
- 64 位 CPU 中⼤多数寄存器可以存储 8 个字节。
寄存器的访问速度⾮常快,⼀般要求在半个
CPU
时钟周期内完成读写,
CPU
时钟周期跟
CPU
主频息息相关,⽐如 2 GHz
主频的
CPU
,那么它的时钟周期就是
1/2G
,也就是
0.5ns
(纳秒)。
CPU
处理⼀条指令的时候,除了读写寄存器,还需要解码指令、控制指令执⾏和计算。如果寄存器的速度太慢,则会拉⻓指令的处理周期,从⽽给⽤户的感觉,就是电脑「很慢」。
CPU Cache
CPU Cache
⽤的是⼀种叫
SRAM
(
Static Random-Access
Memory
,静态随机存储器)
的芯⽚。
SRAM
之所以叫「静态」存储器,是因为只要有电,数据就可以保持存在,⽽⼀旦断电,数据就会丢失了。
在
SRAM
⾥⾯,⼀个
bit
的数据,通常需要
6
个晶体管,所以
SRAM
的存储密度不⾼,同样的物理空间下,能存储的数据是有限的,不过也因为 SRAM
的电路简单,所以访问速度⾮常快。
CPU
的⾼速缓存,通常可以分为
L1
、
L2
、
L3
这样的三层⾼速缓存,也称为⼀级缓存、⼆次缓存、三级缓存。

L1 高速缓存
L1
⾼速缓存的访问速度⼏乎和寄存器⼀样快,通常只需要
2~4
个时钟周期,⽽⼤⼩在⼏⼗
KB
到⼏百KB 不等。
每个
CPU
核⼼都有⼀块属于⾃⼰的
L1
⾼速缓存,指令和数据在
L1
是分开存放的,所以
L1
⾼速缓存通常分成
指令缓存
和
数据缓存
。
在
Linux
系统,我们可以通过这条命令,查看
CPU
⾥的
L1 Cache
「数据」缓存的容量⼤⼩:
$ cat /sys/devices/system/cpu/cpu0/cache/index0/size
32K
⽽查看
L1 Cache
「指令」缓存的容量⼤⼩,则是:
$ cat /sys/devices/system/cpu/cpu0/cache/index1/size
32K
L2 高速缓存
L2
⾼速缓存同样每个
CPU
核⼼都有,但是
L2
⾼速缓存位置⽐
L1
⾼速缓存距离
CPU
核⼼ 更远,它⼤⼩⽐ L1
⾼速缓存更⼤,
CPU
型号不同⼤⼩也就不同,通常⼤⼩在⼏百
KB
到⼏
MB
不等,访问速度则更慢,速度在
10~20
个时钟周期。
在
Linux
系统,我们可以通过这条命令,查看
CPU
⾥的
L2 Cache
的容量⼤⼩:
$ cat /sys/devices/system/cpu/cpu0/cache/index2/size
256K
L3 高速缓存
L3
⾼速缓存通常是多个
CPU
核⼼共⽤的,位置⽐
L2
⾼速缓存距离
CPU
核⼼ 更远,⼤⼩也会更⼤些,通常⼤⼩在⼏ MB
到⼏⼗
MB
不等,具体值根据
CPU
型号⽽定。
访问速度相对也⽐较慢⼀些,访问速度在
20~60
个时钟周期。
在
Linux
系统,我们可以通过这条命令,查看
CPU
⾥的
L3 Cache
的容量⼤⼩:
$ cat /sys/devices/system/cpu/cpu0/cache/index3/size
3072K
内存
内存⽤的芯⽚和
CPU Cache
有所不同,它使⽤的是⼀种叫作
DRAM
(
Dynamic Random Access
Memory
,动态随机存取存储器)
的芯⽚。
相⽐
SRAM
,
DRAM
的密度更⾼,功耗更低,有更⼤的容量,⽽且造价⽐
SRAM
芯⽚便宜很多。
DRAM
存储⼀个
bit
数据,只需要⼀个晶体管和⼀个电容就能存储,但是因为数据会被存储在电容⾥,电容会不断漏电,所以需要「定时刷新」电容,才能保证数据不会被丢失,这就是 DRAM
之所以被称为「动态」存储器的原因,只有不断刷新,数据才能被存储起来。
DRAM
的数据访问电路和刷新电路都⽐
SRAM
更复杂,所以访问的速度会更慢,内存速度⼤概在
200~300
个 时钟周期之间。
SSD/HDD 硬盘
SSD
(
Solid-state disk
) 就是我们常说的固体硬盘,结构和内存类似,但是它相⽐内存的优点是断电后数据还是存在的,⽽内存、寄存器、⾼速缓存断电后数据都会丢失。内存的读写速度⽐ SSD
⼤概快
10~1000
倍。
当然,还有⼀款传统的硬盘,也就是机械硬盘(
Hard Disk Drive, HDD
),它是通过物理读写的⽅式来访问数据的,因此它访问速度是⾮常慢的,它的速度⽐内存慢
10W
倍左右。
由于
SSD
的价格快接近机械硬盘了,因此机械硬盘已经逐渐被
SSD
替代了。
存储器的层次关系
现代的⼀台计算机,都⽤上了
CPU Cahce
、内存、到
SSD
或
HDD
硬盘这些存储器设备了。
其中,存储空间越⼤的存储器设备,其访问速度越慢,所需成本也相对越少。
CPU
并不会直接和每⼀种存储器设备直接打交道,⽽是每⼀种存储器设备只和它相邻的存储器设备打交道。
⽐如,
CPU Cache
的数据是从内存加载过来的,写回数据的时候也只写回到内存,
CPU Cache
不会直接把数据写到硬盘,也不会直接从硬盘加载数据,⽽是先加载到内存,再从内存加载到 CPU Cache
中。

所以,
每个存储器只和相邻的⼀层存储器设备打交道,并且存储设备为了追求更快的速度,所需的材料成
本必然也是更高,也正因为成本太高,所以
CPU
内部的寄存器、
L1\L2\L3 Cache
只好⽤较⼩的容量,相
反内存、硬盘则可⽤更⼤的容量,这就我们今天所说的存储器层次结构
。
另外,当
CPU
需要访问内存中某个数据的时候,如果寄存器有这个数据,
CPU
就直接从寄存器取数据即可,如果寄存器没有这个数据,CPU
就会查询
L1
⾼速缓存,如果
L1
没有,则查询
L2
⾼速缓存,
L2
还是没有的话就查询 L3
⾼速缓存,
L3
依然没有的话,才去内存中取数据。
存储器之间的实际价格和性能差距
前⾯我们知道了,速度越快的存储器,造价成本往往也越⾼,那我们就以实际的数据来看看,不同层级的存储器之间的性能和价格差异。
下⾯这张表格是不同层级的存储器之间的成本对⽐图:

你可以看到
L1 Cache
的访问延时是
1
纳秒,⽽内存已经是
100
纳秒了,相⽐
L1 Cache
速度慢了
100
倍。另外,机械硬盘的访问延时更是⾼达 10
毫秒,相⽐
L1 Cache
速度慢了
10000000
倍,差了好⼏个数量级别。
在价格上,每⽣成
MB
⼤⼩的
L1 Cache
相⽐内存贵了
466
倍,相⽐机械硬盘那更是贵了
175000
倍。 我在某东逛了下各个存储器设备的零售价,8G
内存
+ 1T
机械硬盘
+ 256G
固态硬盘的总价格,都不及⼀块 Intle i5-10400
的
CPU
的价格,这款
CPU
的⾼速缓存的总⼤⼩也就⼗多
MB
。
总结
各种存储器之间的关系,可以⽤我们在图书馆学习这个场景来理解。
CPU
可以⽐喻成我们的⼤脑,我们当前正在思考和处理的知识的过程,就好⽐
CPU
中的
寄存器
处理数据的过程,速度极快,但是容量很⼩。⽽ CPU
中的
L1-L3 Cache
好⽐我们⼤脑中的短期记忆和⻓期记忆, 需要⼩⼩花费点时间来调取数据并处理。
我们⾯前的桌⼦就相当于
内存
,能放下更多的书(数据),但是找起来和看起来就要花费⼀些时间,相⽐ CPU Cache 慢不少。⽽图书馆的书架相当于
硬盘
,能放下⽐内存更多的数据,但找起来就更费时间了,可 以说是最慢的存储器设备了。
从 寄存器、
CPU Cache
,到内存、硬盘,这样⼀层层下来的存储器,访问速度越来越慢,存储容量越来越⼤,价格也越来越便宜,⽽且每个存储器只和相邻的⼀层存储器设备打交道,于是这样就形成了存储器的层次结构。
再来回答,开头的问题:那机械硬盘、固态硬盘、内存这三个存储器,到底和
CPU L1 Cache
相⽐速度差多少倍呢?
CPU L1 Cache
随机访问延时是
1
纳秒,内存则是
100
纳秒,所以
CPU L1 Cache
⽐内存快
100
倍左
右
。
SSD
随机访问延时是
150
微妙,所以
CPU L1 Cache
⽐
SSD
快
150000
倍左右
。
最慢的机械硬盘随机访问延时已经⾼达
10
毫秒,我们来看看机械硬盘到底有多「⻳速」:
- SSD ⽐机械硬盘快 70 倍左右;
- 内存⽐机械硬盘快 100000 倍左右;
- CPU L1 Cache ⽐机械硬盘快 10000000 倍左右;
我们把上述的时间⽐例差异放⼤后,就能⾮常直观感受到它们的性能差异了。如果
CPU
访问
L1 Cache
的缓存时间是 1
秒,那访问内存则需要⼤约
2
分钟,随机访问
SSD
⾥的数据则需要
1.7
天,访问机械硬盘那更久,⻓达近 4
个⽉。
可以发现,不同的存储器之间性能差距很⼤,构造存储器分级很有意义,分级的⽬的是要构造
缓存
体系。