将晦涩难懂的技术讲的通俗易懂
分类: LINUX
2019-01-01 17:50:04
存储器基本知识:bank,rank,channel
bank、rank、channel这些关于记忆体的名词是否已困绕许久,疑似了解却又说不出个所以然来。这篇文章就让我们一步步拆解记忆体的面纱,从架构到读写方式逐步揭开记忆体的秘密。
挥发性记忆体分 2 种,SRAM和DRAM
RAM(Ramdom Access Memory)随机存取记忆体,之所以称作「随机存取」,是因为相较于早期的线性储存媒体(磁带)而言,因为磁带的存取是线性的,存取时间会依目前磁带位置和欲存取位置的距离而定,需转动磁带至应有的位置,距离越长、转得越久、存取时间也就越久。而 RAM 没有这种烦恼,存取时间为固定值,不会因为资料在记忆体的位置而影响存取时间。
而 RAM 在电脑中又可大致上分为 2 种:SRAM 和 DRAM,两者的基础原理差不多,都是将电荷储存至内部,借由改变不同的电荷储存 0 或是 1。SRAM(Static Random Access Memory)静态随机存取记忆体和 DRAM(Dynamic
Random Access Memory)有著几点不同,SRAM 的结构较複杂、单位面积的容量较少、存取速度快,DRAM 则是构造简单、单位面积内的容量较多、存取时间较 SRAM 慢,同时 DRAM 也因为构造较简单的关系,储存的电荷会随著时间渐渐消失,因此需要有个再充电(Refresh)的动作保持电容储存的资料。
SRAM 单一位元储存区的构造
DRAM 单一位元储存区的构造
由图中 SRAM 和 DRAM 构造可得知,SRAM 採用正反器(flip-flop)构造储存,DRAM 则是採用电容储存。因为 SRAM 和 DRAM 种种的特性不同,SRAM 适合做为暂存器和 CPU 快取使用,DRAM 则是适合做为主记忆体或是其他装置间的快取使用。
挥发与非挥发性记忆体
挥发性记忆体(Volatile Memory)和非挥发性记忆体(Non-Volatile Memory)之间的差异在于,断电之后是否可保存内部资料,挥发性记忆体的资料会随著失去电力供应而消失,而非挥发性记忆体依然可以保有内部资料。
挥发性记忆体包含了SRAM和DRAM,而非挥发性记忆体包含ROM(Read-Only Memory)和Flash Memory快闪记忆体。
主记忆体子系统
DRAM 由于制造简单、高密度,作为电脑内部的主记忆体再适合不过了。但是由于主记忆体摆放在 CPU 之外,从工厂出来的晶粒需要封装和组合之后才可和 CPU 连结,因此从 CPU 至 DRAM 晶粒之间依据层级由大至小为 channel>DIMM>rank>chip>bank>row/column,接下来就一一说明这些部分。
主记忆体由大至小,由上往下可做这样的拆分
主记忆体从 channel 至 chip 的相对应关系
chip 往下拆分为 bank
bank 往下拆就是 1 个个的储存单元,横向 1 排称之为 row,直向 1 排称之为 column,每排 column 的下方都有个 row buffer,用以暂存读出来的 row 排资料
单一 DRAM 晶片的内部功能区块图(图片取自Micron)
channel 和 DIMM
从记忆体控制器出来之后,最先遇到的就是 channel,每个 channel 需要配有 1 组记忆体控制器、2 个 channel 配置 2 组……以此类推。而每个 channel 中能够拥有许多组 DIMM(Dual In-line Memory Module),DIMM 也就是目前消费者能够在市场上买到的记忆体模组,因为多年前的主机板必须购买记忆体颗粒(chip)直接插在主机板上,而后发展出 SIMM(Single In-line Memory Module),将多组记忆体颗粒焊在 1 片电路板上,成为记忆体模组,再将此电路板插在主机板上。接著为了增加资料吞吐量,将 1 条记忆体模组的频宽从 SIMM 的 32bit 改换成 DIMM 的 64bit,这设计依然沿用至今。
从记忆体颗粒过度到 SIMM 的时代,坊间出现了替使用者将记忆体颗粒焊到 SIMM 电路板上的服务,因为当时记忆体非常昂贵,花一些小钱就可以把记忆体延用至新的电脑上。
rank 和 chip
rank 指的是连结到同 1 个CS(Chip Select)的记忆体颗粒 chip,记忆体控制器能够对同 1 rank 的 chip 进行读写操作,而在同 1 rank 的 chip 也分享同样的控制讯号。以目前的电脑来说,因为 1 组 channel 的宽度为 64bit,所以能够同时读写 8byte 的资料,如果是具有 ECC 功能的记忆体控制器和 ECC 记忆体模组,那麽 1 组 channel 的宽度就是 72bit。
rank 1 和 rank 2 共享同组 address/comand 讯号线,利用 chip select 线选择欲读取或是写入的那一组,之后将资料经由 MUX 多工器送出。
有些人会有错误观念,以 chip 的数量或是以记忆体模组的单、双面进行 rank 的判断,但其实要以记忆体控制器和记忆体颗粒的规格进行判断,目前家用 PC 的记忆体控制器通道绝大部分都是 64bit 宽,记忆体颗粒则是 8bit 宽,因此 8 颗并联即可满足记忆体控制器的需求,也就是 1 组 rank。但偶尔也有以 16bit 宽的记忆体颗粒製成的记忆体模组,此时 4 个 chip 就是 1 组 rank。
这在採用 Intel H61/H81 晶片组和传统单channel的主机板时须特别注意,因为 Intel 限制 H61/H81 每个 channel 仅能支援 2 组 rank,而不是 4 组 rank,部分主机板每个 channel 又做了 2 组记忆体模组插槽,造成部分使用者同组 channel 放入 2 条记忆体模组时能够辨识全部的记忆体容量(双面单 rank 的记忆体模组),部分使用者则是仅能辨识一半的容量(双面双 rank 的记忆体模组)。
bank、row、column
bank 再往下分拆就是实际储存位元的电路,一般来说横向选择排数的线路称为 row(row enable、row select、word line),直向负责传递讯号的线路为column(bitline),每组 bank 的下方还会有个 row buffer(sense amplifier),负责将独出的 row 资料暂存,等待 column 位址送到后输出正确的位元,以及判断储存的资料是 0 还是 1。
1个bank的读取操作
1 个 bank 的写入操作
记忆体的读写方式
上图标明了记忆体的读写方式,读取时首先记忆体控制器会将 1 组位址由位址线传到记忆体上,控制线跟著传送控制讯号;如果是多 rank 的安装情形,CS 也会送出对应的讯号选择目标 rank。接著由于每个 rank 由许多 chip 组成,1 个 chip 仅负责部分的资料读取,chip 接收到位址讯号后,将位址丢入内部的 row/column 解码器找出相对应的 bank 位址(每家每款产品的内部 bank 组合有可能不同,因此对应也会有所不同),接著开启 row 线,同 1 排 row 的内部资料就会流到 row buffer 内部,row buffer 判断讯号为 0 或是 1 之后就输出资料。
写入时除了位址资料外,还会传送欲写入的资料至晶片内部的 input buffer,同样的也是依照 row/column 解码器找出对应位置之后写入。
记忆体控制器和 DIMM 之间线路的关系。
越多越好,加速读写能力
家用电脑的记忆体控制器已经进入双通道记忆体控制器多年,加速原理为增加资料汇流排宽度,达到同时读写更多资料的能力。
另一种增加频宽的方法就是减少延迟,利用多个 chip 或是 bank 达成。一般的记忆体读取延迟为命令下达+记忆体读取延迟+输出资料,如果命令下达延迟为 2ns、记忆体读取延迟为 10ns、输出资料延迟为 2ns,那麽读取 2 笔资料的总延迟就会是(2+10+2)×2=24ns。
如果现在能够将资料拆分至 2 颗记忆体上,那麽 2 笔读取延迟将降低至 16ns,因为不需等到前笔资料读取完成才发出下一笔的读取命令,在第一笔资料进入记忆体读取时即可发出。这种概念也可应用到目前最夯的 SSD 上,较多CE(Chip Enable)封装的快闪记忆体晶片,通常都比较少 CE 封装的晶片来得快。
由时序图可得知,下方此种尽量分拆记忆体空间的作法,可大幅减少延迟