处理器每秒可以运行几十亿个时钟周期,但需要的数据没有准备好,它就得等待。这也是电脑内存不断升级的原因。
可是,DDR1 到 DDR5 到底改变了什么?为什么内存带宽提高了,程序却不一定明显变快?为什么 DDR5 不能直接插进 DDR4 主板?
先看看我们自己的电脑。在 Windows 中,右键点击开始按钮,打开任务管理器,选择 Performance(性能),再选择 Memory(内存)。
窗口上方的内存总容量与图表下方的速度信息,代表不同的事情。容量告诉我们内存能装多少数据,速度信息反映内存的数据传输率。
不同版本的任务管理器,标签和单位可能不同,也不一定显示 DDR 代数,因此这里不能告诉我们全部信息。内存使用曲线显示现在用了多少内存,并不直接显示带宽或访问延迟。
理解内存,需要分清三个问题:能装多少数据?每秒能传多少数据?每次访问要等多久?
第一章,DDR 到底是什么意思?
RAM 就是随机存取存储器,是电脑运行程序、处理数据时使用的工作空间。SSD 断电以后还能保存信息,普通内存不行,它需要供电才能保留数据。
电脑主内存通常使用 DRAM,也就是动态随机存取存储器。它的存储单元保存微小的电荷,电荷会逐渐流失,所以需要定期刷新。
SDRAM 是同步动态随机存取存储器,操作与时钟配合进行。DDR 就属于 SDRAM,意思是“双倍数据速率”。
早期的单倍数据速率 SDRAM,每个时钟周期传输一次数据。DDR 在时钟的上升沿和下降沿都传输数据。可以想象时钟信号不断升高、降低:单倍速率利用一个边沿,双倍速率利用两个。
在接口时钟频率和数据宽度相同的情况下,DDR 就能完成两倍的数据传输次数。
每一代 DDR 都使用这个基本原理。DDR5 并不是每个周期传五次数据,数字代表设计的代数。
第二章,DDR1 和 DDR2。
第一代正式名称就是 DDR,人们也常叫它 DDR1。它在世纪之交逐渐进入个人电脑。
常见传输率包括 200、266、333 和 400 MT/s,标称工作电压约为 2.5 伏。它最重要的变化,就是利用时钟的两个边沿传输数据。
DDR2 随后在二十一世纪初出现,提高了传输率,并把标称电压降到约 1.8 伏。
改进并不只是提高时钟频率。DDR1 使用 2n 预取,DDR2 增加到 4n 预取。简单来说,预取描述内部电路为外部接口准备多少数据。
一次准备更多数据,就能让外部接口传得更快,而不必让内部存储阵列按相同比例加速。这就像仓库一次准备好几件包裹,再交给速度更快的传送带。
DDR2 的电气信号和硬件要求也变了,不能直接插进原来的 DDR 插槽。
第三章,DDR3 与双通道的误解。
DDR3 在二十一世纪的第一个十年后期出现,预取增加到 8n,标称电压降到约 1.5 伏。低电压版本 DDR3L 使用 1.35 伏。
更高的传输率、更大的容量和更好的能效,让电脑能够处理更重的任务。
但要纠正一个常见说法:双通道并不是 DDR3 发明的,在它之前就已经存在。
内存通道是内存控制器与内存通信的数据通路。使用两个通道,可以增加数据通路,提高总带宽。集成显卡通常与处理器共享系统内存,因此也能从更多内存带宽中受益。
不过,插上两条内存,不代表一定组成了预期的双通道。平台必须支持,内存也必须插在正确的位置。具体插哪个槽,要看主板说明书。
第四章,DDR4、时钟频率与传输率。
DDR4 在 2010 年代中期逐渐普及,标称电压降到约 1.2 伏。
它保留 8n 预取,同时引入存储体组等改进,支持更高的数据传输率。内存内部有多个存储体,把它们组织成组,可以给控制器更多调度机会,但操作之间仍然受到时序规则限制。
理解 DDR4 的参数时,最容易混淆的就是 MT/s 和 MHz。
以 DDR4-3200 为例,这里的 3200 表示每秒 3200 百万次传输,也就是 3200 MT/s,并不是外部时钟运行在 3200 MHz。因为每个时钟周期传输两次,所以外部时钟约为 1600 MHz。
DDR4-3200:数据传输率为 3200 MT/s,外部时钟频率约为 1600 MHz。
再看带宽计算。64 位的数据接口,每次可以传输 8 个字节。每秒 32 亿次传输,乘以 8 个字节,理论带宽就是每秒 25.6 GB。
32 亿次传输/秒 × 8 字节 = 25.6 GB/s。
这是对应数据宽度的理论上限,不代表程序一定能达到。命令、刷新、访问方式和等待时间,都会影响实际表现。
MHz 计算每秒的时钟周期数,MT/s 计算每秒的数据传输次数。它们有关联,但不能混为一谈。
第五章,DDR5 改变了内存条处理数据的方式。
DDR5 标准在 2020 年发布,DRAM 的标称工作电压约为 1.1 伏,不过高性能配置可能使用更高电压。
DDR5 的变化不只是传输率提高。普通非 ECC 的 DDR4 内存条,提供 64 位数据接口;普通非 ECC 的 DDR5 内存条,把这部分数据宽度分成两个独立的 32 位子通道,让控制器更灵活地安排数据传输。
DDR5 还把通常的突发长度,从 8 次传输增加到 16 次。这样,一个 32 位子通道,经过 16 次传输,就能送出 64 字节数据。
但一条 DDR5 内部的两个子通道,不等于在双通道桌面平台上,把两个内存通道都配置完整。这是不同层次的组织方式。
DDR5 内存条还加入电源管理芯片,也就是 PMIC,把一部分电压调节工作移到内存条上。
配合内部存储体和刷新机制的改进,DDR5 可以支持更大的容量和更多数据流量。
第六章,DDR5 的 ECC,可能和你想的不一样。
DDR5 包含片内纠错,也就是在 DRAM 芯片内部进行错误纠正。它能够纠正芯片内部存储中的某些错误,但不能单靠这个功能,保护从内存芯片到处理器的整条数据路径。
因此,片内 ECC 与系统级 ECC 内存不同。系统级 ECC 需要兼容的内存条、额外的校验信息,以及平台支持。
普通消费级 DDR5,不会因为芯片内部有纠错功能,就等同于服务器使用的 ECC 内存。关键要看保护发生在哪里,以及覆盖哪些环节。
第七章,容量、带宽和延迟。
新内存一定让电脑更快吗?提升没有固定比例,要看任务的瓶颈在哪里。
容量决定多少数据可以留在内存里。容量不足时,操作系统可能反复在内存和存储设备之间搬运数据。这时增加内存,可能明显改善体验。但任务已经能轻松装进内存以后,多出来的闲置容量,不一定带来明显提升。
带宽决定每秒能传多少数据,延迟决定一次访问需要等待多久。
可以比较下面两个例子:
DDR4-3200 CL16:CAS 延迟约为 10 纳秒。
DDR5-6000 CL30:CAS 延迟也约为 10 纳秒。
CL 表示等待的时钟周期数。虽然第二个例子的 CL 数字更大,但每个时钟周期更短,因此计算出来的 CAS 等待时间相同。
这不代表两套内存系统的整体性能相同。DDR5 可以提供更高带宽,而完整访问延迟还受到控制器、其他时序,以及内存当前状态的影响。
CAS 延迟只是其中一部分。只比较传输率,或者只比较 CL 数字,都可能得出错误结论。
第八章,兼容性与新的 DDR5 内存条设计。
不同代 DDR 不能直接互换,因为电气要求、信号、引脚定义和时序都不同。
DDR4 和 DDR5 的桌面内存条虽然都有 288 个引脚,但缺口位置和电气设计不同,并不兼容。处理器的内存控制器、主板和固件,都必须支持安装的内存。
即使同属一代,桌面内存、笔记本内存和服务器注册内存,也有不同要求。
包装上的速度也不是无条件保证。实际传输率取决于平台、内存配置和所选设置。
新的 DDR5 设计包括 CUDIMM 和紧凑型的 CSODIMM。它们加入时钟驱动芯片,帮助维持较高传输率下的时钟信号质量。
它们仍然属于 DDR5,但需要相应的平台支持。同一代内存,也会通过更好的信号设计、新模块形式和更大容量,继续发展。
第九章,LPDDR、GDDR 和 HBM 又是什么?
并不是所有现代内存,都属于桌面 DDR 的同一条发展路线。
LPDDR 是低功耗双倍数据速率内存,面向手机、平板和许多笔记本等对能耗敏感的设备。
GDDR 主要围绕图形处理的带宽需求设计,常见于独立显卡。
HBM 是高带宽内存,使用堆叠结构和很宽的数据接口,应用于先进加速器和高性能计算。
这些内存家族有不同的设计重点。不能只看代数大小,就把它们排成统一的性能等级,它们也不能随意互换。
结论,究竟改进了什么?
从 DDR1 到 DDR5,核心是传输更多有效数据,同时处理好功耗、容量和设计复杂度。
最初的 DDR 利用时钟的两个边沿传输数据。DDR2 和 DDR3 扩大预取、降低电压。DDR4 通过存储体组改善内部组织。DDR5 加入独立子通道、更长的突发传输、内存条电源管理和片内纠错。
一套好的内存系统,需要取得平衡:容量足够,带宽能满足处理器需求,延迟合适,硬件也支持当前配置。
这些信息,单靠 DDR 的代数无法告诉你。
