10

选择内存条的必备知识:x16内存条为什么这么慢?2R和1R重要吗?

 3 years ago
source link: https://zhuanlan.zhihu.com/p/388207347
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

选择内存条的必备知识:x16内存条为什么这么慢?2R和1R重要吗?

中央处理器 (CPU)话题下的优秀答主

俗话说,知识改变命运。经常关注本专栏的读者虽说不能迎娶白富美走上人生巅峰,但活学活用学到的知识,来规避一些电脑消费中的陷阱还是可以的。更重要的,是了解其背后运作原理带来的智商上的优越感,可以缓解现实中囊中羞涩的窘迫,实为我等码农提高自尊的不二法门。

闲话休提,今天一早就有知友提问:

v2-38a386150c102db18e7254117b27ab68_720w.jpg

我忽然意识到业内人士认为理所当然的“常识”,并不能为大家所知,甚至对像Linus这样的资深科技博主也是一种刷新三观的新知识。Linus发现的新大陆[1]其实在DDR4内存出现后,就一直存在,相关知识并不是什么“秘密”,只是背后的原理晦涩难懂,对一般公众来说很难理解。

但相关知识却十分重要,因为我们确实能在生活中碰到各种内存:

v2-72e0bbcbe55413160a0369b735bb632c_720w.jpg

图中我们就可以看到三种笔记本内存:1Rx8、2Rx8和1Rx16。这位知友和Linus同学的观察是准确的,x16的内存条确实比x8的内存性能差,我们应该尽量选择x8的内存条。今天我们就来一起探究一下背后的机理,以及进一步探讨一下“x4的内存条会怎么样?““1R和2R的内存条性能有没差异?”这两个有趣的扩展问题。

1Rx8和1Rx16是什么意思?

本专栏很早就介绍过内存条标签的含义:

我们一起来复习一下:

v2-e0146532d358b70af15bef16a63fdcd3_720w.jpg

通过标签,我们知道这个内存条容量是4GB;1Rx16,说明它是1个Rank;x16,是指每个芯片(device)提供16个bit的内容;PC4是指它是DDR4;2400是频率。这是表面的意思,我们还能读出来些什么呢?

读过本专栏内存硬件介绍的网友:

还会知道,数据线有64根(不包含ECC),每个颗粒提供16bit,那么每个rank共需要64/16=4个颗粒。我们从图片中已经可以看到4个颗粒,所以这个SODIMM背面一定是空的。

x16为什么比x8慢?

一句话答案:x16的内存颗粒有2个bank group,而x8的内存颗粒有4个bank group:

我们拿Micron的8Gb内存颗粒[2]举例。同意提供8G bit的容量,它有三种Fuze:

分别是2G x 4;1G x 8;512M x 16。同样容量,厂家提供这三种配置有它们不同的应用场景:

1.x4主要用来搭建大容量内存条(想想为什么)。但因为每个rank都需要16个颗粒,所以信号完整性要求高,一般用在服务器领域。

2.x8是出货量最大的,最通用的配置,一般消费市场大部分就是这种配置。

3.x16因为只需要4个颗粒,应用于嵌入式或者PCB空间受限的场合,消费品市场见于低端产品。

x16和x8/x4的主要区别是Bank Group减半了:

我们来看一下x8的内部框图:

我们看到有4个Group。而x16只有2个group:

Bank Group是DDR4引入的,有助于提高性能。在不同BG读取或者写入数据时,可以部分并发,延迟较少。这里引入两个新的Timings:tCCD_S和tCCD_L。CCD代表“Column to Column Delay”。S是Short,L是Long。每个Group都可以单独工作,一次完整的8n prefetch不需要等待另一个group,所以是短的delay,也就是tCCD_S,一般是4。Group内部,每次都要等待一个更长的时间,也就是tCCD_L,tCCD_L随不同频率各不相同。我们这个例子颗粒中是多少呢?

tCCD_L是T10-T4,是6。比tCCD_S高了50%。

如果我们的数据十分凑巧,都分布在不同的group中,Bank Group会带来巨大的性能提升。最好情况下,2个bank groups和16n prefetch的提升一样,4个bank groups和32n prefetch一样。如果我们的数据刚好都在一个bank group中,频率又十分高,最坏情况,bank group不会带来任何好处。借助Bank interleave,我们的实际情况一般在最好和最坏之间。

x16只有两个bank group,而x8有四个bank group,这带来绝大的性能差异。如这位网友和Linus的结果,某些workload下有20%之多!这么大的性能差异,足以抵消一两代CPU带来的性能提升。

x4和2R呢?

我们再更进一步,扩展一下思考的范围。如果用x4的颗粒呢?我们先看看x4有几个bank group:

也是4个,所以从bank group这里带来的性能是一样的。实际上,x4和x8对生产厂家来说很容易互相转换,而x16是将4个bank group合并成2个的结果。另一方面如前所说,x4需要16个颗粒,带来了信号完整性的调整,往往延迟较高,或者用RDIMM、LRDIMM的形式,反倒不美。如果我们限定两者Timing完全一样,我个人的观点是性能应该差不多。

2个Rank和1个Rank究竟谁快呢?2个Rank意味着需要CS片选切换,带来了性能的负面影响。但由于内存容量增大,带来亲缘性的正面影响。两者相互抵消,我认为两者性能的差异可以忽略。

综上,购买笔电或者台式机内存应该选择x8的内存条,避免x16的内存条。1R还是2R可以不必担心。

其他内存相关文章:

欢迎大家关注本专栏和用微信扫描下方二维码加入微信公众号"UEFIBlog",在那里有最新的文章。

用微信扫描二维码加入UEFIBlog公众号


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK