文章目录
摘要:计算机存储层次结构之所以存在,不是因为工程师喜欢把东西分成几层,而是因为任何一种单一的存储技术都无法同时满足“快、大、便宜”这三个约束。SRAM 可以做到 0.5 ns 的访问延迟,但每个存储单元需要 4~6 个晶体管,成本和面积让它只能停留在几十 KB 量级;DRAM 把单元压缩到“1 个晶体管 + 1 个电容”,容量可以做到 GB 级,但电容漏电迫使它每 10~100 ms 刷新一次,访问延迟落在 50~70 ns 量级;NAND 闪存和磁记录介质把单位容量成本压到每 GB 几美分,却把随机访问延迟推到了微秒到毫秒量级。层次结构的全部工程意义,可以用一条公式来概括:让 90% 以上的访问落在快的层,只让 10% 以下的访问走到慢的层,从而使“平均访问时间”逼近最快那一层的速度,而“总容量”逼近最便宜那一层的规模。这条公式就是平均内存访问时间(AMAT)。本文严格基于 2024~2026 年的公开课程讲义、体系结构教材数据和 2026 年的 HBM4/CXL 技术资料,从 SRAM 与 DRAM 的物理差异出发,逐层拆解 Cache 的局部性原理、三种映射方式与写策略,用 AMAT 公式量化每一级的存在价值,再进入主存与外存的容量—延迟权衡,最后讨论 HBM 和 CXL 如何改写传统金字塔的边界。
1 存储层次结构要解决的问题:一个绕不开的“不可能三角”
1.1 速度、容量、成本三者的互斥关系
任何一种存储技术,都逃不开速度、容量、成本三个维度的权衡。这个“不可能三角”不是工程实现上的暂时缺陷,而是由物理原理决定的硬约束。
SRAM(静态随机存取存储器) 的每个单元用 4 个或 6 个晶体管锁存一个比特,只要供电就无需刷新,访问延迟可以做到 0.5~2.5 ns(1~3 个时钟周期)。代价是每个比特需要 4~6 个晶体管,芯片面积大、集成度低,同样面积的硅片能做出的容量远小于 DRAM。这就是为什么 SRAM 只能用在几十 KB 到几十 MB 的 Cache 上,而不能用来做主存。
DRAM(动态随机存取存储器) 的每个单元只有 1 个晶体管 + 1 个电容,靠电容中存储的电荷量表示 0 或 1。电容会漏电,所以必须每隔 10~100 ms 周期性刷新,否则数据就会丢失——这就是“动态”一词的来源。1 个晶体管的单元结构让 DRAM 的位密度远高于 SRAM,容量可以做到 GB 级,成本也低得多;但刷新电路、行列地址选通(RAS/CAS)和电容充放电的物理过程,把访问延迟推到了 50~70 ns(150~200 个周期)量级。
外存(SSD/HDD) 追求的是“断电不丢数据”和“每 GB 最便宜”。NAND 闪存靠浮栅晶体管捕获电荷实现非易失存储,访问延迟在 5~50 µs 量级;机械硬盘靠盘片旋转和磁头寻道,延迟在 5~20 ms 量级。它们的容量可以做到 TB 级,但随机访问速度和 Cache、主存之间差了三到六个数量级。
表1 存储层次各层的物理介质、容量、延迟与成本量级
| 层级 | 典型介质 | 容量量级 | 访问延迟 | 相对延迟 | 成本量级 |
|---|---|---|---|---|---|
| 寄存器 | SRAM(触发器) | 数百字节~数 KB | 约 0.3 ns(1 周期) | 1× | 极高 |
| L1 Cache | SRAM(片上) | 32~64 KB | 约 1 ns(3~4 周期) | 约 3× | 极高 |
| L2 Cache | SRAM(片上) | 256 KB~1 MB | 约 3~10 ns(10~30 周期) | 约 10~30× | 高 |
| L3 Cache | SRAM(片上,共享) | 8~32 MB | 约 10~20 ns(30~60 周期) | 约 30~60× | 较高 |
| 主存 | DRAM(DDR/HBM) | 8 GB~数 TB | 50~80 ns(150~250 周期) | 约 200× | 中 |
| SSD | NAND 闪存 | 512 GB~数 TB | 5~50 µs | 约 10⁴~10⁵× | 低 |
| HDD | 磁记录 | 1~30 TB | 5~20 ms | 约 10⁷× | 极低 |
数据来源:SRAM/DRAM/Cache 延迟量级;HDD 延迟;成本与容量量级。
1.2 层次结构的核心思想:每一层都是下一层的“缓存”
存储层次结构的基本思想可以用一句话概括:对于每一个层级 k,更快、更小的设备充当更大、更慢的设备(层级 k+1)的缓存。寄存器是 L1 的缓存,L1 是 L2 的缓存,L2 是 L3 的缓存,L3 是主存的缓存,主存是外存的缓存,外存是远端存储(云存储、磁带库)的缓存。
这个“递归缓存”结构之所以能工作,是因为程序访问数据时并不均匀地触碰全部地址空间,而是呈现出局部性。如果程序随机地访问 4 TB 地址空间中的每一个字节,那么把 32 KB 的 L1 Cache 放在 CPU 旁边毫无意义——命中率会趋近于零。局部性原理是层次结构能够把“快的错觉”和“大的容量”同时兑现的唯一前提。
图 1 把存储金字塔画成一条从寄存器到远端存储的纵向链路,标出每一层的“谁是谁的缓存”关系,以及延迟量级的跳变位置。
图1 存储金字塔的递归缓存关系与延迟量级
2 Cache:用 SRAM 和局部性把“慢主存”伪装成“快内存”
2.1 局部性原理:Cache 能工作的物理基础
Cache 之所以有效,不是因为“SRAM 比 DRAM 快”这么简单——如果程序均匀地访问所有数据,Cache 的命中率会低到毫无价值。Cache 的全部收益来自程序访问的局部性(locality) ,它分为两种基本形式。
时间局部性(temporal locality) :如果一个数据或指令刚刚被访问过,它在不久的将来很可能被再次访问。最典型的例子是循环:程序反复执行同一段指令,最近执行过的指令很快会被再次执行。时间局部性的工程含义是把最近访问过的数据保留在更快的层级里,这样下一次访问就能在 Cache 中命中。
空间局部性(spatial locality) :如果一个地址被访问了,它附近的地址很可能很快被访问。指令通常是顺序执行的,数据访问往往集中在数组、结构体等连续地址空间上。空间局部性的工程含义是在取回一个数据时,把它所在的整个块(cache line)一起取回,这样下一次访问相邻地址时就不需要再去慢速层级取数。典型的 cache line 大小是 64 字节,也就是说一次内存访问实际上搬运的是 64 字节,而不是一个字。
这两种局部性共同解释了为什么“小的快存储 + 大的慢存储”可以伪造出“又大又快”的假象:程序在任一时刻真正活跃的数据(working set)通常远小于总数据量。把 working set 放在快层级,把其余数据留在慢层级,平均访问时间就会大幅偏向快层级。
2.2 Cache 的组织:三种映射方式与相联度
Cache 需要回答一个核心问题:主存中的一块数据,应该放在 Cache 的哪个位置? 这个问题的答案定义了三种映射方式。
直接映射(direct-mapped) 是最简单的方案:主存的每一个块只能映射到 Cache 中唯一的一个位置,映射关系由块地址对 Cache 行数取模决定。它的优点是硬件简单、命中判断只需要比较一个标签,访问延迟最低;缺点是冲突严重——两个不同的主存块如果映射到同一个 Cache 行,就会互相驱逐,即使 Cache 里还有大量空闲行。极端情况下,直接映射 Cache 的命中率可以降到接近零。
全相联(fully associative) 是另一个极端:主存的任何块都可以放在 Cache 的任何位置。它的命中率最高,因为不存在冲突驱逐;但硬件需要在一次访问中并行比较所有 Cache 行的标签,比较器数量和功耗随 Cache 容量线性增长,因此只适合小容量 Cache(如 TLB)。
组相联(set-associative) 是两者的折中:Cache 被划分为若干组,每组包含 N 行(N 路),主存的块先映射到唯一的一个组,但可以放在该组的任意一行中。N=1 时退化为直接映射,N 等于总行数时退化为全相联。现代 CPU 的 L1/L2/L3 Cache 普遍采用 4 路到 16 路组相联,在硬件复杂度和命中率之间取得平衡。
图 2 用并列的示意图对比三种映射方式:直接映射的“一对一”、全相联的“任意放置”和组相联的“组内任意”。
图2 直接映射、全相联与组相联的映射关系对比
2.3 写策略与替换策略:Cache 的“一致性”和“淘汰”问题
Cache 不仅要处理读,还要处理写。写操作带来一个根本性的选择:数据写进 Cache 之后,主存什么时候更新?
写直达(write-through) :每次写 Cache 时同时写主存。优点是主存始终和 Cache 保持一致,实现简单;缺点是每次写操作都要访问慢速的主存,写带宽被主存延迟拖累。写回(write-back) :只写 Cache,并给该 Cache 行设置一个“脏位”(dirty bit);只有当这一行被驱逐时,才把脏数据写回主存。优点是把多次写合并成一次主存写入,大幅减少主存流量;缺点是实现复杂,且主存在任意时刻可能不是最新的。现代 CPU 的 L1/L2/L3 Cache 普遍采用写回 + 写分配(write-allocate) :写缺失时先把块调入 Cache,再在 Cache 中修改。
当 Cache 已满、需要为新块腾位置时,就需要替换策略。LRU(least recently used) 淘汰最久未被访问的行,它直接利用了时间局部性,但严格 LRU 需要为每一行维护时间戳或链表,硬件开销大,通常只用于 2 路组相联;更高相联度下常用伪 LRU(pseudo-LRU) ,用少量状态位近似 LRU 的行为,在硬件成本和命中率之间取得折中。
2.4 AMAT:用一条公式量化 Cache 的价值
Cache 的性能不能用“命中率”单独衡量,因为命中率和缺失代价必须放在同一个公式里。平均内存访问时间(AMAT) 是层次结构性能分析的核心指标:
AMAT = Hit Time + Miss Rate × Miss Penalty \text{AMAT} = \text{Hit Time} + \text{Miss Rate} \times \text{Miss Penalty} AMAT=Hit Time+Miss Rate×Miss Penalty
其中 Hit Time 是命中时访问该层所需的时间,Miss Rate 是缺失率(等于 1 减去命中率),Miss Penalty 是缺失时到下一层取数所需的额外时间。
这个公式的工程含义非常直观:即使命中率很高,如果缺失代价足够大,AMAT 仍然可能被拖垮。举例来说,如果 L1 的命中时间是 1 个周期、缺失率是 5%、缺失代价是 100 个周期,那么 AMAT = 1 + 0.05 × 100 = 6 个周期;把缺失率从 5% 降到 2%,AMAT 就降到 3 个周期——命中率只改善了 3 个百分点,AMAT 却减半。这就是为什么 Cache 设计的每一个决策(容量、相联度、块大小、替换策略)都要放回 AMAT 公式里评估,而不是孤立地追求“命中率更高”。
对于两级 Cache,AMAT 可以递归展开:
AMAT = t L 1 + M R L 1 × ( t L 2 + M R L 2 × t mem ) \text{AMAT} = t_{L1} + MR_{L1} \times \bigl(t_{L2} + MR_{L2} \times t_{\text{mem}}\bigr) AMAT=tL1+MRL1×(tL2+MRL2×tmem)
其中 t L 1 t_{L1} tL1 和 t L 2 t_{L2} tL2 分别是 L1 和 L2 的命中时间, M R L 1 MR_{L1} MRL1 和 M R L 2 MR_{L2} MRL2 分别是 L1 和 L2 的缺失率, t mem t_{\text{mem}} tmem 是主存的访问时间。更一般地,对于 n 级 Cache,AMAT 可以写成:
AMAT = HitTime L 1 + ∑ i = 1 n ( MissRate L i × HitTime L i + 1 ) \text{AMAT} = \text{HitTime}_{L1} + \sum_{i=1}^{n} \bigl(\text{MissRate}_{Li} \times \text{HitTime}_{Li+1}\bigr) AMAT=HitTimeL1+i=1∑n(MissRateLi×HitTimeLi+1)
这个递归形式的直觉是:每一级 Cache 的缺失代价,等于下一级的 AMAT。L1 缺失时,处理器实际上是在等待“从 L2 开始的一整条访问链”的完成时间;L2 的命中时间越短、缺失率越低,L1 的缺失代价就越小。
3 主存:DRAM 的物理约束与“容量—带宽”的工程妥协
3.1 DRAM 为什么必须刷新:一个电容的物理宿命
DRAM 的存储单元是一个晶体管加一个电容。写入时,电容充电(表示 1)或放电(表示 0);读取时,晶体管导通,电容上的电荷通过位线被读出。问题在于,电容不是理想的储能元件:晶体管存在漏电流,电容上的电荷会随时间泄漏。如果不周期性刷新,电荷量会降到无法区分 0 和 1 的程度,数据就丢失了。
这就是 DRAM 必须每 10~100 ms 刷新一次的原因。刷新操作由内存控制器自动发起,对软件透明,但它占用了本可以用于正常读写的带宽和时间。更重要的是,刷新是周期性、全行性的:一次刷新会激活一整行,消耗额外的能量。这就是为什么 DRAM 的功耗中有相当一部分与刷新相关,也是为什么低功耗场景(如移动设备)会在“刷新开销”和“数据保持”之间做权衡。
3.2 行缓冲与 RAS/CAS:DRAM 的“两级寻址”为什么比 SRAM 慢
DRAM 的访问过程比 SRAM 多出两个步骤。读一个超级单元(supercell)时,内存控制器首先发出 RAS(Row Access Strobe) ,选中目标行,把整行数据复制到行缓冲中;然后发出 CAS(Column Access Strobe) ,从行缓冲中选出目标列,把数据送到数据线上。
这个“行激活—列选通”的两级过程,是 DRAM 延迟远高于 SRAM 的结构性原因。SRAM 的访问只需要解码地址、驱动字线和位线,一次完成;DRAM 需要先把整行搬到缓冲,再从缓冲取列。如果下一次访问恰好落在同一行,行缓冲仍然有效,CAS 可以快速完成,这就是所谓的“行命中”;如果下一次访问落在不同行,就必须先预充电、再激活新行,延迟显著上升。DRAM 的访存模式对性能有巨大影响,根本原因就在这里。
3.3 从 DDR 到 HBM:主存层次的“带宽革命”
传统 DDR SDRAM 通过提高引脚速率和预取宽度来提升带宽:DDR 每周期每引脚传 2 bit,DDR2 预取 4 bit,DDR4 预取 8 bit。但引脚速率的提升有物理上限,于是出现了HBM(高带宽内存) :它不再从封装外部拉线,而是把多层 DRAM 晶粒堆叠起来,通过 TSV(硅通孔) 垂直互连,再用硅中介层与 GPU/CPU 相连。堆叠带来的直接收益是极宽的接口:HBM 的 I/O 数量可以达到 1024 甚至 2048 位,而传统 DDR 的通道宽度只有 64 位。
2026 年的 HBM4 把这条路线推到了新的量级。三星的 HBM4 引脚速率最高 11.7 Gbps,单堆叠带宽最高 3 TB/s,采用 12 层堆叠实现 36 GB 容量;美光的 HBM4 引脚速率超过 11 Gb/s,单堆叠带宽超过 2.8 TB/s,12 层版本 36 GB,16 层版本 48 GB。IEEE 的论文给出的 HBM4 规格是 2048 I/O、3.3 TB/s、36 GB 的立方体密度。这些数字说明,主存层次并没有消失,而是在“容量—延迟”之外增加了一个“带宽”维度:HBM 的延迟仍然在 DRAM 量级(几十 ns),但它的带宽已经比传统 DDR 高出一个数量级,从而在 AI 加速器里承担了“近计算的大带宽主存”角色。
表2 传统 DDR 与 HBM4 的带宽、容量与定位对比
| 维度 | DDR5(典型) | HBM4(2026) |
|---|---|---|
| 接口宽度 | 64 位/通道 | 2048 位(HBM4) |
| 引脚速率 | 数 Gbps 量级 | 11~11.7 Gbps |
| 单堆叠/单通道带宽 | 数十 GB/s 量级 | 2.8~3.3 TB/s |
| 容量 | 单条数十 GB | 单堆叠 36~48 GB |
| 延迟 | 约 50~80 ns | 仍为 DRAM 量级 |
| 定位 | 通用 CPU 主存 | AI 加速器近计算主存 |
4 外存:SSD 与 HDD 的“非易失容量层”
4.1 外存在层次结构中的角色:主存的“下一级缓存”
外存(SSD 和 HDD)在存储层次中承担两个角色。第一,它是主存的“下一级缓存” :当物理内存不足时,操作系统把不活跃的内存页换出到外存(虚拟内存),把外存当作主存的扩展。第二,它是持久化数据的最终归宿:文件系统、数据库、日志和归档数据最终都落在外存上,因为主存在断电后会丢失内容。
外存的性能特征与主存有本质差异。SSD 的随机访问延迟在 5~50 µs 量级,比 DRAM 慢约两个数量级;HDD 的随机访问延迟在 5~20 ms 量级,比 DRAM 慢约五个数量级。但外存的单位容量成本远低于 DRAM,且断电不丢数据。这就是为什么层次结构必须把“容量”放在外存,而把“速度”放在 Cache 和主存。
4.2 HDD 的访问时间:寻道、旋转和传输的叠加
机械硬盘的访问时间可以用三个分量来建模:
T access = T avg seek + T avg rotation + T avg transfer T_{\text{access}} = T_{\text{avg seek}} + T_{\text{avg rotation}} + T_{\text{avg transfer}} Taccess=Tavg seek+Tavg rotation+Tavg transfer
其中 T avg seek T_{\text{avg seek}} Tavg seek 是磁头移动到目标磁道的时间(典型 3~9 ms), T avg rotation T_{\text{avg rotation}} Tavg rotation 是等待目标扇区旋转到磁头下方的时间, T avg transfer T_{\text{avg transfer}} Tavg transfer 是读出目标扇区数据的时间。对于 7200 rpm 的硬盘,平均旋转延迟为 1 / 2 × 60 / 7200 ≈ 4 1/2 \times 60/7200 \approx 4 1/2×60/7200≈4 ms;如果每道 400 个扇区,传输一个扇区的时间约为 60 / 7200 × 1 / 400 ≈ 0.02 60/7200 \times 1/400 \approx 0.02 60/7200×1/400≈0.02 ms。把寻道(例如 9 ms)、旋转(4 ms)和传输(0.02 ms)相加,一次随机访问的总时间在 13 ms 量级,这直接解释了为什么 HDD 的随机 IOPS 只有 100~200。
顺序访问时,寻道和旋转被大量连续扇区分摊,瓶颈变成持续传输速率,这就是 HDD 顺序带宽能到 100~200 MB/s 的原因。
4.3 SSD 的并行架构:用并发隐藏延迟
SSD 的物理介质是 NAND 闪存。单次 NAND 读的延迟在微秒量级,但 SSD 之所以能做到数十万 IOPS,靠的是多通道、多晶粒、多平面的并行。主控把逻辑地址分散到多个 NAND 芯片和晶粒上,同时发起多个读写操作;对于随机小 IO,主控通过大量并发把“单次访问的延迟”隐藏在“多个请求同时进行”之后。
SSD 的写入约束来自 NAND 的物理特性:编程单位是页,擦除单位是块,改写一个页必须先擦除整个块,再把有效数据搬移过去。这带来了写放大(WAF) 和有限的 P/E 循环。这些特性决定了 SSD 在层次结构中更适合“读多写少”或“随机读密集”的负载,而不是“持续随机写密集”的负载——后者需要更高的过度预留和写分层策略。
5 用 AMAT 把整条链路串起来:每一层到底值不值
5.1 一个具体的 AMAT 计算
把前面几层的数据代入 AMAT 公式,可以看到层次结构的量化效果。假设一个两级 Cache 系统:L1 命中时间 1 ns,缺失率 5%;L2 命中时间 10 ns,缺失率 20%;主存访问时间 50 ns。
先算 L1 的缺失代价,也就是从 L2 开始到主存的平均时间:
MissPenalty L 1 = t L 2 + M R L 2 × t mem = 10 + 0.2 × 50 = 20 ns \text{MissPenalty}_{L1} = t_{L2} + MR_{L2} \times t_{\text{mem}} = 10 + 0.2 \times 50 = 20 \text{ ns} MissPenaltyL1=tL2+MRL2×tmem=10+0.2×50=20 ns
再算整体的 AMAT:
AMAT = t L 1 + M R L 1 × MissPenalty L 1 = 1 + 0.05 × 20 = 2 ns \text{AMAT} = t_{L1} + MR_{L1} \times \text{MissPenalty}_{L1} = 1 + 0.05 \times 20 = 2 \text{ ns} AMAT=tL1+MRL1×MissPenaltyL1=1+0.05×20=2 ns
如果没有 L2,L1 的缺失代价就是 50 ns,AMAT = 1 + 0.05 × 50 = 3.5 ns。L2 的存在把 AMAT 从 3.5 ns 降到了 2 ns,降幅约 43%。如果连 L1 都没有,所有访问都直接走主存,AMAT 就是 50 ns 量级——L1 + L2 把平均访问时间压到了主存的 1/25。
这个计算说明了一个反直觉的事实:L1 的命中率虽然很高(95%),但决定 AMAT 的主要因素不是命中率本身,而是“缺失率 × 缺失代价”这个乘积。如果 L2 的缺失率从 20% 降到 5%,L1 的缺失代价就从 20 ns 降到 12.5 ns,AMAT 从 2 ns 降到 1.625 ns。改善 L2 的缺失率,比改善 L1 的命中率对最终 AMAT 的影响更大,因为 L1 的缺失率已经很低,而 L2 的缺失率直接放大了 L1 的缺失代价。
5.2 层次结构的“有效速度”为什么接近顶层
AMAT 公式的一个重要推论是:只要顶层的命中率足够高,整个层次结构的平均访问时间就会接近顶层的命中时间。在刚才的例子中,L1 命中率 95%,AMAT 是 2 ns,而 L1 的命中时间只有 1 ns。也就是说,层次结构的“有效速度”是顶层速度的 2 倍,而不是主存速度的 1/25。
这个结论的工程含义是:层次结构的性能主要由“顶层命中率”和“缺失代价”共同决定,而不是由最慢那一层的速度单独决定。把 L1 的命中率从 95% 提到 98%,AMAT 可以从 2 ns 降到 1.6 ns;把主存延迟从 50 ns 降到 40 ns,在 L2 缺失率 20% 的情况下,AMAT 只从 2 ns 降到 1.8 ns。优化顶层比优化底层更划算,因为顶层的每一次改善都会被高命中率放大,而底层的改善只作用在少数缺失上。
图 3 用一条“延迟—容量”的曲线示意 AMAT 的效果:层次结构的有效工作点并不落在任何单一介质的曲线上,而是被拉到靠近顶层的位置。
图3 层次结构如何把“有效延迟”拉向顶层、把“有效容量”拉向底层
6 2026 年的层次结构新变量:HBM 与 CXL 如何改写金字塔
6.1 HBM:在“主存”这一层内部再分层
传统金字塔把主存当作一个单一的 DRAM 层。HBM 的出现让主存内部出现了新的分层:HBM 作为“近计算的高带宽层”,传统 DDR 作为“大容量的常规层” 。在 AI 加速器里,HBM 直接堆叠在 GPU 封装内,提供 TB/s 量级的带宽;DDR 则通过内存控制器连接,提供更大的容量但较低的带宽。这相当于在“L3 和主存之间”插入了一个带宽极高、容量中等的新层级,用带宽换容量,再用 DDR 补容量。
HBM4 的 3 TB/s 量级带宽和 36~48 GB 单堆叠容量,说明这个新层级的定位不是“替代 DDR”,而是“服务那些带宽需求远超容量需求的负载”——大模型推理的权重加载、向量检索的嵌入表、GPU 的临时缓冲,都属于这一类。
6.2 CXL:把“内存”从服务器机箱里解耦出来
CXL(Compute Express Link)解决的是另一个维度的问题:内存容量被绑定在服务器本地 DIMM 插槽上。超大规模数据中心的统计显示,约 40% 的服务器是“内存容量受限”的,性能扩展被本地内存容量卡住。CXL 通过 PCIe 物理层承载缓存一致性和内存语义,允许主机把外部 CXL 内存扩展器当作“额外的内存”来使用,从而把内存容量从服务器本地解耦出来。
2026 年,澜起科技试产的 CXL 3.2 内存扩展控制器支持 64 GT/s 传输速率,集成双 DDR5 控制器,最高支持 8000 MT/s 的 DDR5 内存,通过把主机侧的 CXL 内存请求实时转换为 DDR 访问命令,突破传统服务器的内存容量限制。CXL 内存扩展器还可以复用退役服务器上的旧 DDR 模块,通过内联压缩进一步提高有效容量。
从层次结构的角度看,CXL 内存扩展器相当于在“本地主存”和“外存”之间插入了一个容量更大、延迟略高于本地 DRAM 的“远端内存层” 。它不是 Cache,因为它对软件透明地提供可寻址的内存空间;它也不是外存,因为它的访问粒度是 cache line,而不是块设备。CXL 的工程意义在于,它用略高的延迟换取更大的容量和更低的成本,从而把主存层的“容量—延迟”曲线向右下方延伸了一段。
表3 传统金字塔与 2026 年扩展后的层次结构对照
| 层级 | 传统金字塔 | 2026 年扩展 |
|---|---|---|
| 近计算高速层 | L3 Cache | L3 Cache + HBM(TB/s 带宽) |
| 主存 | DDR DRAM | DDR DRAM + CXL 内存扩展(更大容量、略高延迟) |
| 外存 | SSD / HDD | SSD / HDD(NVMe 协议演进,ZNS/KV 降低写放大) |
| 远端 | 云 / 磁带 | 云 / 磁带 / 分布式存储 |
7 结语:层次结构的本质是“用局部性购买时间”
计算机存储层次结构之所以能从 1950 年代延续到今天,不是因为它是一张好看的图,而是因为它用一条 AMAT 公式把物理约束和程序行为绑定在了一起。SRAM 的快、DRAM 的容量、NAND 和磁介质的便宜,这三者之间的差距不是工程实现上的暂时不便,而是由晶体管数量、电容漏电和机械运动决定的硬边界。层次结构没有办法消除这些边界,但它可以通过局部性把绝大多数访问引导到快的层,只让少数访问承担慢的层的代价。
AMAT = Hit Time + Miss Rate × Miss Penalty 这条公式的价值在于,它把“Cache 有多大、相联度多高、块大小多少、替换策略怎么选”这些看似琐碎的设计决策,统一到了同一个可计算的框架里。一个 95% 命中率的 L1 可以把 AMAT 压到 2 ns,但决定这个 2 ns 能否守住的关键,不是 L1 自己的命中率,而是 L1 缺失之后那条链路的每一级延迟和缺失率。2026 年的 HBM4 和 CXL 并没有推翻这个框架,它们只是在“主存”这一层内部增加了带宽维度和容量维度,让金字塔在 AI 负载下有了新的形状。理解了 AMAT,就理解了层次结构为什么这样分层,以及每一层为什么值那个成本和面积。
参考资料
[1] Peter Cheung. Lecture 9: Memory Hierarchy — Cache Memory. Imperial College London, EIE2 Instruction Architectures & Compilers, 2024. SRAM/DRAM/SSD/HDD 的访问时间与带宽量级、局部性原理、AMAT 公式.
[2] Cornell University. Caches and Memory. CS 3410, 2014. SRAM 与 DRAM 的晶体管数量与刷新差异、各层访问时间(ns 与周期)、存储金字塔的容量量级.
[3] Kunle Olukotun. Lecture 11: Memory Hierarchy Design. Stanford University, EE282H. AMAT 公式、两级 Cache 的 AMAT 展开、各层参数表.
[4] ScienceDirect Topics. Average Memory Access Time. 两级 Cache 的平均访问时间公式、LRU 替换策略、MMU 地址转换.
[5] CMU 15-213. The Memory Hierarchy. 2014. SRAM/DRAM 的单元结构与刷新、DRAM 的 RAS/CAS 访问过程、DDR 预取、Cache line 与块传输.
[6] 存储层次结构详解:从CPU缓存到磁盘的性能优化指南. CSDN, 2026-10-14. 存储层次结构的“不可能三角”、各层速度/容量/成本权衡、局部性原理与性能优化.
[7] 程序员必备的十大技能(进阶版)之底层计算机原理(二). 阿里云开发者社区, 2026-05-25. 存储金字塔各层的容量、延迟、带宽量级表、Cache line 与伪共享.
[8] CMU 15-213. The Memory Hierarchy — Locality Example. 2014. 空间局部性与按行/按列遍历的缓存行为、HDD 访问时间的三个分量(寻道、旋转、传输).
[9] Cornell University. Caches and Memory — AMAT 与多级 Cache. CS 3410, 2025. 两级 Cache 的 AMAT 计算示例、命中时间/缺失率/缺失代价的量化关系.
[10] ScienceDirect. Average Memory Access Time — Two-Level Cache. 两级 Cache 的 AMAT 公式 t a v = h 1 t L 1 + h 2 t L 2 + ( 1 − h 1 − h 2 ) t m a i n t_{av}=h_1t_{L1}+h_2t_{L2}+(1-h_1-h_2)t_{main} tav=h1tL1+h2tL2+(1−h1−h2)tmain.
[11] Samsung. HBM4 量产与性能参数. 韩联社, 2026-02-12. HBM4 引脚速率 11.7 Gbps、单堆叠带宽 3 TB/s、12 层 36 GB.
[12] Micron. HBM4 与 SOCAMM2 量产. 搜狐/环球网, 2026-03-17. HBM4 引脚速率 >11 Gb/s、带宽 >2.8 TB/s、12 层 36 GB、16 层 48 GB.
[13] IEEE. 36GB 3.3TB/s HBM4 DRAM. IEEE Xplore, 2026. HBM4 的 2048 I/O、3.3 TB/s、36 GB 立方体密度.
[14] Vistara: Making CXL Real. IEEE Xplore, 2026. 约 40% 的服务器是内存容量受限、CXL 解耦内存容量与本地通道、CXL 内存扩展器的容量—延迟权衡.
[15] 澜起科技 CXL 3.2 内存扩展控制器. 2026-07-31. CXL 3.2、PCIe 6.x、64 GT/s、双 DDR5 控制器、8000 MT/s.
[16] ARM. Cache policies: write-through/write-back, LRU/pseudo-LRU. ARM Documentation, 9.5. 写直达与写回、LRU 与伪 LRU 的硬件成本与适用场景.
[17] CMU. Cache Replacement and Write Policies. LRU 的硬件状态机开销、写回与写分配、脏位的作用.
[18] ECOM. SSD 与 HDD 性能对比. 2026-01-30. SSD 无运动部件、更低功耗、更高随机访问速度;HDD 每 TB 成本优势.
[19] LDLC. How to choose a storage for my PC: HDD or SSD in 2026. 2026. HDD 的磁记录原理与机械结构、SSD 的闪存原理与速度优势.
[20] 科普中国. 动态随机存取存储器(DRAM). 2018. DRAM 用电容电荷表示比特、晶体管漏电导致必须周期性刷新、SRAM 无需刷新的“静态”特性.
本文系统解析计算机存储层次结构的物理基础与工程逻辑,聚焦SRAM、DRAM、SSD/HDD等介质在速度、容量、成本上的根本权衡,深入阐述局部性原理、Cache映射方式、写/替换策略,并以平均内存访问时间(AMAT)为核心公式,量化分析多级Cache、主存及外存的性能贡献。进一步探讨HBM4与CXL如何在2026年重构传统金字塔结构,强调层次设计本质是用程序局部性优化有效访问延迟。
832

被折叠的 条评论
为什么被折叠?



