什么是内存延迟^1
从CPU读写内存的指令发出到被执行这一过程的时长,以时钟周期为单位。
例如三星的某款4GB内存条上标签为:“4GB 2Rx4 PC3-10600R-09-10-E1-P0”
10600R中的R就代表内存延迟是:15-15-15
知识点
以DDR5 16GB 2Rx8内存为例[^2]
[^2]: 数据摘自Youtube视频How Does Memory Works
Rank
- x8表示单个DRAM芯片I/O位宽是8位
- 非ECC DDR5内存一个Rank是64位,64÷8=8个,所以1个Rank需要8个DRAM芯片
- 则总共内存条上有8x2=16个DRAM芯片
Bank & Bank Group
- 每个DDR5的DRAM芯片有8个Bank Group
- 每个Bank Group有4个Bank
- 每个Bank有65536行,也就是Row,也叫Wordline
- 每个Bank有8192列,也就是Column
- DRAM芯片的Bank是由1C1T Cell组成的存储平面,可以理解为Excel的单元格,一个Bank有8192列,65536行,每个单元格只存储0和1
Bank中读写操作的地址
- 31位,以110 11 0000110011100111 1100110010为例
- 前3位有效范围0-7,选择哪个Bank Group
- 4-5位有效范围0-3,选择 Bank Group中哪个Bank
- 接下来16位有效范围0-65535,表示一个Bank中哪一列,也就是哪个wordline
- Row Address Stobe - RAS
- 最后10位有效范围0-1023,表示一个wordline 8192个Cell中哪8个数据位
- Column Address Stobe - CAS
- 问: 为什么10位地址,选择8个数据位?
- 答:2Rx8表示Bank I/O位宽是8bits,将8192列(Column)分成连续的1024份,每份8个Cell;所以Column Address实际表示的是Column中每8个一组的首个Cell的位置。
Bank中读写的过程
- Row Close
- Precharge Bitlines[^3]
- Row Open
- Column Address Select/Multiplex
- Access 1T1C Cells Read/Write Data
如上一节所说,内存芯片收到一组31位的地址,选择了Bank Group和Bank后,关闭该Bank中所有的wordline,也就是Row Close。之后要对所有列bitlines进行预充电,给每个Cell充0.5V,由于电容的关系,之前存着1的Cell充电后还是1,存着0的Cell充电后也还是0,这个过程叫Precharge Bitlines,是为防止1C1T Cells中Capacitor由于电子逸散造成的数据丢失。充电之后根据16位地址选择并Open Row,再由10位地址由Column Multiplex选择1024组中的1组(8个),最后便是访问1C1T Cell进行数据读写。
[^3]: Bitlines指将一列1T1C Cells连接起来,对应的是wordline,后者连接Row
延迟 Latency
正如前面所说,内存条的延迟由连续的3个数字表示,如15-15-15,为了表示差异,此次以15-16-17为例。
- CAS
- Column Address Strobe
- 内存芯片在8192列中选取连续8位的时延
- tRCD
- RAS to CAS Delay
- 行寻址开始到列寻址开始之间的时延
- tPR
- Precharge Bitlines的时延
- Clock Cycles - 时钟周期
- 时钟周期定义为频率的倒数
- 但对于DDR(Double Data Rate)内存来说标称频率是时钟频率的2倍
- 假如DDR5内存条频率是4800Mhz
- 一个时钟周期时长为:1s / (4800 000 000Hz / 2) x 10^9 = 0.417ns
- CAS延迟:15 x 0.417ns = 6.255ns
- tRCD延迟:16 x 0.417ns = 6.672ns
- tPR延迟:17 x 0.417ns = 7.089ns