前年九月,美國維吉尼亞理工大學(Virginia Tech)與Apple、Cisco、Lieber、Mellanox等廠商合作,採用1100臺PowerMac G5構建Terascale Supercluster超級電腦,理論運算效能排名在當時的Top 500中排名第三,僅次於NEC的Earth Simulator及Los Alamos國家實驗室的ASCI Q Alpha Cluster。

不過,這臺超級電腦卻引起了相當大的爭議,因為PowerMac G5並未提供硬體ECC等記憶體偵錯機制。維吉尼亞理工大學宣稱說,他們所採用的演算法可以提供軟體容錯,但據信這對系統效能會有相當程度的負面影響。後來維吉尼亞理工大學採用Apple新推出的Xserve G5取代既有的PowerMac G5,一般外界相信,記憶體ECC功能是決定更換的主要因素。

另外一件值得注意的新聞,則是前年一位美國普林斯頓(Princeton)大學的研究生,發現透過燈光、以能量改變記憶體資料、進而破解Java及.NET虛擬機器的方法。他表示,當處理器和記憶體的速度越來越快,變更位元的所需能量越小,所以這種方法也會越來越有用。當初設計虛擬機器的人,卻都沒有想到這種破解方法。

那麼,這兩則新聞的背後,究竟隱藏了什麼被忽略的事實?答案就是:主記憶體內的資料,並不是絕對的安全。事實上,出錯的機率是很高的,而且高到難以置信的程度。

水漲船高的記憶體容量所造成的問題
近年來,有一個潛在的難題一直困擾電子設備製造商,那就是所謂的「軟錯誤」(Soft Error)。有別於硬體損壞的「硬錯誤」(Hard Error),軟錯誤造成的主因,主要是構成地球低強度背景輻射的帶電粒子所引起,這些帶電粒子有可能來自宇宙射線,也有可能來自大多數材料中的微量放射性元素,這些都可能會干擾利用粒子工作的晶片以及電子設備,尤其是半導體元件。如果帶電粒子撞擊儲存單元導致位元翻轉,就會造成資料錯誤。

另外,由於半導體技術的持續發展,記憶體晶片的密度越來越高,而且為了追求更高的效能,也有更高的運作時脈,換言之,記憶體發生軟錯誤的機率隨著技術的發展而持續成長。根據IBM幾年前的實驗結果顯示,在海平面高度,記憶體因為宇宙射線而發生軟錯誤的錯誤率(SER,Soft Error Rate)約在5000FIT(Failures In Time,10億小時中發生錯誤的次數),但這是數年前的數據,現在的記憶體密度更高,問題可能更大。當然,我們將電腦藏在50呎以下的地底,就可以解決這樣的問題,但是這在現實中是幾乎不可能達成的。

現在,我們就可以計算維吉尼亞理工大學Terascale Supercluster超級電腦發生軟錯誤的機率。根據Infineon的研究數據,目前256Mbit記憶體顆粒的SER約為500FIT,在最差狀況下,約為900FIT。每臺PowerMac G5都安裝4GB主記憶體,皆為512Mbit顆粒,代表每臺電腦有64顆記憶體顆粒,1100臺電腦就是70400顆記憶體。我們將512Mbit顆粒的SER估計為1000FIT,就可以推估出每小時會發生0.0704次的軟錯誤,相當於每14.2小時就發生一次,這不可謂不驚人。對超級電腦如此,那對終年不關機、持續運作的伺服器而言,也是一體適用。

現有ECC的不足
那麼,會有人這樣問:早期系統就開始支援Parity Check,而現在不少系統都有支援記憶體ECC機制,那不就沒問題了嗎?很遺憾,答案是否定的。除了記憶體密度越來越高,記憶體的資料匯流排寬度也越來越寬,但是既有的ECC演算法多半是Distance 4的Extended Hamming Code,可以修正1位元錯誤、偵測2位元錯誤,如果發生多位元的錯誤,ECC就力有未逮。

IBM認為目前採用ECC,效果還比十年前的Parity Check還糟。當然,也有不少學者和廠商研究出改良的ECC演算法(如Compaq所提出的Bit Steering),不過,這些方法多半都遇到不易實作、成本過高的問題,也會對記憶體的效能造成不利的影響。近年來,由於x86伺服器的逐漸普及,更讓問題日趨嚴重,因為x86伺服器都以低成本作為訴求,很難導入昔日大型主機所使用的昂貴手段,加上無遠弗屆的網路成為主要的運算環境,企業所使用的伺服器幾乎永不停機,更讓問題越趨複雜。

實際測試的經驗
廠商的說詞是一回事,實際的經驗才是重點。iThome採用SPEC CPU 2000測試伺服器及處理器,已經有近兩年的時間。由於SPEC CPU的測試過程非常考驗記憶體的可靠性,所以在過去,我們就遭遇過無數在高容量環境下,因記憶體不穩定,導致測試失敗的案例,這次測試IBM x366亦同,毫無例外。

本次測試用的x366裝滿了16條DDR2-400記憶體模組,總容量高達16GB,出廠時預設採用Redundant Bit Steering(RBS)模式,也就是等於啟動了ChipKill,SPEC CPU 2000測試過程就相當的正常。如果關閉,選擇High Performance Memory Array(HPMA)模式,SPEC CPU 2000仍可正常編譯出最佳化執行檔,但測試的失敗率就非常高,雖然HPMA的效能比較好,在IBM的x366原廠技術紅皮書中,也建議使用者盡量不要使用HPMA模式。同樣的情況,也曾出現在安裝高容量記憶體的Opteron系統上。

記憶體資料的可靠性,絕對不能輕忽
事實上,記憶體資料的可靠性早已成為伺服器的技術顯學,昔日Digital的Alpha EV-7(21364)和Compaq F8晶片組,分別把記憶體系統實作成RAID 4/5的型式,除了既有的4條記憶體通道外,增加第5條通道做Parity。另外,部分伺服器廠商在中高階x86伺服器實作記憶體鏡射備分機制(Memory Mirroring),如果記憶體發生損毀或錯誤就可直接切換、熱抽換損壞的記憶體模組,維持伺服器的正常運作,提供更好的資料安全性。

為何廠商都會如此重視記憶體資料可靠性?答案很簡單,因為這問題的確越來越嚴重,而且難以預防及偵測(傳統的記憶體測試程式很難去偵測出可能發生的軟錯誤),就算問題發生了,依然難以察覺。讀者可以想像一個極端的狀況:假設在銀行的交易系統中,一個由64位元長整數所表示的巨額款項,發生正負號顛倒,會是多麼嚴重的事情?

從IBM針對PC伺服器應用而發表ChipKill技術以來,記憶體安全性的議題已經逐漸被伺服器廠商所注意,但是卻一直沒有引起市場足夠的重視。對於服務永不停頓的企業網路伺服器而言,記憶體的資料安全性其實非常的重要,尤其對低成本的x86伺服器而言,更是如此。在未來,相信除了ChipKill以外,會有以雨後春筍之勢而誕生的新技術,替企業伺服器提供更高的可靠性及穩定性。文⊙劉人豪

熱門新聞

Advertisement