Appearance
存储层次全景模拟器使用指南
这个模拟器帮你看清什么
"L1 比主存快 100 倍"这句话背起来轻松,但做题时感受不到它意味着什么。这个模拟器把累计延迟一步步显示出来——你会亲眼看到从 L1 命中到主存命中,那个数字从 1.3 跳到 126.3。
概念本身别在这里学,见文末链接。
界面速览
| 位置 | 控件 | 作用 |
|---|---|---|
| 顶部 | 层次概览 / 数据访问旅程 | 切换两个场景 |
| 场景二顶部 | 「数据在哪一层命中?」6 个按钮 | 寄存器 / L1 / L2 / L3 / 主存 / 磁盘 |
| 中部 | 金字塔层次图 | 点任意一层,右侧面板换成该层信息 |
| 右侧 | 统计面板 | 容量 / 访问时间 / 每 GB 成本 / 技术 四项 |
| 底部 | ◀ | ▶/⏸ | ▶ | 上一步 | 播放暂停 | 下一步 |
| 底部 | 速度下拉 | 0.5x / 1x / 2x |
场景一:层次概览
操作:点顶部「层次概览」,然后逐层点击金字塔的六层,每点一层看一次右侧面板。
盯哪里:右侧面板的访问时间和每 GB 成本这两项。
该看到:从上往下,容量越来越大、访问时间越来越长、每 GB 成本越来越低——三条曲线同向变化,这就是"层次"二字的全部含义。
重点体会主存 → 磁盘那一跳:访问时间从约 100 ns 变成约 10 ms,差 10 万倍。一次缺页的时间够访问主存 10 万次——这就是缺页必须交给操作系统而 Cache 缺失只能靠硬件的原因。
场景二:数据访问旅程
怎么操作:
- 在"数据在哪一层命中"里选一层——选择器有 6 个(寄存器 / L1 / L2 / L3 / 主存 / 磁盘)
- 选完画面停在静止的第 1 帧,需要手动点播放。控件栏在下方:单步后退 ◀ / 播放暂停 ▶⏸ / 单步前进 ▶ / 步进指示器 / 0.5x–1x–2x 倍速
每一步屏幕上出现什么:查找从寄存器开始逐层向下,所以选"主存命中"时一共 5 步,第 1 步显示的是"寄存器 未命中,继续向下查找…"。红色流动虚线表示向下查找、绿色表示向上返回数据,每一步显示累计延迟。
试着对比不同命中位置
(累计延迟均从寄存器 0.3 ns 起算)
- 寄存器命中:0.3 ns
- L1 命中:1.3 ns
- L3 命中:26.3 ns
- 主存命中:126.3 ns(Cache 全部缺失的代价)
- 磁盘命中:10,000,126.3 ns ≈ 10 ms(缺页!)
看完这个对比你就明白了:Cache 的命中率哪怕只差 1%,对性能的影响都可能是几十倍。
右侧面板还会常驻显示两种局部性的说明,可以对照着看。
两个动手任务
- 依次选"L1 命中"和"主存命中",把两个累计延迟抄下来相除。这个倍数就是 Cache 存在的全部理由。再想一想:命中率从 99% 掉到 98%,平均访问时间会变成多少?(用
自己算一遍,再看看变化幅度。) - 选"主存命中"单步走完 5 步,每一步记下当前查到哪一层。走完你应该能回答:为什么查找是逐层向下而不是直接去主存?(因为 CPU 并不知道数据在哪,只能一层层问。)
概念去哪里学
本文只讲怎么用这个模拟器。它演示到的知识点都有专文,别在这里学概念:
| 想搞清楚 | 去看 |
|---|---|
| 时间/空间局部性的定义与代码判定 | 存储层次结构综述 |
| Cache 工作流程、命中率、平均访问时间的两种模型 | Cache基本概念与工作原理 |
| SRAM vs DRAM、刷新、Flash | SRAM与DRAM |
| 多级 Cache 的性能计算 | Cache性能分析 |
特别提醒:模拟器右侧用的是
这一形式,它对应的是"先访 Cache、未命中再访主存"的串行模型。做题时若题面描述的是"同时访问",公式要换——判据见 Cache基本概念与工作原理。