對伺服器CPU而言寄存器ECC功能是否有必要?

xeon等x86伺服器沒有此功能,而sparc等則有。 之前看資料說cpu每10萬小時出一次錯誤,而寄存器ecc也主要是應對這些錯誤的。


這個題干有多義性, 能否提供資料解釋下SPARC中ECC功能是針對哪個模塊的.

目前與處理器相關的ECC技術幾乎都是用在存儲模塊上. 無論是DRAM, SRAM, CPU片內還是片外, 都可以通過每行增加幾個比特的形式完成校驗. 簡單又便宜. 如果題干指在CPU在L1/L2上使用ECC, 這個技術已經被絕大多數架構所採用, 包括SPARC和x86.

此外, 還有一個叫做Register ECC的技術, 是應用於DRAM上的. 意思是某個內存條使用了Register和ECC兩項防錯技術, 穩定性好但是速度低, 主要被伺服器採用. Register模塊用來鎖存匯流排上傳送來的數據, 以防電平不夠高/低導致驅動DRAM錯誤. ECC還是用來校驗一行.

如果題干指"給CPU中的每個寄存器加入ECC校驗", 我就認為這是不可能的功能了.

CPU的工作的確會出錯, 可能性最高的是CPU製造上的瑕疵導致永久/條件/工作壽命錯誤, 其次的可能性是片內SRAM, 第三是受到外來電磁輻射, 最後才是由於片內電磁干擾等因素"意外算錯".

這裡第一項在CPU生產中被DFT過濾掉, 第二項可以用ECC改善, 第三項可以加外包裝抗干擾, 我理解題干說的"給CPU中的每個寄存器加入ECC校驗"是為了解決第四項.

說它不可能的原因是: CPU中每一級流水線都是靠寄存器互連, 總共使用的寄存器數量應該在千萬個以上, 而且遍布晶元各處. 將他們分組, 加上ECC功能, 再加上錯誤處理的控制模塊這個工作量應該比做Scan Chain還大幾倍. 增大很多面積, 僅為了覆蓋發生率在10^-15左右的錯誤, 得不償失.

但是處理器的RAS問題是確實存在的, 比如銀行的CPU在沒有意外事件的前提下, 算錯一個數, 弄錯一筆交易, 或者導致伺服器重啟, 就會導致嚴重損失. 為了解決這種問題, 大型伺服器的CPU一般:

1. 重新執行出問題的指令. 比如IBM和以前的Itanium都可以做到.

2. 交給OS去裁決.

3. 最牛X的, 用Master-checker方案, 直接在拿3塊主板搭一個伺服器, 讓它們永遠算一樣的東西. 投票也好, 裁決也好, 反正不會錯, 誰錯了就換掉誰的板子, 這個過程軟體層不需要知道, 還支持熱插拔. 或者直接做一個3核心的晶元, 當1核用, 讓它們執行一樣的程序, 保證算不錯. 據我所知這個逆天的功能只有IBM在做, 也只有它有能力壟斷大型伺服器市場.


推薦閱讀:

我們開發了一個APP,後端伺服器放在了美國亞馬遜的AWS EC2上。可是在國內訪問速度很慢。有可能是什麼原因造成的?
如何加快互相網路傳輸文件的速度?
網站頻繁間歇性宕機幾分鐘是怎麼回事?
實現一個http伺服器需要怎樣進行?需要哪些知識呢?
實驗室里想搭建生物信息學平台,請問是買塔式伺服器好還是刀片式的好?

TAG:中央處理器CPU | 伺服器 | 穩定性 |