SICI · 天机门 · 第十四章

存储器系统深度 · 结丹三层

你以为cache够大就没有延迟问题。但DRAM访问延迟~100ns是电容充放电的物理极限,prefetch和一致性也救不了所有场景。内存墙不是bug,是物质的决定。

墙影低语:「cache够大,这面墙就不存在了?」
序章

墙影降临

CPU与DRAM,速度差几倍?

存深域的入口是一道峡谷。峡谷尽头矗立着一面墙——不是石墙,是无数细密裂缝拼成的暗影,像被速度差撕裂的断面。

GPU之峰,并行计算架构

墙上有声音,像很多数据包在排队,又像一个声音在数数。

诺依曼老祖 诺依曼老祖

「1980年到现在,CPU的速度翻了三万倍。DRAM的延迟呢?降了不到十倍。」

内存墙之影 内存墙之影

「打个赌吧。你说——cache够大,这面墙就不存在了?」

内存墙预测挑战器

先下注,再拖时间游标看CPU/DRAM双曲线,最后点亮五级延迟

墙影逼你下注:加cache能填平CPU与DRAM这道缝?
第一幕 · 自信

镜像殿 · 副本之裂

四个核心各有一份cache副本,天下太平?

石径尽头是一座镜像殿。殿中立着四面铜镜,每面镜子里映着同一行数据:A = 0。

诺依曼老祖 诺依曼老祖

「四个核心,各有一份cache副本。你让它们各读各的,看起来天下太平。」

内存墙之影 内存墙之影

「四份一样的副本,怎么可能不一致?你试试。」

缓存副本撕裂探索器

全读A → 各核写A=1 → 看其余镜面纹丝不动 → 触发stale read与lost update

内存 A = 0

时间轴 · 数据撕裂

第一幕 · 初窥

窃听巷 · 监听之耳

所有cache监听总线,写者广播闻者作废

镜像殿的后巷狭窄,头顶悬着一根铜线——总线。总线嗡嗡振动,像一条公共的神经。

诺依曼老祖 诺依曼老祖

「每次有核心读写内存,信号都会经过这根线。每个cache都能偷听——这叫监听。」

内存墙之影 内存墙之影

「偷听?你以为偷听就能一致?搭线吧。」

监听协议推导 · snoopy 基本原理

搭四根监听线 → 填两组监听规则 → 看撕裂愈合

总线出现"写地址X"时,其他cache的X副本应?
第一幕 · 重建

四相阵 · MESI推演

一条cache行,到底有几种状态?

巷子尽头是一座四相阵台。台上四个方位各亮着一盏空灯,灯下无字——等你来填。

诺依曼老祖 诺依曼老祖

「一致性的答案,不在书上,在你手上。你来推:一条cache行,到底有几种状态?」

MESI四相阵状态机推演器

推导M/E/S/I四状态 → 连八条转换线 → 看S→M广播代价

状态转换图 · 拖线连接

第二幕 · 挣扎

扩展阁 · 五相之争与原子之锁

MOESI的O态、MESIF的F态、原子RMW

扩展阁里,你S3的四相阵被原样搬来。但阵台旁多了一张空台,上有一盏未点亮的第五灯。

诺依曼老祖 诺依曼老祖

「S→M要广播invalidate,等所有人确认。还有一个问题——两个核心同时执行A++,你觉得结果是什么?」

内存墙之影 内存墙之影

「A++不是一条指令。它是读A、加一、写A——三步。两核同时做,丢一次更新,不是理所当然吗?」

协议扩展与原子操作 · 叙事推演

点亮第五灯F/O → 看原子RMW丢失更新 → 选锁方案

第二幕 · 再崩塌

广播狱 · 扩展性死壁

推到64核,看总线怎么被O(n²)压垮

扩展阁的穹顶裂开,露出一排核心插槽——4、8、16、32、64。

内存墙之影 内存墙之影

「MESI?监听?加核啊。加到64。你觉得总线还撑得住?」

诺依曼老祖 诺依曼老祖

「推吧。自己看。」

广播目录扩展性曲线追踪器

推核心数4→64 → 看总线饱和崩塌 → 切目录协议看曲线恢复

总线占用 = 10% 吞吐量 = 100% 事务量 = 16
第二幕 · 深化

时序殿 · 一致性的锚与隙

coherence保证单地址一致,consistency保证多地址有序

时序殿没有铜镜,只有一张巨大的时间轴横亘殿中。轴上排列着两个核心的读写操作,像两条并行的河。

诺依曼老祖 诺依曼老祖

「一致了——同一个地址,所有核心看到的值相同。但顺序呢?Core 0先写A=1再写B=1,Core 1先读B再读A——你保证B=1时A也一定=1吗?」

内存墙之影 内存墙之影

「一致性和一致性序,差一个字,差一道天堑。」

存储一致性模型 · SC与弱序

选一致性模型 → 看操作交错是否合法 → 看性能差异

第二幕 · 不安

交错阵 · 带宽之舞与优化之术

交错翻带宽、预取藏延迟、编译器改局部性

交错阵台上排列着八块内存bank,像八条平行的河道。

诺依曼老祖 诺依曼老祖

「一次访存只走一条bank,其余七条闲着。你把连续地址分散到不同bank——让它们并行流。这叫交错。」

内存墙之影 内存墙之影

「带宽翻倍?你试试。但——你能预取的,只有你能预测的。」

交错·预取·编译器优化 · 三把刀

切交错模式看带宽 → 切访问模式看预取污染 → 行/列优先看miss率

耗时 = 640ns 带宽倍数 =
第三幕 · 俯瞰

存域回廊 · NUMA与持久之层

内存不是平的,存储层次不止三层

回廊两侧是两面巨大的全景图。左图:四个NUMA节点,每个节点有自己的本地内存和四个核心。右图:存储层次金字塔——顶端CPU寄存器,向下L1/L2/L3 cache,再向下DRAM,最底层SSD。

诺依曼老祖 诺依曼老祖

「左边:你的核心访问本地内存~80ns,访问隔壁节点的内存~150-300ns——这叫NUMA。右边:DRAM和SSD之间,多了一层——非易失性内存。」

NUMA延迟地图 · PM新层

点NUMA节点看local/remote延迟 → 拖入PM层看新维度

第三幕 · 最高潮

Boss 战 · 内存墙之影

三问对决 · 排除法收网

回廊灯火齐灭。暗影从四面八方压过来,凝成一面巨大的、布满裂缝的墙。

内存墙之影 内存墙之影

「我是内存墙之影。我不住在你的无知里——无知救不了我。我住在你'以为优化能消灭物理极限'的地方。你每以为加一层cache、开一个预取就能填平我,我就厚了一寸。三问。答错一题,墙就厚一分。」

渊账累计 0 笔 · 三问全对后清零

第三幕 · 收束

尾声 · 破墙之光

64个核心到底怎么通信?——下一章的问题

墙影凝固成DRAM单元结构后,峡谷透进一缕金光。你手里的延迟沙漏还在——CPU侧金沙飞落,DRAM侧沙粒迟滞。差距仍在,但你不害怕了。

诺依曼老祖 诺依曼老祖

「你入门了。不是因为你答对了三问——答对的会忘。是因为你摔过的每一道裂痕,都刻在你手上了。但——这些核心,到底怎么连在一起?总线?互连网络?片上网络?你说说,64个核心要怎么通信才不堵?」

知识图谱点亮 · 存储墙权衡

点亮全章15块碎片 → 看存储层次延迟谱全景