前言:从砖块到大楼

上一篇我们把三种存储单元拆开看了:SRAM 的锁存器、DRAM 的电容、NAND 的浮栅——那是”砖块”的故事。

但一台真实的计算机,从不会只用一种存储器。它把好几种存储器组装成一栋大楼:快的在上、慢的在下,贵的少放、便宜的多放,中间靠搬运工衔接。

这就是今天的主角:存储层级(Memory Hierarchy),江湖人称”内存金字塔”。

为什么要分层?因为世界上不存在又快、又大、又便宜的存储器。SRAM 快但贵,NAND 便宜但慢,谁也通吃不了——于是工程师让它们组队分工。

一、完整的金字塔:从寄存器到硬盘

完整的内存金字塔:寄存器、三级缓存、主内存、HBF、SSD 与硬盘——HBF 是新插入的层级

从上往下逐层看一遍。先说明:下面的数字都是典型量级,不同产品、不同年份差别很大,看数量级就好。

  • 寄存器(Register):CPU 内部直接装载数据的格子,延迟不到 1 纳秒,容量按 KB 甚至”个”来数——快到没朋友,也贵到没法按 GB 报价。
  • L1 / L2 / L3 缓存:全由 SRAM 组成。L1 延迟约 1ns、几十 KB;L2 约几 ns、几百 KB 到几 MB;L3 约二十到四十 ns、几十 MB。
  • DRAM 主内存:延迟约 80~100ns,容量几十 GB,每 GB 大约几美元。就是插在主板上的内存条。
  • HBF(新层级):单堆栈容量可达约 512 GB,带宽比肩 HBM;延迟介于 DRAM 与 SSD 之间——第一篇介绍过,它是刚插进金字塔的新成员。
  • NAND SSD:延迟约 100μs(微秒),容量几 TB,每 GB 不到 0.1 美元。
  • 硬盘 / 归档(HDD、磁带):延迟约 10ms 起步,容量几十 TB 乃至 PB 级,每 GB 约 0.02 美元。

两个方向记住它:

  • 越往上:越快、越贵、越小
  • 越往下:越慢、越便宜、越大

汇总成一张速查表(全部是”约”和数量级):

层级 典型延迟 典型容量 每 GB 价格
寄存器 < 1ns 几 KB 没法按 GB 报价
L1 缓存 ~1ns 几十 KB 极贵(SRAM)
L2 / L3 缓存 几 ns ~ 40ns 几百 KB ~ 几十 MB 很贵(SRAM)
DRAM 主内存 ~80-100ns 几十 GB 约 $2~4
HBF(预计) 介于 DRAM 与 SSD 之间 单堆栈 ~512 GB 介于两者之间
NAND SSD ~100μs 几 TB 约 $0.1 以内
硬盘 / 归档 ~10ms 起 几十 TB ~ PB 约 $0.02

二、为什么分层有效:局部性原理

看到这你可能会问:数据一会儿放上面、一会儿放下面,CPU 不会疯掉吗?

分层之所以成立,靠的是程序的一个天性:局部性(Locality)

  • 时间局部性(Temporal Locality):刚被用过的数据,很可能马上再用。循环里的变量,一秒钟能被访问几百万次。
  • 空间局部性(Spatial Locality):挨着它的数据,很可能马上被用。数组是挨个儿遍历的——读完第 100 个元素,第 101 个基本跑不了。

看一小段假代码就有感觉了:

1
2
3
sum = 0
for i in 0..99: # 循环变量 i:时间局部性
sum += data[i] # 数组 data[i]:空间局部性

isum 这两个变量被反复读写——第一次访问后就被缓存在寄存器或 L1 里,后面几乎零成本;data 数组是连续存放的,CPU 每次取 data[i],都会顺手把后面一段一起搬进缓存(一次搬一整缓存行(Cache Line),通常 64 字节),等用到 data[i+1] 时就白捡一次命中。

于是就有了缓存的工作方式:热数据往上层搬,冷数据往下层赶。CPU 要数据时,先看 L1 → 没有?看 L2 → 还没有?看 L3 → 再没有才去内存;内存没有,就去 SSD,一层层往下找,找到后再一路搬回顶层。

一次访问”在上面找到了”,叫缓存命中(Hit);一路掉到底层才叫未命中(Miss)

命中率决定体验。L1 命中率做得好,CPU 绝大多数访问都发生在 1ns 级别,整台机器就显得飞快;一旦频繁”掉到底层”,CPU 就只能干等。这也是为什么同样的 CPU,缓存设计的好坏能拉开巨大差距。

三、把延迟翻译成人话

“纳秒””微秒””毫秒”念起来毫无感觉。我们做个思想实验:把时间放大十亿倍,让”L1 命中 = 1 秒”,其他层级等比例放大:

如果 L1 命中是 1 秒:访问一次主内存要约一分半,SSD 要一天多,硬盘要小半年(数量级近似)
  • L1 缓存命中:1 秒——伸手就拿到;
  • L3 缓存命中:约 20 秒——起身倒杯水;
  • DRAM 访问:约 1 分半——下楼取个快递;
  • SSD 访问:约 1 天多——网购次日达;
  • 硬盘寻道:约 4 个月——海淘等到怀疑人生。

(换算说明:DRAM 比 L1 慢约 100 倍,SSD 慢约 10 万倍,硬盘慢约 1000 万倍——都是数量级近似。)

这就是缓存的使命:拼了命提高命中率,让 CPU 尽量别掉到底层去。一旦工作集超过内存容量、频繁落到 SSD,程序性能就会断崖式下跌——行话叫抖动(Thrashing)

顺带一提,这也解释了为什么”加内存条”常常是老电脑最立竿见影的升级:不是内存条变快了,而是掉到下层的次数变少了

四、价格:每上一层,贵一个数量级

金字塔不光是速度分层,也是价格分层

成本与容量(双对数坐标):从缓存到硬盘,每 GB 价格差着好几个数量级

大致的量级(”约”,随行情浮动):

  • SRAM:每 GB 成本是 DRAM 的成百上千倍——它其实按芯片面积卖,基本不按 GB 卖;
  • DRAM:每 GB 大约是 NAND SSD 的几十倍
  • NAND SSD:每 GB 大约是机械硬盘的几倍
  • 硬盘 / 磁带:地板价,按 TB 拍卖。

于是每往上一层,容量缩小、单价飙升;工程师的预算永远在”上面再放一点”和”下面省一点”之间摇摆。

**每一层存在的意义,都是用更便宜的下一层,去扩充更贵的上一层的容量。**缓存是内存的”替身”,内存是 SSD 的”缓冲”,SSD 是硬盘的”前置仓”——一层套一层,每层都只保留”最值得快”的那一小撮数据。

五、HBF 在金字塔里的位置

把第一篇的知识放回这张图:

  • 比 DRAM / HBM:HBF 容量大约高一个数量级(单堆栈约 512 GB 对几十 GB)、断电不丢,但延迟更高——毕竟 NAND 的底层单元比 DRAM 慢;
  • 比 SSD:带宽高一到两个数量级,同样断电不丢。

所以 HBF 不是某一层的”升级替代品”,而是在 DRAM 和 SSD 之间新开的一层:带宽向 HBM 看齐,容量和成本向 NAND 靠拢,专吃”读多写少”的场景——比如 AI 推理时要反复读取的大模型权重。

分层的哲学到这里就闭环了:每一层,都是在”速度、容量、成本”这个不可能三角里的一次新折中。HBF 只是最新的一次,不会是最后一次。

总结:金字塔的两条腿

今天我们把整座金字塔盘了一遍:

  • 纵向是延迟:从不到 1ns 到 10ms,相差约 7 个数量级——放大成人话,就是 1 秒和 4 个月的区别;
  • 横向是价格:每 GB 从缓存到硬盘,也差着好几个数量级;
  • 中间靠局部性粘合:命中就赚,未命中就赔。

最后送你一个观察世界的视角:这套”金字塔”不只长在 CPU 里——GPU 有显存层级,手机有闪存分层,浏览器有 HTTP 缓存,CDN 是互联网的缓存。只要”快的贵、便宜的慢”,就一定会长出金字塔。认出它,你就看懂了一大半系统设计的门道。

下一篇,我们聊金字塔上另一个同样重要的维度——带宽:位宽、频率、GB/s 到底怎么算出来?为什么 DDR5 能到 6400 MT/s?内存条的”64 位”和 HBM 的”1024 位”又差在哪?

我们下一篇见。