亡国之奴我们得出了结论:最大内存是由能够插多少条内存决定的,因为每根内存条现在最大128GB,整体内存容量就被限制了下来,这不是钱多钱少的问题。有读者对每根内存条的极限容量感兴趣。是不是我们有钱,可以通过不停增加颗粒数目来堆出超高内存容量的内存条呢?答案当然是否定的了。今天我们就一起来探讨一下问什么。
首先我们假定不考虑内存颗粒能不能做出这么大的容量,仅仅理论探讨。限于篇幅,为了简化讨论范围,我们给问题设置了一些限制:
1.仅讨论大家DDR4,包括UDIMM DDR4和RDIMM DDR4。DDR3因为本身支持的容量就小而且基本已被淘汰,我们就不必哀悼它了。DDR5目前还没有上市,我们等它成熟后再来重新回顾它的理论极限。LRDIMM会有些许顾及,担不是重点。
内存条的容量和它的基本单位:内存颗粒的组织方式息息相关。如果我们仔细看上面那三种内存条和我的注解,你能不能发现一些规律呢?细心的同学也许发现了:越大的内存容量,nR中的n就越大;与此相反,越大的内存容量,X n中的n反而越小。这是为什么呢?我们需要从DRAM的原理讲起。
电容负责存储,充过电时是1,没充过电是0,这就是内存是如何存储数据的。晶体管是个开关,用于选中该电容。Word line被选中,晶体管导通,电容的就和bit line导通,可以读出0和1。正是因为内存每个单元如此简单,才能如此大规模组织起来,形成低价而密度很高的内存颗粒。
这种方式设计简单,但是在充放电时电压和电荷管理有很多麻烦。所以引入了Sense Amplifier。单元就变成了这样:
Sense Amp一般由6个以上的晶体管组成。比较昂贵,但是因为整个bank只有一组Sense Amplifier,所以问题不大,而且好处不少。
看起来简单而优美,一个word line,选中后所有16单元都被Sense Amp缓存,漂亮!慢着,似乎那里不对?是的,这样效率太低,原来1个单元有1个晶体管和一个电容组成,现在平均变成了7个晶体管和1个电容,这和DRAM的低成本设计目标是违背的,必须减少Sense Amp的个数。有没有更好的解决办法呢?
这样好多了,还是16个存贮单元,但是仅仅用了4个sense amp,代价是word line从一个变成了4个。这是减低成本必须付出的代价。现在我们推广成更大的形式:
bank里的每个row共享一个word line,行激活ACT后,该row上的word line高电平,row上的存储内容会被该bank的Sense Amplifier缓存。这个内存单元有32个行地址(row address),32个列,5个列地址(column address)。地址线太多,有没有办法减低呢?如果一次列选中能够送出多个内容就好了:
我们知道,X86的cache line是64 Bytes(感谢发现原文中这个问题),它会一次向内存控制器请求整个cache line。内存控制器发现他们是连续的地址后,会用一次用burst方式读取8个字长,每字长是64个bits。64个bits是内存控制器读取的最小单位。这非常重要,为了完成必要条件,我们必须继续扩展内存单元:
1.R是Rank的缩写,n是多少有个Rank。每个Rank有自己的片选信号:CS。各个rank单独工作,JEDEC标准DDR4可以取1,2,4个rank。
2.X m中的m就是前面讲的每个列的位宽,X4就是每列输出4个bit,X8就是每列输出8个bit。JEDEC标准只有4,8,16,三个选项。
明显的rank越多,用同种内存颗粒,可以做出的内存条容量就大。那么是不是内存颗粒X m,m越大,内存就大呢?恰恰相反,同样容量的内存颗粒,m越小,就可以用更多的内存颗粒拼起来,组成大内存。我们看个例子:
同样4Gb(注意这里是小b)的内存颗粒,为了组成64 Bit的位宽,我们可以用16个X 4颗粒,那么总容量是:
内存颗粒并不能无限变大,因为没有那么多地址线。尽管从DDR开始,JEDEC标准就不停的增加地址线,地址还是有限的,这也是DDR5必须尽早出来的原因之一。地址线的多少决定了可以寻址多大空间,也决定了单颗内存容量的上限。
单根UDIMM/RDIMM的容量最大128GB,这是JEDEC的标准所允许的最大容量。LRDIMM可以达到更大容量。它的原理我们今后再讲。
|