存储天梯
没有局部性,就没有层次;没有层次,就没有速度。代价不是惩罚,是这架天梯存在的物理前提。
天梯悬空
天梯从黑暗中生长出来。不是横着的路,是一架直插云霄的梯。每一级台阶都发着不同颜色的光——顶端白得刺眼,越往下越暗,到底部只剩一团铁锈色的闷红。
诺依曼老祖站在梯脚下,手边悬着七块铭牌:寄存器、L1、L2、L3、主存、SSD、磁盘。
「你脚下的这片梯,每一级之间隔着十倍、百倍、千倍的速度差。你以为从顶到底不过是一步路。」
「梯的深处有什么东西在呼吸。很慢。很沉。猜猜,CPU 和主存之间差多少倍?」
存储层次倍率预测挑战器
先下注猜倍率 → 拖拽铭牌排梯 → 拨动局部性拨杆验证。👆 猜对 1000 倍才能排梯
器灵殿 · SRAM 与 DRAM
器灵殿里没有梯,只有两座台。左台上悬着一枚六边形的晶体阵列——六个晶体管咬合成环。右台上躺着一枚孤零零的单管——旁边附着一个微不可见的电容。
「半导体册教过你观其形——六管阵、单管阵。但你可知它们为何一座快、一座慢?为何快的那座做不大、慢的那座必须刷新?」
SRAM 六管阵 / DRAM 单管阵 拆解 + 电子天平
点击点亮晶体管 → 拨字线读出 → 拖上天平对比面积/密度
电子天平 · 面积/密度/速度三维对比
命中台 · AMAT 公式
命中台是一面巨大的石壁,上面刻着三个词:命中率、缺失代价、命中时间。老祖递给你一支笔:「把这三个数填进去。命中时间 L1 约 1 纳秒,缺失代价主存约 100 纳秒,命中率……你自己定。」你写下 95%。
「95%?挺好。记下了。延迟账本第二页。该清账的时候,我会叫你。」
AMAT 公式拼装器
拖数值进槽 → 拼运算符 → 看石壁翻转对比
石壁翻转 · 理想 vs 实际
AMAT 之罚 · 悬崖曲线
石壁翻转后露出一面更大的算盘——上面挂着一排可拖动的命中率刻度,从 99.9% 到 50%。你拖到 99%——AMAT=2ns。拖到 95%——6ns。拖到 90%——11ns。曲线画出来,不是一条直线,是一条越掉越快的悬崖。
「你以为直线下坠,实际是悬崖。第二笔。95%。六倍。记下了。」
AMAT 悬崖曲线追踪器
拖动命中率 99%→50%,AMAT 实时计算描点画曲线。必须拖到 90% 以下
三大性能指标(随 H 同步变化)
多级 AMAT 扩展
映射阵 · 一位之困
映射阵是一面巨大的地址墙,墙上刻着 32 个格子。老祖指着墙下三座阵盘:「直接映射——一个地址只去一个位置。全相联——哪都能去。组相联——去一组里的任意位置。你先试直接映射。最简单。」
「你先试直接映射。最简单。但简单是有代价的——你省下的硬件,全部变成了 miss。」
地址拆解 + 三阵盘切换 + 冲突演示
拖地址位进 Tag/Index/Offset 三槽 → 切换三阵盘 → 喂冲突地址
冲突之祸 · 3C 缺失分类
阵盘上跑起了一段程序:for (i=0; i<256; i++) sum += A[i] + B[i]; A 从地址 0 开始,B 从 4096 开始。直接映射,128 行,32 字节一块。A[0] 和 B[0] 的 Index 都是 0——同一个位置。A[0] 进来,B[0] 把 A[0] 踢走。每一次访问都是缺失。命中率:0%。
「延迟账本第二页。你选了最省硬件的方案。省下的比较器,全变成了 miss。」
3C 缺失分类相图探索器
跑程序看 hit/miss → 切组相联看冲突归零 → 拖容量/路数看相图
缺失分类统计
替换殿 · LRU 的代价
替换殿里悬着四把钥匙:LRU、FIFO、随机、伪 LRU。老祖说:「组满了,踢谁?你选。」你选 LRU。系统喂入 A B C D A B E——E 进来时组满了。LRU 踢掉 C。但面板弹出一行数字:「4 路 LRU 需记录 4!=24 种顺序,至少 5 位。8 路?8!=40320,15 位。128 路全相联呢?」老祖笑了。
「LRU 是理论最优。但它的代价随路数阶乘爆炸。伪 LRU 用一棵树、n−1 个位,近似了 LRU 95% 的效果。」
四种替换策略对比 + 硬件代价曲线
同一序列 A B C D A B E 在 4 路组上跑四种策略 → 看代价曲线
硬件代价 · 位宽 vs 路数
四种策略命中率对比
写阵与多级塔 · 脏位的代价
写阵的墙上挂着四块牌:写直达、写回、写分配、非写分配。老祖指着一块悬空的塔模型:「L1、L2、L3——三级塔。L1 私有最快,L3 共享最慢。每一级都是一座更慢但更大的桥。」你挂了写回——写只动 cache,标记脏位,驱逐时才写回。但塔模型底部亮起一行字:「脏块被驱逐时:先写回 L2 → 再从 L2 读入新块。缺失代价翻倍。」
「你以为延迟没有代价?延迟的账,迟早要还。」
写策略挂牌 + 多级塔模型 + 多级 AMAT
挂写策略组合 → 拖程序跑多级塔 → 算多级 AMAT
多级塔 · L1/L2/L3/主存
多级 AMAT 计算
虚境 · 地址翻译
虚境里没有梯,只有一面镜墙。左边是虚拟地址——48 位,你的程序以为它拥有一整片 256 TB 的连续空间。右边是物理地址——52 位,实际主存只有几十 GB。老祖说:「左边的地址是假的。右边的才是真的。中间这面镜子,叫页表。但你不能每次访问都查镜子——太慢。所以你在镜子旁边放了一个小本子,记最近查过的翻译。那个小本子,叫 TLB。」
「没有 TLB,每次翻译等于四次访存。400 纳秒——比 cache miss 还慢 4 倍。」
虚拟地址翻译流水线动画器
拆 48 位虚拟地址 → 单步走四级页表 → 看 TLB 加速 → 看层次对照镜
层次对照镜 · Cache 体系 vs 虚拟内存体系
缺页深渊 · 万倍之罚
你走到页表的最后一级。PTE 的有效位 = 0。老祖说:「这页不在主存里。它在磁盘上。」镜墙碎了。你看见一条裂缝——从主存直通磁盘,深不见底。裂缝壁上刻着延迟数字:cache miss ~100ns,缺页 ~10,000,000ns。十万倍。深渊里的声音变成了一声叹息:「你终于走到这里了。缺页——这是我收的最大一笔税。」
「缺页需要 OS 介入 + 磁盘 I/O,硬件无法独立处理。延迟账本最后一页。」
渊账累计 0 笔 · 三问全对后清零
Boss 战 · 未命中之罚
天梯在你脚下裂开。裂缝中升起一个身影——没有面孔,只有一道裂缝形状的裂缝。它手中悬着一本账簿,封面刻着四个字:延迟账本。「你在天梯上走了十级台阶。每一级,你都在低估我。」翻开第一页:「S2。你说 5% 缺失不算什么。」翻开第二页:「S5。你选了最省硬件的直接映射。」翻开第三页:「S7。你以为写回没有代价。」
「现在,回答我三个问题。答错,从 S3 重走。但你的刻痕不会消失——它们是你的弹药。」