04.01 服務器最大內存是多少?制約因素有些什麼呢?

服務器最大內存是多少?制約因素有些什麼呢?

如果你曾經和服務器廠商打過交道,就會發現他們對於內存容量的渴求是極其貪婪的。是啊,電信、證券、量化這些不差錢的主顧在嘗試了內存數據庫百倍速度的高潮後,已經不能夠回頭了。畢竟0.01秒的響應提升,就意味著白花花的銀子。當這個壓力傳導給提供機器的服務器廠商的時候,他們的內心一定是甜蜜又伴隨著一絲酸楚的。24TB這個數字,框定了利潤的上限,這是更多的金錢所不能突破的。

這帶來一個根本性的問題,單機服務器最大內存的極限是怎麼確定的?它的制約因素有哪些?為了簡化討論範圍,我們限定在佔據服務器市場98%以上的X86服務器,並假設不受成本的約束。我們從CPU內核和操作系統、以及存儲子系統兩方面來尋找答案。

CPU內核和操作系統

操作系統和CPU內核都支持64位地址空間,它能夠訪問的地址空間是

2^64=16384 PB

好大的空間,似乎永遠也用不完。是不是這個是內存容量的極限呢?實際上即使在CPU內核中還有一個因子,限制了CPU和操作系統的尋址空間,那就是bitwidth。它決定了頁錶轉換的地址長度,它現在最大是48位(我印象裡),它可以從寄存器裡面讀出來,越新和服務器CPU,這個值越大。那麼新的地址空間最大是多少呢?

2^48=256 TB

256TB,小了不少,是不是這就是內存容量的極限了呢?實際上並不是。

內存子系統

現代計算機系統的內存都由CPU內置的內存控制器來管理,為了尋找內存的極限,我們把目光投入到志強中的戰鬥機,E7服務器上。E7面向對高可靠性和高可擴展性需求強烈的用戶,當然價格也十分感人。高可靠性說的是RAS,高可擴展性是說可以擴展為4路,8路,甚至16路服務器。所謂n路,通俗的說就是有n個物理CPU。

16路服務器十分十分罕見,部分原因在於從8路擴展為16路後,保證cache一致性所發的snoop包會降低性能,在某些情況下得不償失。我們這裡就略過。8路服務器作為主流最高端服務器,它的內存最大能夠達到多少呢?

我們先來看一下它的內存子系統:

服務器最大內存是多少?制約因素有些什麼呢?

E7 CPU後面並不直接插內存條DIMM,這點和E5不一樣。內存條插在一個叫做SMB(Scalable Memory Buffer)的芯片後面。每個SMB支持兩個Channel,每個Channel後面可以插3根DIMM(圖裡是兩個,實際可插三個)。SMB和CPU直接通過一種叫做SMI Link(Scalable Memory Interconnect)的總線連接,一個CPU可以連接四個SMB。

框圖不夠生動,我們來看個實際的例子:

服務器最大內存是多少?制約因素有些什麼呢?

這個板子叫做Memory Riser,紅框的部分就是SMB,有兩個。藍框的部分是內存插槽。大家數一下,可以看到一個SMB後面可以插6根DIMM,分別屬於兩個Channel。一個照的比較好的:

服務器最大內存是多少?制約因素有些什麼呢?

有的同學要問了,不是說好每個CPU後面接4個SMB嗎?怎麼才兩個?彆著急,因為每個CPU後面可以接兩個Memory Riser:

服務器最大內存是多少?制約因素有些什麼呢?

4路E7服務器,可以插8個Memory Riser

服務器最大內存是多少?制約因素有些什麼呢?

插滿8個Memory Riser

好了,我們可以計算一下了,8路可以插16個Memory Riser,每個Memory Riser可以插12個DIMM:

16 X 12 = 192根

共可以插192根DIMM。現在焦點落在單根DIMM的容量上了。LRDIMM往往可以支持更大的內存容量(原理我以後再講),目前據我所知,最大的LRDIMM容量是128GB。所以8路最大內存容量為:

192 X 128 = 24576 GB = 24 TB

現在你知道前面的24 TB哪裡來的了吧!

結論

服務器最大支持的內存數量不在於是64位還是Bitwidth,而在於能夠插多少內存條。如果是16路E7,最大內存可以達到48TB。E5系列內存相比E7就差一大截了。

DIMM形式封裝的傲騰內存在不遠的將來也許會打破這種限制,傲騰DIMM內存可以達到2T以上每根,到那時也許bitwidth必須要加寬了。錢多的主顧紛紛表示,真香!


分享到:


相關文章: