内存金字塔详解:速度、容量与成本的权衡
前言:从砖块到大楼
上一篇我们把三种存储单元拆开看了:SRAM 的锁存器、DRAM 的电容、NAND 的浮栅——那是”砖块”的故事。
但一台真实的计算机,从不会只用一种存储器。它把好几种存储器组装成一栋大楼:快的在上、慢的在下,贵的少放、便宜的多放,中间靠搬运工衔接。
这就是今天的主角:存储层级(Memory Hierarchy),江湖人称”内存金字塔”。
为什么要分层?因为世界上不存在又快、又大、又便宜的存储器。SRAM 快但贵,NAND 便宜但慢,谁也通吃不了——于是工程师让它们组队分工。
一、完整的金字塔:从寄存器到硬盘
从上往下逐层看一遍。先说明:下面的数字都是典型量级,不同产品、不同年份差别很大,看数量级就好。
- 寄存器(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 | sum = 0 |
i 和 sum 这两个变量被反复读写——第一次访问后就被缓存在寄存器或 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 秒——伸手就拿到;
- L3 缓存命中:约 20 秒——起身倒杯水;
- DRAM 访问:约 1 分半——下楼取个快递;
- SSD 访问:约 1 天多——网购次日达;
- 硬盘寻道:约 4 个月——海淘等到怀疑人生。
(换算说明:DRAM 比 L1 慢约 100 倍,SSD 慢约 10 万倍,硬盘慢约 1000 万倍——都是数量级近似。)
这就是缓存的使命:拼了命提高命中率,让 CPU 尽量别掉到底层去。一旦工作集超过内存容量、频繁落到 SSD,程序性能就会断崖式下跌——行话叫抖动(Thrashing)。
顺带一提,这也解释了为什么”加内存条”常常是老电脑最立竿见影的升级:不是内存条变快了,而是掉到下层的次数变少了。
四、价格:每上一层,贵一个数量级
金字塔不光是速度分层,也是价格分层。
大致的量级(”约”,随行情浮动):
- 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 位”又差在哪?
我们下一篇见。










