存储器:DRAM(二)层级

前言

这几天在研究Ramulator的使用,因此先跳过SRAM,整理DRAM的学习笔记。

关于DRAM的工作原理,强烈推荐观看Branch Education的讲解视频,该视频的可视化做得非常优秀。

存储器:DRAM(二)层级

DRAM的基本层级

上文我们讲解了DRAM的基本单元——Memory Cell,那么DRAM是如何由几百亿个cell组合起来工作的呢?这就是我们今天要分享的内容。现代DRAM从宏观到微观的层级大致为:Channel, DIMM, Rank, DRAM Chip, Bank Group, Bank, Memory Array, Memory Cell 一共八级。听起来相当复杂,但只要稍微花点时间,理解起来并不困难。借由开头提到的视频,我们得以搭配图示食用。

Channel

image-20240417212533413

中文直译为“通道”。是DRAM的最外层,也是与CPU交互的一层。每一个Channel在CPU内部都对应一个Memory Controller,在DRAM上则对应一组DRAM ranks。

常见的DDR3和DDR4标准都只有一个Channel,带宽为64bits;而最新的DDR5标准则有两组Channel,如上图所示。总带宽依然是64bits,这意味着每个Channel的带宽为32bits。另外,DDR5还有21bits的地址线。两个Channel彼此独立工作,互不干扰。

DIMM(Dual In-Line Memory Module)

image-20240417212815346

双列直插内存模块(DIMM),是在单列直插存储器模块(single inline memory module,SIMM)的基础上发展起来的,SIMM提供32位数据通道,而DIMM则提供了64位的数据通道。图中两个channel各32bitss,每个Channel连接了4块DRAM chip。每块chip的位宽为8bits(记为x8)。

注意,此处的”4个DRAM chip“仅针对单个DIMM而言,实际主板上的DIMM插槽不止一个,每个channel可以连接很多块DRAM chip。

Rank

通过DIMM上一部分或所有内存颗粒产生一个64位的block。一个DIMM上的Rank数存在多种标准,如图:

img

要想组成一个rank,需要有16片x4(4bits)芯片或8片x8芯片。因此一个DIMM上至少有8颗内存颗粒。

多rank允许每个rank中有多个打开的 DRAM pages(row)(通常每个rank有8个row)。这增加了命中已经打开的row地址的可能性。性能提升高度依赖于应用程序和内存控制器利用打开row的能力。

多rank在数据总线上具有更高的负载(在无缓冲 DIMM CA 总线也一样)。因此,如果一个通道中连接了多个dual-rank DIMM,速度可能会降低。

受限于某些限制,可以独立访问rank,但不能同时访问,因为数据线仍然在通道上的列之间共享。例如,控制器可以在等待从一个rank中读取的数据时,将写入数据发送到一个rank。当写入数据从数据总线消费时,另一rank可以执行与读取相关的操作,例如激活一行或将数据从内部传输到输出驱动器。一旦 CA 总线没有了来自前一次读取的噪声,DRAM 就可以驱动读取数据。像这样控制交错访问是由内存控制器完成的。

CPU 可以访问一个rank,而另一个rank可以进行刷新周期(准备好被访问)。刷新周期的屏蔽和流水线通常会为CPU 密集型应用程序带来更好的性能,因为它减少了内存响应时间。但是访问不同rank在某些情况下会导致流水线停滞,从而降低性能。因此,多级rank的整体影响因应用程序而异。

——摘自知乎内存通道(channel)和内存列(rank)

DRAM Chip

image-20240418125503040

中文一般将DRAM chip称为“内存颗粒”。每块chip内部最核心的部分是DRAM Die,上面有一系列Bank。DDR5的标准是32个Bank,DDR4为16个。

image-20240417212928002

Bank Group

image-20240417213101253

Bank Group是DDR4引入的概念,主要为了拓展预取(pre-fetch)位数。不同的Bank Group各预取各的,互不干扰,最后通过Mux选取想要的数据。有关预取的部分我们后面会详细讨论。DDR4每个Bank Group有4个Bank,DDR5有8个。

img

Bank

image-20240417213001935

Bank是DRAM内的粒度最小的控制单元,controller只能控制某一bank的整体行为,而无法对该bank内部进行更细化的控制。如下图的地址分段中,Bank的地址线有5位,前3位选择Bank Group,后2位选择具体的Bank。

image-20240418134914557

随着DRAM容量的增大,地址线不可能保持线性增长,因为这会导致封装成本的急剧上升。这个问题的解决方法是复用地址线,即行与列共用地址线,如此一来便直接把地址管脚砍掉一半。

Memory Array

image-20240418131924539

一般每个Bank由8个Memory Array组成,各自配有灵敏放大器Sense Amplifier。每个Array行数为216=655462^{16}=65546,列数为210=10242^{10}=1024。因此正如Bank一节展示的地址分段,行地址有16位,列地址有10位。行列地址到达时,每个Array并行读取1bit,最终汇成8bits(1byte)。

由于bank中并行Memory Array的存在,1byte的数据并不是连续存储的,而是分成8bit各自存在8个Memory Array的同一地址处。

Memory Cell

Memory Cell就是我们上一节讲解的基本单元。每个Memory Array由65536x1024个cell组成。

image-20240417171255056

DRAM读写模式:突发传输模式(Burst Transfer Mode)

6AB6JJJ2

控制器首先会发送行地址选通信号(row access strobe, RAS),从DRAM中的某个bank读取一部分数据(长度为Burst Length,DDR4取8,DDR5取16),存到row buffer(burst buffer)里。然后再发送列地址选通信号(column access strobe, CAS),从row buffer中读取一部分数据。如此一来,接下来的周期里若读取同一行中的不同列,称为row hit,则无需再传输RAS和预充电,直接传输CAS即可从buffer中读取数据,节省时间。

上图为简笔画示意图,左边长条状即为Burst Buffer;下图为DDR5的Burst Buffer示意图,一共8行(对应8个Memory Array),每行16个元素(对应Burst Length=16)。后续CAS信号再从中选取一列,获得8bits的数据。

image-20240418135323812

DDR(Double Data Rate)

双倍数据速率(Double Data Rate, DDR)技术使DRAM在同步时钟的上升沿和下降沿都能读取数据,从而获得双倍的数据读取速率。如今常用的DDR标准有DDR3, DDR4以及最新的DDR5等。

DRAM读取模式:预取(Pre-fetch)

DRAM的IO频率和Memory Controller的频率(称为“核心频率”)通常是不同步的。举个例子,核心频率为1,IO频率为2,那么从CPU传来的一条指令要在DRAM停留2个IO周期。而该指令的处理只需要一个IO周期就能完成,这样一来就浪费了一个IO周期。如何利用这一个浪费的周期呢?设计者提出了Pre-fetch技术。即利用locality原理,在浪费的周期中将目标元素周围的元素也一并加载下来。这样后续如果读到周围的元素,就可以直接从buffer读取,节省了读取时间。

因此,pre-fetch是靠IO频率相对核心频率的比值来实现的。

  • DDR技术一个时钟周期传输2bit的数据,所以DDR的prefetch为2bit,记为2n;
  • DDR2中,I/O的时钟频率为核心频率的2倍,因此DDR2的prefetch为2×2=4bits,记为4n;
  • DDR3时,I/O时钟频率是核心频率的四倍,因此DDR3的prefetch为4×2bit=8bit,记为8n;

Pre-fetch与Burst的关系

Pre-fetch是由IO频率与核心频率的比值决定的,它决定了Burst Length的上限。例如,DDR3的pre-fetch为8n,那么Burst Length最大可取8,有时会取4(舍弃4位),但不能超过8。

DRAM新技术:HBM

Packaging Innovation: Stacked or Embedded DRAMs

DRAM领域最新的技术不是电路层面的创新,而是封装技术的创新。2017年提出来的新技术将多个DRAM以堆叠或邻接的方式嵌入到与处理器相同的封装中。这将显著地减少访存延时和增加带宽。因此也有人将该技术称为high bandwidth memory(HBM)。

HBM有两个版本,一种是将DRAM通过solder bump technology直接焊接到CPU上,另一种是将DRAM堆叠之后放在CPU旁边。

<img src=“FSLQZT5G.png” alt=“<img alt="" data-attachment-key="FSLQZT5G" data-annotation="%7B%22attachmentURI%22%3A%22http%3A%2F%2Fzotero.org%2Fusers%2F13823770%2Fitems%2FJW7V2YSP%22%2C%22annotationKey%22%3A%22J79JAQTW%22%2C%22color%22%3A%22%23ffd400%22%2C%22pageLabel%22%3A%2291%22%2C%22position%22%3A%7B%22pageIndex%22%3A122%2C%22rects%22%3A%5B%5B165%2C57.895%2C519.231%2C220.587%5D%5D%7D%2C%22citationItem%22%3A%7B%22uris%22%3A%5B%22http%3A%2F%2Fzotero.org%2Fusers%2F13823770%2Fitems%2FIDRI9CZZ%22%5D%2C%22locator%22%3A%2291%22%7D%7D" width="590" height="271" src="attachments/FSLQZT5G.png" ztype="zimage" style=“zoom:50%;” >” />

在最前沿的技术中,HBM可以用于制作L4 cache。

参考