本文來自微信公眾號:開發(fā)內(nèi)功修煉 (ID:kfngxl),作者:張彥飛 allen
大家好,我是飛哥!
之前有位讀者問我為什么服務(wù)器內(nèi)存上有這么多的顆粒,今天我專門就這個(gè)話題成文一篇作為回復(fù)。
各位從事服務(wù)器端開發(fā)的同學(xué)天天都在開發(fā)代碼,代碼都需要內(nèi)存。確實(shí)了解一下服務(wù)器內(nèi)存硬件是挺有有必要的。
所以我特地找來了一個(gè)服務(wù)器內(nèi)存條來。下圖是一個(gè) 32 GB 服務(wù)器內(nèi)存條的正面和反面圖。
可見服務(wù)器內(nèi)存上有很多的黑色顆粒,相比下面的臺(tái)式機(jī)內(nèi)存顆粒要多很多。
今天我們就專門寫一篇文章來給大家解釋為什么服務(wù)器內(nèi)存中顆粒更多的原因。
原因 1:服務(wù)器內(nèi)存需要 ECC 功能
在開篇所示的內(nèi)存正面有著一串字符串標(biāo)識 32 GB 2R\*4 PC4-2666V-RB2-12-DB1。
在這段標(biāo)識中,第一段的 32 GB,是內(nèi)存的容量大小。第二段后面的 2R*4 我們在《理解內(nèi)存的 Rank、位寬以及內(nèi)存顆粒內(nèi)部結(jié)構(gòu)》一篇文章中也介紹過了,2R:表示該內(nèi)存有 2 個(gè) Rank,*4:表示每個(gè)內(nèi)存顆粒的位寬是 4 bit。
不過按照這個(gè)位寬參數(shù),每個(gè) Rank 只需要 16 個(gè)內(nèi)存顆粒就夠了,2 個(gè) Rank 需要 32 個(gè) Chip 內(nèi)存顆粒就夠了。
而我們上圖中的內(nèi)存正面有 19 個(gè) 內(nèi)存顆粒,背面有 18 個(gè)內(nèi)存顆粒。19 + 18 = 37 個(gè)黑色顆粒。
這是因?yàn)榉?wù)器區(qū)別于普通的臺(tái)式機(jī)電腦,需要 ECC 糾錯(cuò)功能,以及 RDIMM / LRDIMM 在內(nèi)存顆粒中加入寄存器模塊,使得內(nèi)存的頻率更高(頻率高的內(nèi)存性能就會(huì)更好),容量更大。
DRAM 內(nèi)存是一種易失性的存儲(chǔ),它是不能 100% 保證存儲(chǔ)的數(shù)據(jù)不發(fā)生變化的。一根 8 GB 的內(nèi)存條平均大約每小時(shí)會(huì)出現(xiàn) 1 - 5 個(gè)比特翻轉(zhuǎn)錯(cuò)誤。
我們個(gè)人在辦公的時(shí)候,由于內(nèi)存主要都用來處理圖片、視頻等數(shù)據(jù)。即使內(nèi)存出現(xiàn)了比特翻轉(zhuǎn),可能影響的只是一個(gè)像素值,沒有太大的影響,也很難感覺出來。
在服務(wù)器應(yīng)用中,處理的一般都是非常重要的計(jì)算,可能是一些推薦計(jì)算,也可能是一筆訂單交易,對出錯(cuò)的容忍度是很低的。另外一臺(tái)服務(wù)器經(jīng)常是連續(xù)要運(yùn)行幾個(gè)月甚至是幾年。因此總的來說,服務(wù)器對穩(wěn)定性的要求極高,不允許比特翻轉(zhuǎn)錯(cuò)誤發(fā)生。
ECC 是一種內(nèi)存專用的技術(shù)。它的英文全稱是 “Error Checking and Correcting”,對應(yīng)的中文名稱就叫做“錯(cuò)誤檢查和糾正”。從它的名稱中我們可以看出,ECC 不但能發(fā)現(xiàn)內(nèi)存中的錯(cuò)誤,而且還可以進(jìn)行糾正。
在實(shí)現(xiàn)上,ECC 內(nèi)存會(huì)板上額外再添加內(nèi)存顆粒來專門負(fù)責(zé)檢查錯(cuò)誤并糾正錯(cuò)誤。
帶 ECC 功能的內(nèi)存,需要為 CPU 同時(shí)提供 72 位的讀寫,其中 64 位是數(shù)據(jù),另外 8 位用于 ECC 校驗(yàn)。
我們開篇提到的內(nèi)存的顆粒。
位寬是 4,為了提供 8 位的 ECC 校驗(yàn)數(shù)據(jù),每個(gè) Rank 需要額外 2 個(gè)內(nèi)存顆粒來存儲(chǔ) ECC 數(shù)據(jù)。所以每個(gè) Rank 總共需要 16 + 2 = 18 個(gè)內(nèi)存顆粒。
Rank 數(shù)量是 2,所以總共需要 18 * 2 = 36 個(gè)內(nèi)存顆粒來存儲(chǔ)用戶數(shù)據(jù)以及校驗(yàn)位
原因 2:RDIMM 地址信號緩存
上一小節(jié)我們對開篇內(nèi)存計(jì)算其包含 ECC 功能后總共需要 36 個(gè)內(nèi)存顆粒,而在圖片中我們實(shí)際看到有 37 個(gè)黑色顆粒。
這個(gè)多出來的一個(gè)顆粒是做地址等控制信號緩存的。
服務(wù)器一般采用的是 RDIMM(帶寄存器雙列直插模塊)或者 LRDIMM(低負(fù)載雙列直插內(nèi)存模塊)。無論是 RDIMM 還是 LRDIMM,都比普通的內(nèi)存要多一個(gè)帶寄存器的時(shí)鐘驅(qū)動(dòng)器(RCD)模塊。
RCD 從主機(jī)存儲(chǔ)器控制器獲取命令地址總線、控制信號和時(shí)鐘信號,然后將這些信號流扇出到 DIMM 上的 DRAM。所有的信號通過 RCD 進(jìn)入 RDIMM 后都會(huì)重新計(jì)時(shí)和清理。
從開篇的圖中,我們確實(shí)也找到了這個(gè)模塊。
有了這個(gè)模塊的支持,能顯著降低信號干擾,進(jìn)而大幅提升穩(wěn)定性。這樣單條內(nèi)存的容量可以做到更大一些。
原因 3:LRDIMM 數(shù)據(jù)信號緩存
另外還有就是對于大內(nèi)存的服務(wù)器,可能 RDIMM 提供的單條內(nèi)存容量還不夠,還需要更大。
LRDIMM 相比 RDIMM 在引入寄存緩存器 RCD 的基礎(chǔ)上,又進(jìn)一步引入了數(shù)據(jù)緩沖器 DB(Data Buffer)。
引入 DB 數(shù)據(jù)緩沖器作用是緩沖來自內(nèi)存控制器或內(nèi)存顆粒的數(shù)據(jù)信號。實(shí)現(xiàn)了對地址、控制信號、數(shù)據(jù)的全緩沖。這種內(nèi)存價(jià)格更貴,但可以支持更大容量。
如下是一個(gè) LRDIMM 的實(shí)物圖。
簡單總結(jié)一下,服務(wù)器內(nèi)存硬件上顆粒數(shù)量更多的原因有 3 個(gè)
需要 ECC 功能,需要比普通內(nèi)存多 1/8 的顆粒數(shù)來支持 ECC
需要 RCD 模塊降低地址等控制信號干擾影響,將單條容量做到更大
需要 DB 模塊降低數(shù)據(jù)信號干擾影響,進(jìn)一步將單條容量提高
想深入了解 RDIMM 和 LRDIMM 原理的話,我推薦大家一個(gè) youtube 上的視頻,我覺得講解的非常清楚。視頻地址:https://www.youtube.com/ watch?app=desktop&v=opR0pARpieg
廣告聲明:文內(nèi)含有的對外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時(shí)間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。