存储器层次结构

一、存储系统的第一性原理

1.1 根本矛盾

计算机存储系统的所有复杂性,源于一个不可消除的根本矛盾:

计算速度的指数级增长,与存储访问速度和成本增长之间的长期不匹配

这一矛盾在任何时代、任何架构下都成立。


1.2 三大不可变约束(稳定认知)

约束 含义 工程后果
延迟约束 快的介质一定昂贵 不能用“大而快”的单一存储
容量约束 大容量介质一定慢 必须引入分层
一致性约束 多副本必然不一致 必须付出同步代价

所有存储技术,本质上都是这三大约束下的工程折中方案


二、存储层次结构的统一抽象模型

2.1 层次化的必然性

存储层次结构不是设计选择,而是物理与经济规律的必然结果

统一模型:

目标:降低平均访问时间
手段:分层 + 局部性
代价:一致性与管理复杂度

2.2 各层的本质角色(抽象视角)

层级 本质角色 核心代价
Cache 延迟屏障 一致性复杂度
DRAM 容量缓冲 刷新与带宽
SSD IO 并行化 写放大
HDD 成本极小化 寻道与旋转
Tape 冷数据归档 顺序访问

三、局部性原理(贯穿全篇的核心思想)

3.1 局部性是“程序结构”而非“硬件技巧”

局部性是算法与程序结构的属性,而不是存储介质的属性。


3.2 局部性驱动的系统设计

技术 利用的局部性
Cache Line 空间局部性
预取 空间 + 时间
Write Buffer 时间局部性
顺序 IO 空间局部性

四、主存:容量与延迟的折中层

4.1 DRAM 的本质限制

DRAM 的慢不是“技术落后”,而是物理实现方式决定的。


4.2 数据组织与 ISA 设计原则

ISA 必须面对两个永恒问题

对齐的本质:

用空间换取更少的访存次数


4.3 字节序(Endianness)的本质


五、Cache:延迟优化层的系统复杂性源头

5.1 Cache 存在的根本原因

Cache 的目标不是提高峰值性能,而是降低平均访问延迟


5.2 Cache 的三大设计维度(稳定模型)

维度 关注点
映射方式 查找速度 vs 冲突概率
替换策略 历史是否预测未来
写策略 一致性传播成本

5.3 Cache 缺失的本质分类

类型 本质原因
冷缺失 第一次访问
冲突缺失 映射受限
容量缺失 局部性被打破

六、多核时代:一致性问题的不可避免

6.1 多核带来的新矛盾

性能优化引入副本,副本引入一致性问题

这是多核系统中无法回避的代价。


6.2 一致性协议的抽象本质

MESI 不是具体实现,而是以下思想的工程化:


6.3 性能与一致性的再次折中

所有优化,本质上都是暂时允许“看见旧世界”


七、内存模型:软件可见性的最终契约

7.1 为什么需要内存模型

如果没有内存模型,多核系统对软件而言是不可编程的。


7.2 内存屏障的抽象语义


7.3 TSO 的设计哲学

TSO 的本质:

在性能与可理解性之间,选择一个“人类还能推理”的平衡点。


八、外存系统:成本、可靠性与并行性

8.1 HDD 的物理决定论

所有优化,都是在规避“寻道”这个物理事实。


8.2 SSD 的新代价

优势 新问题
无寻道 写放大
高并行 磨损不均

8.3 RAID 的本质抽象

RAID 解决的不是“快”,而是:

代价是:


九、NUMA:层次结构在空间上的延伸

9.1 NUMA 的本质

NUMA 不是新问题,而是“存储层次结构”在物理空间上的展开。


9.2 NUMA 的编程含义


十、稳定认知总结(长期有效)

10.1 永不过时的五条结论

  1. 存储一定是分层的
  2. 局部性是性能之源
  3. 副本必然带来一致性问题
  4. 一致性永远有性能代价
  5. 所有优化都是折中

10.2 如何使用这份知识

记住原理,而不是参数。

关联内容(自动生成)