0%

全栈速记-内存的物理结构

内存: 储存临时数据的物理设备

内存类型

内存的内部是由各种IC电路组成的,其主要分为三种存储器

  • 随机存储器(RAM, Random access memory):可读数据,也可写数据。断电时,内存中的信息会全部丢失
    • DRAM (Dynamic Random Access Memory): 结构简单, 单位面积内容量较大, 存取速度比SRAM慢; 适合做主存
    • SRAM (Static Random Access Memory): 结构复杂, 单位面积容量较少, 存取速度快; 适合做Cache和CPU缓存
  • 只读存储器(ROM, Read-only memory):一般只能用于数据的读取,不能写入。断点时,数据不会丢失
  • CPU缓存(Cache): CPU缓存的定义为CPU与内存之间的临时数据交换器,它的出现是为了解决CPU运行处理速度与内存读写速度不匹配的矛盾——缓存的速度比内存的速度快多了。CPU缓存一般直接跟CPU芯片集成或位于主板总线互连的独立芯片上。
    • L1, L2(SRAM), L3(DRAM): L1最靠近CPU核心;L2其次; CPU会先在最快的L1中寻找需要的数据,找不到再去找次快的L2,还找不到再去找L3,L3都没有就会去内存找
    • L4 (eDRAM): 主要做核显显存用, 如果不使用集显, 就做L4用

image-20191205220349783

物理结构

层级结构

image-20191206223424051

Channel -> DIMM -> Rank -> Chip -> Row/Column -> Cell

内存结构示例: 2GB DDR3

6a357832a73090b2cbb96a80ea2a8d12

  • Rank: 内存一面/排, 上面内存是两排

  • Chip: 芯片/IC/颗粒, 一面8个chip, 每个128M, 提供1GB

  • Bank: 层, 储存数据块的矩阵, 一个chip有8个Bank; 由行(Row),列(Column)定位随机存取的数据块

  • Cell: 单元, 用于存储一个数据单位, DDR3为8bit

    • 一个Chip的位宽一般是8bit, CPU寻址宽度64bit, 8个Chip组成一个Rank, 所以64/8=8bit;
    • 每个Cell储存的数据宽度等于位宽, 每个Cell由一个晶体管和一个电容组成; Cell大小8bit=1byte
    • 一个Chip大小: 16384(Rows)*1024(Columns)*8(Bank)*1byte=128MB

内存寻址

对于DDR3,我们通常说它是8n-prefetch(这儿n是指每个rank的bank数目),因为DDR3,每个IC有8个bank,每个bank读取数据的最小单位是8bit=1byte。每次数据读取,都会读取8*8bit=64bit=8byte,而不管这些数据是否都是我们所需要的

引脚和信号类型

DDR3的DIMMs(dual-inline memory modules)有240-pins(引脚/金手指)和204-pins, 分别为PC和laptop使用

DDR4 有288-pins, 260pins两种

image-20191206150027497

部分引脚定义:

  • Sx#: Chip select: (S0#-S1#) 片选, 用于选择使用哪个Rank

  • BAx: Bank address inputs: (BA0-BA2, 2^3=8) 用于选择8个Bank

  • RAS#(Row Address Select), CAS#(Column Address Select): Command inputs: 各只有一个pin, 定义是否进行相关模式操作

  • Ax: Address inputs: 行和列的地址选择

  • DQx: Data input/output: (DQ0-DQ63), 64bit的数据读写信号

  • DQSx, DQSx#: Data strobe: 读写选通信号控制

!! 没有单独选定某个内存颗粒(Chip)的选择信号,只有Rank的选择信号(Sx#)。在Rank选择好后,8个内存颗粒一起被选中,共提供64bit的数据

时序

​ 内存时钟信号是方波,DDR内存在时钟信号上升和下降时各进行一次数据传输,所以会有等效两倍传输率的关系。

​ 例如DDR3-1333的实际工作频率是666.7MHz,每秒传输数据666.72=1333百万次,即1333MT/s,也就是我们说的等效频率1333MHz,再由每条内存位宽是64bit,那么它的带宽就是:1333MT/s64bit/8(8bit是一字节)=10667MB/s。

​ 所谓时序,就是内存的时钟周期数值,脉冲信号经过上升再下降,到下一次上升之前叫做一个时钟周期,随着内存频率提升,这个周期会变短。例如CL9的意思就是CL这个操作的时间是9个时钟周期。

​ 内存的读写性能受各个基于时序的延迟参数设置影响

物理地址寻址过程 Addressing

随机存储过程:

  1. Chip select: S0#/S1#, 选择一组Chips

image-20191206225517776

  1. 行有效: RAS#低电平, CAS#高电平, A0-A13传送地址信号, 共可以选择2^14个Row

  2. 列有效: RAS#高电平, CAS#低电平, A0-A9传送地址信号, 共可以选择2^10个Column, 需要行列两个操作才能确定唯一地址

  3. 读写控制信号 (DQS控制)

4132_Figure-3

  1. 定位好数据块, 确定好读写类型, 数据通过DQx进行双向输入输出, 每次读写64bit数据

image-20191206232224310

  1. 多Chips结构能有效提升存取效率: 一般存取延迟为: 命令下达+Cell存取延时+输出数据, 如果命令下发2ns, Cell存取延时10ns, 输出数据为2ns, 那个2次操作演示就是 (2+10+2)x2=24ns; 如果能够将两次操作拆分到两个Chip上, 那么 2次存取的延迟就能减少 16ns, 如下图示例:

image-20191206233830222

物理地址映射

内存地址映射有多种方式, 有

  • B-R-C (Bank, Row, Column): 用的最多。其优点是,功耗低;
  • R-B-C (Row, Bank, Column): 适合数据流方式去访问数据,性能好;
  • B-RL-CL-RH-CH (Bank, Row Low, Column Low, Row High, Column High): 适合存储视频,图像等数据,高性能。

下面拿BRC举例:

image-20191206180029527

  • Bank: 3bit
  • Row: 14bit (128MB, 如果Chip大小256MB, 则Row为15bit)
  • Column: 10bit

references