S07 —— 为什么内存标称频率,不是它实际工作的频率

金句:名字和实质,从来都不是同一件事。


DDR 名字里的秘密

买内存时,你会看到 “DDR5-4800” 这样的标签。这个数字 4800 是什么?

Bash
DDR5-4800 的含义:

4800 = 4800 MT/s = 4800 Mega Transfers per second
      = 每秒 48 亿次数据传输

但这指的是 I/O 信号的传输速率(Transfer Rate),
不是内存单元内部真正的工作频率(Core Frequency)。

内存单元(DRAM Core)内部的实际时钟频率是多少?
  DDR5 的核心频率(Core Frequency)= 4800 / 2 / 2 = 1200 MHz
  为什么除以 2?因为 DDR 是 Double Data Rate,上下沿都传数据
  再除以 2,是因为 DDR5 使用了 2 个时钟域(时钟的一半频率)

DDR 的全称:Double Data Rate——在时钟的上升沿和下降沿都传输数据,所以叫”双倍数据率”。


频率换算对照表

Bash
DDR1 / DDR2 / DDR3 / DDR4 / DDR5 频率对照:

DDR4-2400:
  标称频率:2400 MT/s
  I/O 时钟:1200 MHz(时钟上升/下降沿各传一次 = 2400 MT/s)
  核心频率:600 MHz(内部频率更低)

DDR4-3200:
  标称频率:3200 MT/s
  I/O 时钟:1600 MHz
  核心频率:800 MHz

DDR5-4800:
  标称频率:4800 MT/s
  I/O 时钟:2400 MHz(DDR5 有两个半速时钟,2400/1200)
  核心频率:1200 MHz

DDR5-6400:
  标称频率:6400 MT/s
  I/O 时钟:3200 MHz
  核心频率:1600 MHz

为什么 DDR 是”double” data rate

Bash
DDR 相比 SDR(Single Data Rate)的本质区别:

SDR(在时钟上升沿传输一次):
  ┌───┐     ┌───┐     ┌───┐
  │   │     │   │     │   │  时钟周期 = 10ns
  └─┬─┘     └─┬─┘     └─┬─┘
    │         │         │
  数据A      数据B      数据C
  1 transfers / 10ns = 100 MT/s = 100 MHz 带宽

DDR(在时钟上升沿+下降沿都传数据):
  ┌───┐     ┌───┐     ┌───┐
  │   │     │   │     │   │  时钟周期 = 10ns
  └─┬─┘     └─┬─┘     └─┬─┘
    │ ╲       │ ╲       │ ╲
  数据A1 数据A2 数据B1 数据B2 ...
  2 transfers / 10ns = 200 MT/s = 200 MHz 带宽

同样 100MHz 外部时钟,DDR 带宽是 SDR 的 2 倍。

等效频率(Effective Frequency)vs 实际频率

内存带宽计算里,常说的”等效频率”是 DDR 传输数据的速率:

Bash
DDR5-4800 的带宽计算:

数据宽度:64 bit(单通道)
传输速率:4800 MT/s(每秒 48 亿次传输)
每次传输:64 bit = 8 bytes

带宽 = 4800 MT/s × 8 bytes = 38.4 GB/s(单通道)

双通道:×2 = 76.8 GB/s

这就是为什么 DDR5-4800 双通道带宽是 76.8 GB/s

预取(Prefetch)深度:DDR 频率不提高但带宽提高的秘密

DDR 每次访问内存,会”预取”一段数据到 IO 缓冲区,这个”段”的大小叫预取深度(Prefetch Depth)

Bash
DDR1 / DDR2 / DDR3 / DDR4 / DDR5 预取深度:

DDR1:2n prefetch(2 个数据单元)
DDR2:4n prefetch(4 个数据单元)
DDR3:8n prefetch(8 个数据单元)
DDR4:8n prefetch(8 个数据单元)
DDR5:16n prefetch(16 个数据单元)

预取深度的工作原理(以 DDR3 为例):

内存核心频率:200 MHz
预取宽度:8n = 8 × 64bit = 512bit(一次性从 Cell 读出)

I/O 区域(以 200MHz × 8 = 1600 MT/s 传出去):
  200MHz 核心 × 8 预取 = 1600 MT/s 传输速率

结论:
  核心频率不提高(还是 200MHz),但通过增加预取深度,
  把数据以更高效率输出到 IO 总线,实现更高带宽。

这就是为什么 DDR 核心频率一直没怎么变,但带宽一直在涨。

核心频率为什么不提升

Bash
DRAM 核心频率受限于以下因素:

1. 行激活时间(tRCD):
   从 ACT 命令到可以读 Column,需要 ~13.5ns(DDR4)
   这限制了核心频率的上限

2. 刷新开销:
   每 64ms 需要 8192 次刷新,占用 ~1.4% 的时间

3. 行切换延迟(tRP):
   预充电需要时间,限制了行访问的频率

4. 功耗:
   核心频率提升意味着更快的充放电,功耗二次方增长

所以 DDR 的发展方向是:
  核心频率适度提升(DDR3 800MHz → DDR4 1200MHz → DDR5 1600MHz)
  带宽更多靠预取深度和通道数来提升

总结

  • DDR 标称频率:是 I/O 传输速率(MT/s),不是 DRAM 核心频率(MHz)
  • Double Data Rate:时钟上升沿 + 下降沿都传数据,带宽是时钟频率的 2 倍
  • DDR5-4800:I/O 时钟 2400MHz,核心频率 1200MHz,预取 16n
  • 预取深度:核心频率不变,通过增加每次预取的数据量(2n→4n→8n→16n)来提升带宽
  • 带宽公式:带宽 = MT/s × 数据宽度(bytes),DDR5-4800 双通道 = 4800 × 8 × 2 = 76.8 GB/s

下篇预告(S08):CPU 发出的地址,是怎么变成内存里的物理操作的?PA(物理地址)和 VA(虚拟地址)的关系,以及地址总线宽度和内存映射的关系。


关注公众号「AI不着急」,回复”资料”获取内存学习路线图。

最后修改: 2024年1月29日

作者

评论

发表评论

您的邮箱地址不会被公开。