Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

6.1 内存硬件原理

我们常说的内存(Memory,也叫主存、随机存取存储器RAM)是计算机中临时存储数据的地方,CPU可以直接读写内存中的数据,速度比硬盘快几个数量级。理解内存的硬件原理,有助于我们理解程序的性能特性,写出更高效的代码。

内存的基本概念

RAM(随机存取存储器)

内存是一种随机存取存储器,特点是可以按地址随机访问任意位置的数据,访问速度和数据所在的位置无关。与之相对的是顺序存取存储器(比如磁带),访问数据需要顺序查找,速度很慢。

RAM分为两种:

  1. SRAM(静态RAM):速度极快,不需要刷新,集成度低,价格昂贵,用作CPU的高速缓存(Cache)
  2. DRAM(动态RAM):需要定期刷新才能保存数据,集成度高,价格便宜,我们平时说的内存就是DRAM

我们主要讨论DRAM内存。

DRAM的工作原理

DRAM的基本存储单元是一个电容和一个晶体管:

  • 电容充电代表存储数据1,放电代表存储数据0
  • 晶体管相当于开关,控制读写操作
  • 电容会漏电,所以需要每隔一段时间(通常是64ms)刷新一次,给电容重新充电,否则数据就会丢失
  • 刷新操作会占用内存带宽,影响内存性能

DRAM的读写过程

  1. 内存控制器接收到CPU的读写请求,解析出地址
  2. 首先发送行地址,选中对应的行,激活该行的存储单元,数据被读取到行缓冲区
  3. 再发送列地址,选中对应的列,返回对应的数据
  4. 写入操作类似,将数据写入对应的存储单元
  5. 访问完成后,关闭行,准备下一次访问

内存的性能参数

  1. 容量:内存能存储的最大数据量,常见的有8GB、16GB、32GB、64GB等
  2. 频率:内存的工作频率,单位是MHz或MT/s(百万次传输每秒),频率越高速度越快,常见的有DDR4 2666、DDR4 3200、DDR5 4800、DDR5 5600等
  3. 带宽:单位时间内存能传输的数据量,计算公式是 频率 × 位宽 / 8,单通道DDR4 3200的带宽是3200MT/s × 64bit / 8 = 25.6GB/s
  4. 时序(CL值):内存的延迟参数,CL(CAS Latency)是列地址选通延迟,单位是时钟周期,CL值越小延迟越低。同样频率下,CL值越小性能越好。
    • 例如DDR4 3200 CL16的实际延迟是 16 / 3200MHz = 5ns,比DDR4 3600 CL18(18/3600=5ns)的延迟差不多

内存的物理结构

内存芯片的组织

  • Bank:内存芯片内部划分为多个Bank,每个Bank可以独立进行读写操作,多个Bank可以并行工作,提升内存带宽
  • 行/列:每个Bank是一个二维的存储矩阵,分为行和列
  • :每个行的所有存储单元构成一个页,大小通常是4KB/8KB/16KB,同一页的访问速度很快,不同页之间切换需要行激活,有额外的延迟

内存模组(内存条)

我们平时用的内存条是把多个DRAM芯片焊接在PCB板上组成的:

  • 位宽:每个内存条的位宽通常是64bit,ECC内存是72bit(多了8bit校验位)
  • Rank:内存条上的独立访问区域,单Rank内存只有一个64bit的访问区域,双Rank有两个,可以并行访问,提升性能
  • 金手指:内存条底部的金属触点,和主板上的内存插槽连接
  • SPD芯片:存储内存条的参数信息(频率、时序、电压等),主板启动时会读取这些参数配置内存

DDR内存世代

DDR(双倍数据速率)内存是目前的主流,在一个时钟周期的上升沿和下降沿都传输数据,相当于频率翻倍:

世代典型频率单通道带宽工作电压发布时间
DDR31333/1600MT/s10.6/12.8GB/s1.5V2007年
DDR42666/3200MT/s21.3/25.6GB/s1.2V2014年
DDR54800/5600MT/s38.4/44.8GB/s1.1V2020年

每一代DDR内存的带宽更高,电压更低,功耗更小,但互不兼容,插槽也不同,不能混用。

内存寻址方式

CPU访问内存的流程:

  1. CPU发出虚拟地址,经过内存管理单元(MMU)转换为物理地址
  2. 物理地址被发送到内存控制器
  3. 内存控制器将物理地址解析为通道号、Rank号、Bank号、行地址、列地址
  4. 内存控制器按照地址访问对应的存储单元,返回数据

内存 interleaving(交叉存取)

为了提升内存性能,内存控制器会把连续的地址分散到不同的Channel、Rank、Bank中,这样连续访问可以并行操作多个Bank,提升吞吐量。

多通道内存技术

什么是多通道

  • 单通道:内存控制器和内存之间只有一条64bit的数据总线,带宽有限
  • 双通道:两条独立的64bit总线,总位宽128bit,带宽翻倍
  • 三通道/四通道:更多的通道,带宽更高,常见于高端平台和服务器

多通道的优势

多通道技术可以成倍提升内存带宽,对于内存带宽瓶颈的场景(比如核显、大数据处理、虚拟机)性能提升非常明显。

多通道的要求

  • 需要主板支持多通道
  • 需要将内存条插在对应的插槽中,通常是相同颜色的插槽
  • 最好使用相同容量、相同频率、相同时序的内存条,兼容性更好
  • 内存不需要完全相同,不同容量的内存也可以组成弹性双通道

注意

如果你的主板支持双通道,一定要插两根内存组成双通道,比单通道性能提升很多,特别是集成显卡的平台,性能差距可达30%以上。

内存对系统性能的影响

内存的性能主要从两个方面影响系统:

  1. 容量:内存容量不够的话,系统会使用交换分区(Swap),把不常用的内存页放到硬盘上,硬盘速度比内存慢很多,会导致系统非常卡顿。
    • 普通办公:8GB足够
    • 开发/游戏:16GB是标配
    • 大数据/虚拟机/视频处理:32GB以上
  2. 带宽和延迟:如果内存带宽不够或者延迟太高,CPU需要等待内存数据,会导致CPU利用率上不去,程序性能下降。
    • 普通场景:DDR4 3200足够
    • 游戏、高性能计算:高频率低延迟的内存能提升性能
    • 核显平台:高带宽内存对性能影响很大

常见内存问题

  1. 内存超频:可以通过超频内存的频率和调整时序提升性能,但可能会导致不稳定,需要散热和电压支持。
  2. ECC内存:带错误校验和纠正功能的内存,能够检测并纠正单bit错误,检测多bit错误,常用于服务器和需要高可靠性的场景,比普通内存贵。
  3. 内存兼容性问题:不同品牌、不同频率的内存混用可能会出现兼容性问题,导致蓝屏、死机等,尽量选择相同规格的内存。

思考问题

  1. SRAM和DRAM有什么区别?分别用在什么地方?
  2. 内存的频率、带宽、时序三个参数之间有什么关系?哪个对性能影响更大?
  3. 双通道内存相比单通道内存有什么优势?为什么双通道能提升性能?
  4. 为什么内存需要定时刷新?如果不刷新会怎么样?