跳到主要内容
长记忆大模型系统

第3章:三级存储基础与延迟带宽 cheat sheet

HBM3e / DRAM / 远端 RDMA pool / NVMe SSD 四档存储介质的延迟、带宽、容量、单位成本——给放置算法的物理底座

HBM3e DRAM NVMe RDMA pool 存储分层 延迟 带宽 单位成本

第 2 章建好了访问规律的”指纹”,这一章给”指纹该被印到什么材料上”的物理底座。任何分层放置算法都最终要落在物理介质的延迟、带宽、容量、单位成本四个数字上。本章把 HBM3e、DRAM、远端 RDMA 内存池、NVMe SSD 四档介质的关键参数压成一份 cheat sheet,给出跨层搬运的成本经济学,识别出三个对放置算法决定性的”数量级阈值”,最后用类 Roofline 的分析告诉你给定一份 AccessProfile,该数据”物理上”应该放哪一级——这是后续 Ch9 决策算法的硬约束。

📑 目录


1. 为什么硬件 cheat sheet 是调度的底座

1.1 任何调度算法都跑在四个物理常数上

不论 LRU、LP、RL、还是某种神算法,最终决策都要回答:“把对象 X 从层级 A 挪到层级 B,值不值得?”——这个问题等于:

收益 = (A 的访问成本 - B 的访问成本) × 未来访问次数
代价 = 搬运一次的字节 × 跨层带宽倒数 + miss 时延

🌟 关键事实:收益和代价的所有变量都是物理常数 + 工作负载常数——前者由介质决定,后者由 AccessProfile 决定(第 2 章已建模)。调度算法不创造性能,它只是在物理上限内做最优搬运

1.2 长记忆系统的”四档”而不是”三级”

传统讨论说”HBM-DRAM-SSD 三级”——但长记忆系统多了一档:远端 RDMA 内存池(Mooncake 这类系统的 KV pool)。它的延迟、带宽、容量都和本地 DRAM、本地 SSD 不在同一档,必须独立建模

本地 HBM ── 本地 DRAM ── 远端 RDMA Pool ── 本地/远端 NVMe SSD
   8 TB/s     0.5 TB/s        50-200 GB/s          5-7 GB/s
   192 GB     1-2 TB          数十 TB-PB           PB-EB

设计含义:本系列后续放置/迁移算法永远是四档,不是三级。漏掉远端 RDMA pool 这一档,会得出错误的 trade-off。


2. 四档介质详解

2.1 HBM3e(显存) — 极致带宽 / 极小容量 / 极贵

维度量级(以 NVIDIA Blackwell B200 为代表)
单 GPU 容量192 GB
单 GPU 带宽~8 TB/s
访问延迟几十 - 百 ns 量级
单位 GB 成本数据中心 GPU 每 GB 折合数百-数千美元
主要瓶颈容量 + 单位成本

🍎 类比:HBM 就像车上的副驾位置——离司机最近、最贵、永远不够用。

📍 放置原则:HBM 留给”高频 + 强延迟敏感 + 短生命周期” 的数据,典型代表是 active KV(decode 阶段)

2.2 本地 DRAM — 主流容量 / 中等带宽 / 中等成本

维度量级
单服务器容量1-3 TB DDR5(高端配置)
单服务器带宽~0.5 TB/s 量级(取决于通道数)
访问延迟~100 ns
GPU↔DRAM 带宽NVLink-C2C ~900 GB/s(Grace-Blackwell);PCIe Gen5 ~64 GB/s
单位 GB 成本几美元-几十美元
主要瓶颈带宽相对 HBM 低一个量级

🍎 类比:DRAM 是后排座位——离司机近,容量大很多,带宽是 HBM 的 1/10 量级。

📍 放置原则:DRAM 是”溢出 + 中频”数据的归宿:spilled KV、向量库导航结构、active embedding。

关键事实:Grace-Blackwell 的 NVLink-C2C 把 HBM↔DRAM 拉到 900 GB/s 缓存一致访问——让”用 DRAM 当 HBM 扩展”在工程上真正可行(参考模块零第 2 章)。

2.3 远端 RDMA 内存池 — 大容量 / 中带宽 / 受网络拓扑约束

维度量级
池容量几十 TB - PB(随节点数线性扩)
单 GPU 拉取带宽50-200 GB/s(取决于 IB / RoCE 配置 + GPUDirect RDMA)
访问延迟微秒级(几 µs - 几十 µs)
单位 GB 成本比本地 DRAM 略低(摊到多节点)
主要瓶颈网络带宽 + 跨节点一致性

🍎 类比:远端 RDMA pool 像大客厅——你能去用,但要走过道(网络),每次去要花几个微秒,但容量随心放大。

📍 放置原则:跨实例可复用的数据应该放进来——KV pool、跨节点共享 prefix、热点向量索引片段。Mooncake 的 KVCache 池就是典型应用。

2.4 NVMe SSD — 极大容量 / 低带宽 / 高随机延迟

维度量级
单盘容量几 TB - 几十 TB(单盘),节点级 PB 起步
单盘顺序带宽5-7 GB/s(PCIe Gen5 NVMe)
单盘随机 4K 读延迟~100 µs 量级
单盘随机 IOPS百万级(QD32+)
单位 GB 成本极低(0.05-0.5 美元/GB 量级)
主要瓶颈顺序带宽 + 随机延迟 + IO 放大

🍎 类比:SSD 是地下室——容量极大极便宜,但每次取东西要花百微秒级时间,且不善于”随便从一堆里抓一小撮”(随机 IO)。

📍 放置原则:长生命周期 + 大对象 + 顺序读为主的数据 → SSD。多模态原始 blob、冷向量、归档 KV 都该在这。

GPUDirect Storage 的意义:NVMe → GPU HBM 直接 DMA,绕开 CPU 缓冲。带宽接近线速、延迟降一截、CPU 几乎不参与。给”长记忆数据冷热演化”提供了关键工程基础(详见模块零第 4 章)。


3. 综合 cheat sheet:延迟/带宽/容量/单位成本

3.1 一张表速查

介质容量(单节点)带宽访问延迟单位 GB 成本(相对)适合数据
HBM3e~200 GB8 TB/s100 ns1000×active KV、active 向量
DRAM(DDR5)1-3 TB0.5 TB/s100 ns(本地)50×溢出 KV、向量导航、热 embedding
远端 RDMA Pool数十 TB - PB50-200 GB/sµs 级30×跨实例 KV pool、共享 prefix
NVMe SSDPB5-7 GB/s 顺序 / 100k IOPS 随机100 µs多模态 blob、冷向量、归档

📌 单位 GB 成本一栏是相对量级(以 NVMe 为 1×),具体数字随时间和市场波动。

3.2 三个跨数量级的差距

带宽:        HBM ─── DRAM ─── 远端 ─── NVMe顺序
            8 TB/s   0.5 TB/s  100 GB/s   7 GB/s
              ▲          ▲           ▲         ▲
              │          │           │         │
              16×       5×         14×       —
              (15× 比 SSD)  (7× 比 SSD)    (15× 比 SSD)

延迟:        HBM ─── DRAM ─── 远端 ─── NVMe随机
            100 ns   100 ns    几 µs   100 µs
              ▲          ▲           ▲         ▲
              │          │           │         │
              ~1×       ~1×       ~30×       ~1000×
              (本地常数)         (网络跳)    (闪存物理)

容量:        HBM ─── DRAM ─── 远端 ─── NVMe
            ~200 GB   ~2 TB    ~100 TB    ~PB
              ▲          ▲           ▲         ▲
              │          │           │         │
              10×        50×        ~10×      —
              累积下来,SSD 是 HBM 的 5000-10000×

🌟 核心观察:带宽差 ~1000 倍、延迟差 ~1000 倍、容量差 ~10000 倍、成本差 ~1000 倍——四档介质在四个维度上都是数量级差距,没有一种数据放某一级”凑合也行”

3.3 速查口诀

🧠 HBM 装”现在用”,DRAM 装”马上用”,RDMA 池装”邻居在用”,SSD 装”以后可能用”


4. 跨层搬运的成本经济学

4.1 一次搬运的物理代价

把对象 X(大小 B 字节)从层级 A 搬到层级 B 的总耗时:

搬运耗时 ≈ B / min(BW_A_out, BW_B_in) + latency_setup
路径典型 1 GB 搬运耗时
HBM → DRAM~125 ms(NVLink-C2C 900 GB/s 双向 ≈ 单向 450 GB/s)
DRAM → SSD~150 ms(NVMe 顺序 ~7 GB/s)
远端 RDMA → 本地 HBM~10-20 ms(100 Gbps 链路 + GPUDirect RDMA)
SSD → HBM(直 DMA, GDS)~150 ms
SSD → CPU → HBM(传统)~300 ms+(双倍 + bounce buffer)

📍 设计含义:单次搬运的物理上限就是这几档——任何调度算法在这些数字之上做不出额外加速,只能选择”少搬 / 不搬 / 重叠搬运”。

4.2 搬运 vs 重算的取舍

KV Cache 的特殊性:miss 时不一定要从下一级搬运,可以直接重 prefill。这给出第一个非平凡的成本对比:

搬运 KV from SSD:  150 ms (搬一次 1 GB KV)
重新 prefill:      看模型 / context 长度
  - 32K context, 70B 模型 ≈ 几秒
  - 1M context, 70B 模型 ≈ 几十秒到分钟

🌟 关键洞察:对长 context KV,搬运的成本远低于重 prefill——这是 AttentionStore / LMCache / Mooncake 这一系架构的物理基础。但对短 prompt KV,直接重算反而便宜——这就是为什么 prefix cache 系统通常只缓存超过某长度阈值的 KV

4.3 搬运的”放大效应”

第 2 章讲过 IO 放大——这里给具体物理代价:

数据类型单查询应用层 IO物理 SSD IO 次数实际延迟
KV 整段拉(顺序)1几个大块读~150 ms / GB
向量索引图遍历1 query100-1000 次 random IO几 ms - 几十 ms
多模态 blob1 对象几次大块~150 ms / GB
Scratchpad 回放1 task几十次中等粒度几 ms - 几十 ms

决策启发:向量索引在 SSD 上的 P99 抖动是核心痛点(因为 100-1000 次 random IO 任何一次抖动都被放大),这是为什么 DiskANN 主流方案要把 PQ-compressed 全量副本放 RAM——避开 SSD 随机 IO 的尾部延迟

Grace-Blackwell 的 NVLink-C2C 让”GPU 透明读 CPU 内存”成为可能,但:

  • 它走的是 buffered/coalesced 的内存协议,不是任意随机访问都能跑出 900 GB/s
  • 小粒度随机访问(< 128B)的实际带宽远低于峰值
  • 跨 NUMA 访问、跨 superchip 访问性能下台阶

📍 务实建议:把 NVLink-C2C 当作”快得多的 PCIe”,不是”慢一点的 HBM”。批量 + 顺序访问能拿满,随机小粒度访问要谨慎。


5. 三个决定性的数量级阈值

把上面的物理参数浓缩成三个”决策阈值”——它们直接决定后续放置算法的分支结构:

5.1 阈值 T1:1 µs — HBM/DRAM 与远端 RDMA 的分水岭

  • 本地 HBM/DRAM 访问 ~ ns 级
  • 远端 RDMA 访问 ~ µs 级(差三个数量级)
  • 任何要求 sub-µs 延迟的访问必须本地

📍 应用:active KV(decode 每 step 触发,要求 µs 级以内完成)只能 HBM 或本地 DRAM。

5.2 阈值 T2:100 µs — 内存与 NVMe 的分水岭

  • 本地内存 ~ 100 ns - µs
  • NVMe random IO ~ 100 µs
  • 差 ~ 1000 倍

📍 应用:任何”突发随机访问 + 延迟敏感”的数据不能进 SSD —— 即使 SSD 容量便宜也得忍痛放 DRAM。这就是 DiskANN 必须把 PQ 副本放 RAM 的物理原因。

5.3 阈值 T3:GB 级搬运 ~ 100 ms — 工作负载步长上限

一次 GB 级跨层搬运需要 100-300 ms。这意味着:

  • 如果 token 间隔 < 50 ms(典型 decode TPOT),GB 级搬运不能阻塞前向路径
  • 必须用 prefetch / 重叠 / 流式

📍 应用:Ch10 自适应迁移章节的核心约束就是 T3——任何阻塞主路径的搬运都是 SLO 杀手,只能后台化。

5.4 三个阈值的层次关系

延迟轴:   T1(1µs)         T2(100µs)            T3(100ms)
              │                │                   │
   ─────────┼─────────┼─────────────────┼─────────► 时间
   ns 级访问 │ µs 级访问 │ 100µs 级访问    │ ms 级搬运
              │                │                   │
            本地内存            内存与 SSD          GB 级跨层
            必须本地            的硬分界           只能后台

放置含义:  active 数据    sub-second 数据      预取 / 流水
            只能 HBM/DRAM   不能纯靠 SSD          才能容忍

🌟 三个阈值合在一起:给放置算法划出三层”硬约束区”——超过 T1 必须容忍, 超过 T2 必须缓冲, 超过 T3 必须重叠。Ch9 之后所有算法都在这三道护栏之内做优化。


6. 类 Roofline 分析:数据该放哪一级

把第 2 章的 AccessProfile 和本章的物理参数对接,得到一个**“该放哪一级”的快速决策图**。

6.1 决策维度:访问频率 × 访问粒度

访问频率
   ↑ ┌───────────────┬───────────────┬───────────────┐
高频  │  HBM(必须)   │  HBM 或 DRAM  │   DRAM        │
     │  (active KV)  │ (active 向量) │  (active blob │
     │               │               │   embedding)  │
     ├───────────────┼───────────────┼───────────────┤
中频  │   DRAM        │  DRAM 或      │  RDMA pool    │
     │  (spilled KV) │  RDMA pool    │  或 SSD       │
     │               │ (向量索引)    │               │
     ├───────────────┼───────────────┼───────────────┤
低频  │  SSD          │  SSD          │   SSD         │
     │  (历史 KV)    │  (冷向量)     │ (多模态 blob) │
     └───────────────┴───────────────┴───────────────┘
   小粒度(KB)      中粒度(MB)      大粒度(GB+)→ 访问粒度

6.2 用 IO 放大系数修正

上面是粗略图——还要乘上 IO 放大:

有效访问频率 = 应用层访问频率 × IO 放大系数

向量索引应用层访问中频,但放大系数 100-1000 倍,实际等价于高频——因此即使应用层”中频”,索引导航结构还是要进 DRAM 而不是 SSD。

6.3 用失效代价做最后修正

最后一道修正:miss 代价高的数据要往上挪一级

最终放置 = base_placement(频率, 粒度) + bonus(失效代价)

例:KV Cache 频率”中”(spilled session),粒度”中”,base 应该是 DRAM——但因为 KV miss 代价是”重 prefill”,bonus 把它往 HBM/DRAM 推得更激进。

🌟 设计准则:频率 × 放大系数 → 选 base 层级;失效代价 → 微调 ±1 层。这是 Ch9 静态放置策略的基本骨架。


7. 物理底座对放置算法的硬约束

把本章压成五条”调度算法不能违反”的硬约束:

硬约束物理依据
C1 sub-µs 访问只能本地T1 阈值,远端跨网络至少 µs 级
C2 突发随机访问不能纯靠 SSDT2 阈值,SSD 随机延迟 100 µs 量级
C3 GB 级搬运不能阻塞主路径T3 阈值,搬运 ≥ 100 ms
C4 HBM 必须留给”现在正在用”的少量数据HBM 容量 ~200 GB,工作集动辄数 TB
C5 远端 RDMA pool 是”中带宽 + 大容量”专用通道50-200 GB/s 比 SSD 高一个量级,适合跨实例热数据共享

算法工程师视角:C1-C5 是”输入约束”,任何放置算法的搜索空间是这五条之内的可行解集——不要试图打破物理(没用),要在物理之内找最优。


✅ 自我检验清单

  • 四档介质:能默写 HBM3e / DRAM / 远端 RDMA pool / NVMe SSD 各自的容量、带宽、延迟量级
  • 数量级差距:能说出”带宽 ~1000×、延迟 ~1000×、容量 ~10000×、成本 ~1000ד四个数字
  • 三个阈值:能默写 T1=1µs / T2=100µs / T3=100ms 各自的物理分水岭与放置含义
  • NVLink-C2C 注意点:能解释为什么”900 GB/s 不是任意访问都能拿到”
  • GPUDirect Storage 价值:能讲清”绕开 CPU bounce buffer”的工程意义
  • 搬运 vs 重算:能用 KV 的例子讲清”什么时候搬运比重 prefill 便宜”
  • IO 放大放大物理代价:能粗略估算向量索引一次查询的 SSD random IO 时延
  • 类 Roofline 决策图:能用”频率 × 粒度 + 放大系数 + 失效代价”给一份具体数据做放置建议
  • C1-C5 硬约束:能复述 5 条物理硬约束,每条都举一个反例(违反它会发生什么)

📚 参考资料

硬件白皮书 / 规格

经典系统层论文

  • HeMem (ASPLOS’21) —— DRAM-PMEM 自动 tiering 经典
  • TPP (Meta ASPLOS’23) —— DRAM-CXL hot/cold tiering
  • Pond (Microsoft ASPLOS’23) —— Azure CXL memory pool 实测数据

Roofline 与性能模型

  • Roofline: An Insightful Visual Performance Model(Williams et al., 2009) —— 经典 Roofline 论文
  • AI Systems Performance Engineering(Chris Fregly, O’Reilly 2025) —— 模块零的蓝本,Goodput / 跨层调优心智

本系列其它模块

  • 模块零第 2 章 —— Grace-Blackwell / NVLink-C2C / NVL72 全景(本章硬件数据的来源)
  • 模块零第 4 章 —— Magnum IO / GPUDirect Storage / NIXL
  • 模块十三 —— RDMA / CXL / 远端内存事务系统

调研笔记