现代DRAM内存系统主要由内存控制器和内存芯片组成,DRAM芯片是一个由块,组成的三维结构。Bank: 一个二维的存储矩阵,包含行和列单个Bank有若干行若干列,一行一般存储着连续的几KB的数据。
Rank: 一个Rank由一组Bank组成(一般来说1个Rank包含8个Bank),同一个Rank里面的Bank能同时访问,称为Bank级并行性(Bank Level Parallelism BLP)
Channel: DRAM一般由若干个独立的内存通道组成,每个通道包含若干个Rank。
Cell: 行和列对应的存储单元
访问DRAM Bank的地址包括行地址和列地址,由DRAM控制器上的行地址选通脉冲RAS(Row Address Strobe)和列地址选通脉冲CAS(Column Address Strobe)来选择行地址和列地址,处理器的访存请求会被映射到DRAM Bank上,然后在Bank内分别以行访问和列访问选中二维存储矩阵中的一个单元(Cell),然后就可以进行读写数据了。
在现代DRAM结构中,每一个Bank都包含一个行缓冲(Row Buffer),Bank的Row Buffer是整个访存操作过程中的核心部件,只有将数据读入到行缓冲才能进行读写操作。访存时,先通过行地址确定Bank中的一行,然后将选中的行的所有内容缓存到Bank的Row Buffer里,最后通过列译码器译出列地址在Row Buffer中的某一列,读取cell里面存储的内容。Row Buffer对Bank中的数据起到了缓存的作用,如果下一次访存操作的行地址与上一次一样,那么直接通过列地址从Row Buffer中读取数据(局部性原理),这样的操作加快了访存速度,降低了访存延迟。
内存访问时在Bank上的流程
可以分为4个阶段,分别为译码、Bank读写、Bank数据缓存、数据传输。4个阶段所涉及的硬件资源是不同的,分别对应于地址总线和命令总线,内存Bank,行缓冲和数据总线,因此4个阶段可以形成一条流水线。
译码: 命令发出后经命令总线和地址总线传动到译码器中,译码器进行译码操作,获得行地址和列地址,以及即将访问的Bank。
读写Bank: 将数据从Bank读取到Row Buffer里,或者将Row Buffer里的数据写会到Bank里。
Bank数据缓存: 缓存同一Rank内同时工作的Bank行,充分利用Bank级并行性。
数据传输: 将DRAM中的数据通过数据总线传输给LLC。