Michael_Tong
近期目标:按时吃药,努力做个正常人。
内存是我们平常接触最频繁的计算机硬件之一,内存的大小、多寡和型号和我们计算机、手机等性能密切相关。内存系列计划通过三篇文章由浅入深介绍内存的软硬件特性以及与固件的关系。这是第一篇,以一个生活情景给读者介绍内存的背景知识,为后面打下基础。

情景

小张有一定的计算机背景知识,最近他在京东上买了两条DDR3的内存,打算把笔记本升级成8G。可是一拆开包装到就傻眼了:

 

 

4GB看起来很好,两根刚好8GB。2Rx8是啥,PC3又是啥,10600似乎和他想买的1333的差好远,后面那串数字又代表什么呢?

小张找到了我,让我帮忙给他说说这些字母和数字都代表什么。我最是好为人师,于是开始了我们今天的介绍。

什么是DIMM?

在80286时代,内存颗粒(Chip)是直接插在主板上的,叫做DIP(Dual In-line Package)。到了80386时代,换成1片焊有内存颗粒的电路板,叫做SIMM(Single-Inline Memory Module)。由阵脚形态变化成电路板带来了很多好处:模块化,安装便利等等,由此DIY市场才有可能产生。当时SIMM的位宽是32bit,即一个周期读取4个字节,到了奔腾时,位宽变为64bit,即8个字节,于是SIMM就顺势变为DIMM(Double-Inline Memory Module)。这种形态一直延续至今,也是内存条的基本形态。

说到这里,小张着急了:”这和我的内存有啥关系?“。当然有关系,就是和10600S的S有关,现在DIMM分为很多种:

RDIMM: 全称(Registered DIMM),寄存型模组,主要用在服务器上,为了增加内存的容量和稳定性分有ECC和无ECC两种,但市场上几乎都是ECC的。

UDIMM:全称(Unbuffered DIMM),无缓冲型模组,这是我们平时所用到的标准台式电脑DIMM,分有ECC和无ECC两种,一般是无ECC的。

SO-DIMM:全称(Small Outline DIMM),小外型DIMM,笔记本电脑中所使用的DIMM,分ECC和无ECC两种。

Mini-DIMM:DDR2时代新出现的模组类型,它是Registered DIMM的缩小版本,用于刀片式服务器等对体积要求苛刻的高端领域。

一般内存长度 133.35mm,SO-DIMM为了适应笔记本内狭小的空间,缩短为67.6mm而且一般为侧式插入。高度也有些变种,一般的内存条高度为30mm,VLP(Very Low Profile)降低为18.3mm,而ULP(Ultra Low Profile)更是矮化到17.8mm,主要是为了放入1U的刀片服务器中。

大小关系如下图:

 

 

小张这下知道10600S中S代表了SO-DIMM,看来大小没错。不过速度呢?

DDR到DDR4

为了照顾小张的急性子,我就跳过了SDRAM(Synchronous Dynamic random access memory)后DDR和Rambus/RDRAM争天下的故事。DDR SDRAM全称为Double Data Rate SDRAM,中文名为“双倍数据流SDRAM”。DDR SDRAM在原有的SDRAM的基础上改进而来。也正因为如此,DDR能够凭借着转产成本优势来打败昔日的对手RDRAM,成为当今的主流。顾名思义,和原本的SDRAM相比,DDR SDRAM一个时钟周期要传输两次数据:

 

 

从DDR到DDR4主要的区别是在于传输速率的不同,随着时钟周期的不断降低,传输率也不断提高。还有电压也越来越低。有趣的是命名规则,大部分台式机DIMM厂商都会标注DDRx-yyy,x代表第几代,yyy代表数据传输率。而大部分的SO-DIMM和RDIMM等则标注PCx-zzzz,x还代表第几代,zzzz则代表最大带宽。因为DDR位宽为64位,8个字节,所以zzzz=yyy * 8,而yyy又是时钟的两倍。下面这张表是主要的各代DDR内存的速度:

 

所以小张的内存条上的PC3-10600S代表DDR3,1333MHz的SO-DIMM。小张又问,那2R*8啥意思呢?

RANK和BANK

其实从外观上就可以看出来小张的内存条由很多海力士的内存颗粒组成。从内存控制器到内存颗粒内部逻辑,笼统上讲从大到小为:channel>DIMM>rank>chip>bank>row/column,如下图:

 

 

一个现实的例子是:

 

Channel-->通道(现在台式机也非常多双通道的了,服务器基本都是双通道)

DIMM-->插槽

rank-->排或面(现在的内存条大多是双面的,或者说是两排,rank1,rank2)

chip-->芯片或者叫IC(一般一rank(面)上8个芯片,显卡上可能有16个芯片)

bank-->层,这些bank共享一个memory I/O controller, 但是在每个bank内部的读写可以并行进行。

row-->行,column-->(列)一层bank上就像excel的一张sheet表,例如16384rows*1024column

在这个例子中,一个i7 CPU支持两个Channel(双通道),每个Channel上可以插俩个DIMM,而每个DIMM由两个rank构成,8个chip组成一个rank。由于现在多数内存颗粒的位宽是8bit,而CPU带宽是64bit,所以经常是8个颗粒可以组成一个rank。所以小张的内存条2R * 8的意思是由2个rank组成,每个rank八个内存颗粒。由于整个内存是4GB,我们可以算出单个内存颗粒是256MB。

后记

小张这下放心了,不过他提起看到过不少内存条上都有很多数字标记,如:

 

 

这些是什么呢?其实,这是内存颗粒的时延(Latency)数据,如4-4-4-8, 5-5-5-15, 7-7-7-21, 或9-9-9-24,分别代表 CL-tRCD-tRP-tRAS的数据,越小越好。具体这些都是什么,就需要更深入的知识了,我们将会在下一篇硬件原理中讲到,而且我们还会在UEFI的memory reference code(MRC)部分再详细深入说明这些参数的具体使用。

如果你和小张一样意犹未尽,在下一篇文章之前大家可以思考下面几个问题:

  1. 每一代内存条宽度都一样,会不会插错呢?[因为防呆口不同,所以不会插错]
  2. 从前面各代内存速度表可以看出,每一代和前一代带宽都有部分重复,这是为什么?[]
  3. 前一代和下一代如果带宽一样,那个performance更好呢?[单从带宽来讲是一样的]
posted on 2018-12-08 13:14  Michael_Tong唐唐  阅读(14501)  评论(0编辑  收藏  举报