本节书摘来自异步社区《思科UCS服务器统一计算》一书中的第2章,第2.2节,作者 【美】Silvano Gai , Tommi Salli , Roger Andersson,更多章节内容可以访问云栖社区“异步社区”公众号查看
2.2 内存子系统
思科UCS服务器统一计算
电子业在制造内存子系统上花费了巨大的精力,使内存子系统能够满足现代处理器所需的低访问时间和当今应用程序的高容量需求。
在介绍当前的内存子系统之前,有必要先介绍一些最常用的术语。
- RAM(随机访问内存,Random Access Memory)
- SRAM(静态RAM,Static RAM)
- DRAM(动态RAM,Dynamic RAM)
- SDRAM(同步DRAM,Synchronous DRAM)
- SIMM(单列直插式内存模块,Single Inline Memory Module)
- DIMM(双列直插式内存模块,Dual Inline Memory Module)
- UDIMM(无缓冲DIMM,unbuffered DIMM)
- RDIMM(带寄存器的DIMM,Registered DIMM)
- DDR(双倍数据速率SDRAM,Double Data Rate SDRAM)
- DDR2(第二代DDR,Second Generation DDR)
- DDR3(第三代DDR,Third Generation DDR)
具体来讲,电子元件工业联合会(Joint Electron Device Engineering Council,JEDEC)是已经活跃在该领域的半导体工程标准组织。JEDEC标准21指定了从256位SRAM到最新的DDR3模块的半导体内存标准。
现代服务器的内存子系统是由RAM组成的,允许数据在一个固定的时间以任意顺序访问,无需考虑它所在的物理位置。RAM可以是静态的,或是动态的[27]、[28]、[29]、[30]。
2.2.1 SRAM
SRAM(静态RAM)的速度通常非常快,但比DRAM(参见下一节)的容量要小(只有几兆字节),其芯片结构为只要有电就可保存信息。但它们不够大,因此不能用作服务器的主内存。
2.2.2 DRAM
DRAM(动态RAM)是服务器的唯一选择。术语“动态”表示信息存储在集成电路的电容器内。由于电容器会随着时间的推移而放电,因此,为避免数据丢失,需要定期给电容器重新充电(“刷新”)。内存控制器通常负责刷新操作。
2.2.3 SDRAM
SDRAM(同步DRAM)是最常用的DRAM。SDRAM具有同步接口,这意味着其操作与时钟信号保持同步。时钟用于驱动流水线内存访问的内部有限状态机。流水线意味着在上一个访问未结束前,芯片可以接收新的内存访问。与传统的DRAM相比,这种方法大大提高了SDRAM的性能。
DDR2和DDR3是两种最常用的SDRAM(参见本章的“DDR2和DDR3”部分)。
图2-13显示了DRAM芯片的内部架构。
内存阵列由存储单元按矩阵方式组成。每个单元都有行和列地址。每一个位都存储在电容器中(也就是存储元件)。
为了提高性能和降低功耗,内存阵列被分割成多个“内存库(bank)”,图2-14显示了一个4-bank和一个8-bank的内存阵列组织方式。
DDR2芯片有4个内部bank,而DDR3芯片有8个内部bank。
2.2.4 DIMM
需要将多个内存芯片组装到一起才能构建一个内存子系统。它们就是按照DIMM(双列直插内存模块)来组织的。
图2-15显示了内存子系统的传统组织方式。例如,内存控制器连接4个DIMM,每一个DIMM由多块DRAM芯片组成。内存控制器(也可集成时钟驱动器)有一个地址总线、一个数据总线和一个命令(也称为控制)总线。该内存控制器负责读取、写入和刷新存储在DIMM中的信息。
图2-16展示了内存控制器与DDR3 DIMM连接的示例。该DIMM由8块DRAM芯片组成,每一块芯片都能够存储8位的数据,每个内存字(内存数据总线的宽度)总共可存储64位的数据。地址总线有15位,它可在不同时间传输“行地址”或“列地址”,总共有30个地址位。此外,在每个DDR3芯片中,3位的库地址允许访问8个库。这可被视作将控制器的整体寻址能力提高到了8千兆字(也就是512Gbit,或64GB)。即使内存控制器有这样的寻址能力,但市面上可用的DDR3芯片容量还是很小。最后,行地址选择(Row Address Selection,RAS)、列地址选择(Column Address Selection,CAS)、写入生效(Write Enabled,WE)等都是在命令总线上。
前视图显示了8个DDR3芯片,每个芯片提供8位信息(通常表示为“x8”)。侧视图显示了芯片位于电路板的一侧,总共有8个芯片(也就是64位)。
2.2.5 ECC和Chipkill
数据完整性是服务器架构中关注的一个重点。通常需要在DIMM上安装额外的内存芯片来检测和恢复存储错误。最常见的排列方式是添加8位纠错码(Error Correcting Code,ECC),将存储字从64位扩展到72位。这允许实现类似汉明码这样的编码方式,允许纠正单位错误并检测双位错误。这些代码也称为单纠错/ 双检错(Single Error Correction/Double Error Detection,SEC/DED)。
通过仔细组织如何将存储字写入到内存芯片中,ECC可以用于预防任一内存芯片的失效,以及单个内存芯片内的任意多位错误。该特性有几个不同的名称[24]、[25]、[26]。
Chipkill是IBM的商标。
Oracle称之为扩展ECC。
HP称之为Chipspare。
Intel有一个类似的特性,称为Intel x4单设备数据纠错(Intel x4 Single Device Data Correction,Intel x4 SDDC)。
Chipkill通过跨多个内存芯片位散射ECC字的位来实现这个功能,这样,任一内存芯片失效将只会影响到一个ECC位。这使得不必理会某个芯片的完全失效即可重建存储内容。
虽然完整地讨论这一技术超出了本书的范围,但是一个示例就可说明其工作原理。图2-18显示了一个每次访问时读取和写入128位有用数据的内存控制器,增加ECC后就变成144位了。144位可分成4个36位的存储字,每个存储字将是SEC/DED。通过使用两个DIMM,每个存储字包含18个4位芯片,就可以按照图2-18所示的方法重组位。如果芯片失效,每4个字中将会有一个错误,但因为字是SEC/DED的,所以每4个字都可以纠正一个错误,因而4个错误都可以被纠正过来。
2.2.6 内存列
让我们重新回到DIMM是如何组织的,一组产生64位有用数据(不计ECC)的芯片称为一个“列(Rank)”。为了在DIMM上存储更多的数据,可以安装多个rank。目前有单、双和4个rank的DIMM。图2-19显示了这3种组织方法。
第一幅图显示的是一个单列的RAM,由9个8位芯片组成,这种配置还可以表示为1Rx8。第二幅图显示的是一个1Rx4排列,由18个4位芯片组成一个rank。最后,第三幅图显示的是一个2Rx8,由18个8位芯片组成两个rank。
内存列不能使用地址位选择,但可使用“芯片选择”。现代内存控制器最多可达8个独立的芯片选择,因此最大可支持8个rank。
2.2.7 UDIMM和RDIMM
SDRAM DIMM可进一步细分为UDIMM(无缓冲DIMM)和RDIMM(带寄存器的DIMM)。在UDIMM中,内存芯片直接连接到地址总线和控制总线,无需任何中间组件。
RDIMM在传入地址和控制总线,以及SDRAM组件之间放置了附加组件(寄存器)。这些寄存器添加了一个延迟时钟周期,但它们减少了内存控制器上的电负荷,因此支持在每个内存控制器上安装更多的DIMM。
因为需要附加组件,所以RDIMM通常更贵,但它们在服务器中得到了普遍使用,因为对于服务器来说,扩展能力和稳定性比价格更重要。
虽然理论上带寄存器/无缓冲的以及ECC/非ECC DIMM是可以任意组合的,但是大多数服务器级内存模块都同时具有ECC和带寄存器功能。
图2-20显示了一个ECC RDIMM。寄存器是箭头指示的芯片;这个ECC DIMM由9个内存芯片组成。
2.2.8 DDR2和DDR3
第一代SDRAM技术称为单倍速率(Single Data Rate,SDR),表示每个时钟周期传输一个数据单元。之后又出现了双倍速率(Double Data Rate,DDR)标准,通过在时钟信号的上升沿和下降沿上同时传输数据,无需提高时钟频率,其带宽就几乎能达到SDR的两倍。DDR技术发展到今天形成了两套标准:DDR2和DDR3。
DDR2 SDRAM(double-data-rate two synchronous dynamic random access memories)的工作电压是1.8V,采用240个针脚的DIMM模块封装。通过改进的总线信号传输,其外部数据总线能够以两倍于DDR的速度工作。
规则是:
每个DRAM时钟传输2次;
每次数据传输8个字节(64位)。
表2-2显示了DDR2标准1。
![80d85dcfbdba6c9a15ec1d9130077cb4dd317c28](https://i-blog.csdnimg.cn/blog_migrate/c0583f1bee0a258aa6ee8b46b978656b.png)
DDR3 SDRAM在DDR2的基础上对以下方面做了改进:
通过将工作电压降低到1.5V,从而减少功耗;
通过引入对0.5~8千兆位芯片的支持提高了内存密度,单rank的容量最大可达16GB;
支持的内存突发长度从DDR2的4字增加到8字,从而增加了内存带宽。增加突发长度是为了更好地满足不断增长的外部数据传输速率。随着传输速率的增加,突发长度(传输的大小)必须增长,但不能超出DRAM核心的访问速率。
DDR3 DIMM有240个针脚,数量与尺寸都和DDR2一样,但它们在电气特性上是不兼容的,关键缺口位置也不一样。未来,DDR3工作时钟频率将更高。截至本书出版时,市面上只有DDR3-800、1066和1333这三种类型。
表2-3总结了不同的DDR3 DIMM模块。
![59bb877e53ebda417008b4547bd63f7e43db53ad](https://i-blog.csdnimg.cn/blog_migrate/1f8813154c12aa8e00b2e3e2382212aa.png)
1某些DDR2模块有两个名字,具体取决于制造商。