大家好,我是飞哥!
之前有位读者问我为什么服务器内存上有这么多的颗粒,今天我专门就这个话题成文一篇作为回复。
各位从事服务器端开发的同学天天都在开发代码,代码都需要内存。确实了解一下服务器内存硬件是挺有有必要的。
所以我特地找来了一个服务器内存条来。下图是一个 32 GB 服务器内存条的正面和反面图。
图片
图片
可见服务器内存上有很多的黑色颗粒,相比下面的台式机内存颗粒要多很多。
图片
今天我们就专门写一篇文章来给大家解释为什么服务器内存中颗粒更多的原因。
原因1:服务器内存需要 ECC 功能
在开篇所示的内存正面有着一串字符串标识32 GB 2R\*4 PC4-2666V-RB2-12-DB1。
在这段标识中,第一段的 32 GB,是内存的容量大小。2R:表示该内存有 2 个 Rank,*4:表示每个内存颗粒的位宽是 4 bit。
不过按照这个位宽参数,每个 Rank 只需要 16 个内存颗粒就够了,2 个 Rank 需要 32 个 Chip 内存颗粒就够了。
而我们上图中的内存正面有 19 个 内存颗粒,背面有 18 个内存颗粒。19 + 18 = 37 个黑色颗粒。
这是因为服务器区别于普通的台式机电脑,需要 ECC 纠错功能,以及 RDIMM/LRDIMM 在内存颗粒中加入寄存器模块,使得内存的频率更高(频率高的内存性能就会更好),容量更大。
DRAM 内存是一种易失性的存储,它是不能 100% 保证存储的数据不发生变化的。一根 8 GB 的内存条平均大约每小时会出现 1 - 5 个比特翻转错误。
我们个人在办公的时候,由于内存主要都用来处理图片、视频等数据。即使内存出现了比特翻转,可能影响的只是一个像素值,没有太大的影响,也很难感觉出来。
在服务器应用中,处理的一般都是非常重要的计算,可能是一些推荐计算,也可能是一笔订单交易,对出错的容忍度是很低的。另外一台服务器经常是连续要运行几个月甚至是几年。因此总的来说,服务器对稳定性的要求极高,不允许比特翻转错误发生。
ECC 是一种内存专用的技术。它的英文全称是 “Error Checking and Correcting”,对应的中文名称就叫做“错误检查和纠正”。从它的名称中我们可以看出,ECC 不但能发现内存中的错误,而且还可以进行纠正。
在实现上,ECC 内存会板上额外再添加内存颗粒来专门负责检查错误并纠正错误。