内存基础与 DRAM 工作原理

第二章讲完了 CPU。一颗 96 核的 CPU 每秒可以做几百亿次运算,但所有运算都依赖于数据从内存读进来。内存这一层的特性,决定了 CPU 能不能真正跑满。第三章从内存的物理基础讲起。

计算机里的”内存”到底是什么

广义的”内存”(Memory)泛指任何能存数据的存储介质。但在服务器语境下,“内存”特指主存(Main Memory)——也就是 CPU 直接通过地址总线访问的、断电即失的 RAM(Random Access Memory)。

按存取速度从快到慢:

graph LR
  REG[寄存器
~1 cycle
KB 级] L1[L1 Cache
~4 cycle
32-64 KB] L2[L2 Cache
~12 cycle
1-4 MB] L3[L3 Cache
~40 cycle
32-512 MB] MAIN[主存 DRAM
~200 cycle
GB 级] SSD[SSD
~10 万 cycle
TB 级] HDD[HDD
~千万 cycle
TB 级] REG --> L1 --> L2 --> L3 --> MAIN --> SSD --> HDD

主存 = DRAM。寄存器和 Cache 是 SRAM,SSD/HDD 不在主存层。

SRAM vs DRAM 的本质区别

两种 RAM 都是易失性,但内部结构完全不同:

SRAM:6 个晶体管存 1 bit

1
2
3
4
5
6
7
8
9
10
11
      VDD

M2 ──┴── M4
│ │
───┤ ┌────┤───
│ │ │
M1 ─┘ └─ M3
│ │
────────────
GND
(M5/M6 是访问门管)
  • 6 个 MOSFET 组成两个交叉耦合的反相器(4 管)+ 2 个访问门
  • 只要供电就稳定保持值,不需要刷新
  • 速度极快(~1 ns 级),功耗低
  • 缺点:6T 一格,密度低,价格贵——所以只用在 Cache 里

DRAM:1 晶体管 + 1 电容存 1 bit

1
2
3
4
5
6
7
8
9
10
11
字线 (Word Line)


┌─┐
────┤ │ M1
└─┘

─┴─
─┬─ 电容(存电荷 = 1,没电荷 = 0)

GND
  • 1T1C 结构:一个晶体管 + 一个电容
  • 密度极高,同等面积下可做 SRAM 的几十倍
  • 致命问题:电容会漏电,必须周期性刷新(典型 64 ms 刷新一次)
  • 延迟更高:访问需要充电、放大、写回——一次完整读访问要 30-50 ns

一张对比表

特性 SRAM DRAM
单元结构 6T 1T1C
密度 高(~30 倍)
速度 极快(~1 ns) 较慢(30-50 ns)
功耗 静态低 静态高(要刷新)
价格 便宜
用途 Cache、寄存器 主存、显存基础

SRAM 不能取代 DRAM 当主存——做出来你也买不起。

DRAM 单元怎么组织成内存条

单个 1T1C 太小,DRAM 里要用几十亿个组合在一起。

1. 阵列(Array)

最基础的单位是一个矩形阵列:行(Row)×列(Column)。每一行的所有电容共用一条字线(WL),每一列共用一条位线(BL)。

graph TB
  subgraph ARRAY["DRAM 阵列(一个 mat / subarray)"]
    direction TB
    WL0["Word Line 0"] --- C00 & C01 & C02
    WL1["Word Line 1"] --- C10 & C11 & C12
    BL0["BL0"] --- C00 & C10
    BL1["BL1"] --- C01 & C11
    BL2["BL2"] --- C02 & C12
  end
  SA[Sense Amplifier 行] --- BL0 & BL1 & BL2

读一行的过程:

  1. 字线拉高,把整行的电容连到位线上
  2. 电容里的电荷通过位线引起微小电压变化
  3. Sense Amplifier(灵敏放大器)把微小变化放大成 0/1
  4. 整行被读出,放进行缓冲区
  5. 列地址再选出要的那个 bit

关键洞察:DRAM 读一个 bit 实际上读的是整行——所以”局部性”对 DRAM 性能至关重要。

2. Bank(库)

一个阵列规模有限。多个阵列组合成一个 Bank

  • 每个 Bank 有自己的行缓冲区
  • 不同 Bank 可并行操作(一个 Bank 读,另一个 Bank 刷新)
  • DDR4 一般 16 个 Bank,DDR5 是 32 个 Bank

3. Rank(颗粒组)

多个 DRAM 颗粒一起拼成一个总线宽度的字

  • DDR4 标准是 64 bit 数据宽(不算 ECC)
  • 用 8 颗 ×8 颗粒 或 16 颗 ×4 颗粒 拼出 64 bit
  • 这一组颗粒同时被同一组 CS 信号选中 = 1 个 Rank
  • 一根条上可以有 1 Rank(单面)或 2 Rank(双面),ECC 服务器条很多是 2R 甚至 4R

4. 内存条(DIMM)

1
内存条(DIMM)= 多颗 DRAM 芯片 + SPD(参数 EEPROM) + RCD(注册时钟驱动,仅 RDIMM/LRDIMM)

服务器条都是 DIMM(Dual In-line Memory Module,288 pin DDR5)——注意是 DIMM,1990 年代之前是 SIMM。

一次内存访问的完整过程

sequenceDiagram
  participant CPU
  participant MC as 内存控制器
  participant DIMM
  CPU->>MC: 物理地址 0x1234ABCD
  MC->>MC: 地址映射 → Channel/Rank/Bank/Row/Col
  MC->>DIMM: ACT (激活行)
  Note over DIMM: 行打开,进入行缓冲区
  MC->>DIMM: RD (列读)
  DIMM-->>MC: 数据(多 burst)
  MC-->>CPU: 64B cacheline
  Note over MC,DIMM: 后续可能 PRE (预充电关行)

关键时序:

参数 含义 典型值(DDR5-6400)
tRCD RAS to CAS Delay ~16 ns
tCL / CAS Latency 列地址到数据 ~16 ns
tRAS 行激活到预充电 ~32 ns
tRP 预充电时间 ~16 ns
tRC tRAS + tRP(行循环) ~48 ns

内存条上的”6400-46-46-46“就是 tCL-tRCD-tRP-tRAS 这几个数(单位是周期)。

Row Buffer Hit / Miss

  • Row Buffer Hit:访问的行已经在行缓冲区——只需要 tCL
  • Row Buffer Miss:要访问的行不在缓冲区——需要 PRE + ACT + tCL,延迟翻三倍

这是为什么连续访问性能远高于随机访问——前者命中率高。

为什么 DRAM 一直跑不快

工艺迭代主要让 DRAM 更密更省,但延迟几乎没降

1
2
3
4
5
6
1996 PC100      tCL ≈ 50 ns
2003 DDR1 tCL ≈ 25 ns
2008 DDR3-1333 tCL ≈ 13.5 ns
2014 DDR4-2133 tCL ≈ 13.0 ns
2021 DDR5-4800 tCL ≈ 16.0 ns ← 反而升高
2025 DDR5-6400 tCL ≈ 14.3 ns

CL 周期数变多,但每个周期变短,绝对延迟基本停留在 13-16 ns

物理原因:

  1. 电容充放电时间受材料和工艺约束,难以继续缩短
  2. 提高频率主要靠预取(prefetch)+ 流水化——把多次串行变成一次并行,但单次延迟没变
  3. 单元密度提高反而带来更小的电容、更长的位线、更复杂的纠错——延迟优化压力变大

DRAM 的演进一直是”增带宽不降延迟”——这就是为什么有了 HBM、CXL 等等”曲线救国”的方案。

一张总结

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
          DRAM 颗粒
┌────────────────────┐
│ Bank 0 Bank 1 ... │ <- 不同 Bank 可并行
│ ┌───┐ ┌───┐ │
│ │mat│ │mat│ │ <- 多个阵列拼成 Bank
│ │mat│ │mat│ │
│ └───┘ └───┘ │
│ 每行 ~1KB-2KB │ <- 行缓冲粒度
└────────────────────┘
数据通过 Sense Amp 放大
经位线送到 IO 缓冲区

多颗粒并联 = 1 Rank(64 bit 数据宽度)
1-2 Rank/DIMM = 内存条
多条 DIMM = 通道(Channel)
多通道 = CPU 内存子系统

小结

  • 内存特指主存 DRAM,区别于 Cache(SRAM)和 SSD
  • 1T1C 让 DRAM 比 SRAM 密度高 30 倍,代价是要刷新 + 速度慢
  • DRAM 的层次结构:Cell → Array/mat → Bank → Rank → DIMM → Channel
  • 一次内存访问要经历 ACT → RD → PRE,受制于 tRCD/tCL/tRP 等时序
  • 最关键的物理事实:DRAM 频率/带宽涨了 30 倍,但绝对延迟二十年只降了一半

下一篇讲 DDR1 到 DDR5 的演进,看带宽是怎么一步步涨到 8 GT/s 以上的。