存储器金字塔

⼤家如果想⾃⼰组装电脑的话,肯定需要购买⼀个 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 个⽉。
可以发现,不同的存储器之间性能差距很⼤,构造存储器分级很有意义,分级的⽬的是要构造 缓存 体系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程小猹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值