谷歌、Facebook頻繁發(fā)現(xiàn)CPU內(nèi)核不可靠,出現(xiàn)無(wú)法預(yù)測(cè)計(jì)算錯(cuò)誤
最近谷歌和 Facebook 兩大公司頻繁檢測(cè)到 CPU 在一些情況下會(huì)以無(wú)法預(yù)測(cè)的方式出現(xiàn)計(jì)算錯(cuò)誤。
CPU 一直都不是完全可靠的,自問(wèn)世以來(lái)就一直存在出現(xiàn)錯(cuò)誤的風(fēng)險(xiǎn)。這些風(fēng)險(xiǎn)不僅來(lái)源于設(shè)計(jì)上的一些疏忽,也源于環(huán)境條件和會(huì)產(chǎn)生故障的物理系統(tǒng)。但這些錯(cuò)誤往往很少見(jiàn),如果系統(tǒng)按預(yù)期運(yùn)行,則只有極少部分計(jì)算會(huì)出現(xiàn)錯(cuò)誤。大多數(shù)情況下,計(jì)算機(jī)芯片被視為值得信賴(lài)的。
然而,最近谷歌和 Facebook 兩大公司頻繁檢測(cè)到 CPU 出現(xiàn)一些「不當(dāng)行為」,以至于他們正在敦促技術(shù)合作公司找到找出這些錯(cuò)誤并補(bǔ)救的方法。
谷歌工程師 Peter Hochschild 在近日剛剛舉辦的 HotOS 2021 上說(shuō)道:「生產(chǎn)團(tuán)隊(duì)抱怨『機(jī)器破壞數(shù)據(jù)』的情況越來(lái)越多。」他表示:「這些機(jī)器被指控破壞了多個(gè)不同的、穩(wěn)定的、調(diào)試良好的大型應(yīng)用程序。機(jī)器都被各個(gè)獨(dú)立團(tuán)隊(duì)反復(fù)指責(zé),并且這些指控是可信的。但傳統(tǒng)的診斷方法沒(méi)有發(fā)現(xiàn)它們有任何問(wèn)題?!?/p>
開(kāi)發(fā)者們更深入地查看了所涉及的代碼和來(lái)自相關(guān)機(jī)器的操作遙測(cè),谷歌工程師開(kāi)始懷疑是硬件存在問(wèn)題。他們調(diào)查發(fā)現(xiàn)硬件錯(cuò)誤的發(fā)生率高于預(yù)期,這些問(wèn)題在安裝后很長(zhǎng)時(shí)間內(nèi)偶爾會(huì)出現(xiàn),并且出現(xiàn)在特定的單個(gè) CPU 內(nèi)核上,而不是整個(gè)芯片或一系列部件上。
谷歌的研究人員檢查了這些靜默損壞執(zhí)行錯(cuò)誤 (corrupt execution error,CEE) 后得出結(jié)論:這些錯(cuò)誤應(yīng)該歸咎于「易變的內(nèi)核(mercurial core)」——CPU 在一些情況下偶爾會(huì)以一種無(wú)法預(yù)測(cè)的方式出現(xiàn)計(jì)算錯(cuò)誤。
這些錯(cuò)誤不是因?yàn)橄?M1 芯片一樣的架構(gòu)設(shè)計(jì)失誤,而且在制造測(cè)試期間也沒(méi)有檢測(cè)到這些問(wèn)題。相反,谷歌工程師認(rèn)為,之所以會(huì)出現(xiàn)錯(cuò)誤,是因?yàn)槲覀円呀?jīng)將半導(dǎo)體制造推向了故障變得更加頻繁的地步,而我們?nèi)狈μ崆白R(shí)別故障的工具。
在一篇名為《Cores that don’t count》的論文中,Hochschild 及其同事列舉了計(jì)算機(jī)內(nèi)核的不可靠性現(xiàn)在才受到關(guān)注的幾個(gè)原因,包括大型服務(wù)器機(jī)群能夠讓罕見(jiàn)問(wèn)題更加明顯、開(kāi)發(fā)者們近來(lái)才更加關(guān)注整體可靠性和降低軟件錯(cuò)誤率的相關(guān)改進(jìn)。
論文地址:https://sigops.org/s/conferences/hotos/2021/papers/hotos21-s01-hochschild.pdf
但該研究表示有一個(gè)更根本的原因:「越來(lái)越小的特征尺寸越來(lái)越接近 CMOS 縮放的極限,并且架構(gòu)設(shè)計(jì)的復(fù)雜性也在不斷增加。」并指出現(xiàn)有的驗(yàn)證方法并不適用于發(fā)現(xiàn)偶爾出現(xiàn)的缺陷或部署后物理?yè)p壞的結(jié)果。
我們習(xí)慣于將計(jì)算機(jī)視為故障停止裝置,尤其是執(zhí)行指令的內(nèi)核,而大多數(shù)系統(tǒng)軟件都依賴(lài)于這種假設(shè)。隨著芯片制造朝著更小的特征尺寸和更精細(xì)的計(jì)算結(jié)構(gòu)發(fā)展,并且隨著引入新的復(fù)雜指令集以提高性能,我們發(fā)現(xiàn)了在制造測(cè)試期間沒(méi)有檢測(cè)到的計(jì)算錯(cuò)誤。這些缺陷不能總是通過(guò)微代碼更新等技術(shù)來(lái)緩解,并且這些缺陷可能與處理器內(nèi)的特定組件有關(guān),允許小型代碼更改可能會(huì)影響可靠性。更糟糕的是,這些錯(cuò)誤通常是悄無(wú)聲息的——唯一的變現(xiàn)就是出現(xiàn)計(jì)算錯(cuò)誤。
這種「易變」的內(nèi)核極為罕見(jiàn),但在大量服務(wù)器中,我們則可以觀察到它們?cè)斐傻闹袛?,甚至足以將它們視為一個(gè)明顯的問(wèn)題。這意味著需要硬件設(shè)計(jì)人員、處理器供應(yīng)商和系統(tǒng)軟件架構(gòu)師之間合作解決這種缺陷問(wèn)題。
此外,谷歌的研究者提出了一些緩解該問(wèn)題的方法,例如識(shí)別和去除「易變」內(nèi)核。
「易變」內(nèi)核的識(shí)別具有挑戰(zhàn)性,因?yàn)椤敢鬃儭箖?nèi)核可能導(dǎo)致故障和數(shù)據(jù)損壞、而不當(dāng)?shù)淖R(shí)別可能會(huì)導(dǎo)致良好內(nèi)核的浪費(fèi),并且識(shí)別過(guò)程的成本也很高。該研究對(duì)「易變」內(nèi)核的識(shí)別過(guò)程進(jìn)行了分類(lèi),包括:
自動(dòng)化與人工;
部署前與部署后;
線(xiàn)下 vs. 線(xiàn)上;
基礎(chǔ)設(shè)施級(jí)別與應(yīng)用級(jí)別。
不過(guò),識(shí)別和去除「易變」內(nèi)核并不總是能避免影響應(yīng)用程序,并且識(shí)別可能不是完美的。因此谷歌的研究者提議設(shè)計(jì)能夠容忍 CEE 且沒(méi)有過(guò)多開(kāi)銷(xiāo)的軟件?這將從以下幾點(diǎn)出發(fā):
對(duì)特定于應(yīng)用的機(jī)制施加一些負(fù)擔(dān),應(yīng)用「端到端 Argument」設(shè)計(jì)思想,這種思想指出正確性通常最好是在端點(diǎn)而非較低級(jí)別的基礎(chǔ)設(shè)施中進(jìn)行檢查。
系統(tǒng)應(yīng)該支持高效的檢查點(diǎn),通過(guò)在不同的內(nèi)核上重新啟動(dòng),以將失敗的計(jì)算重新恢復(fù)。
使用面向應(yīng)用的成本高效檢測(cè)方法來(lái)決定是繼續(xù)通過(guò)檢查點(diǎn)還是重試。例如,在提交之前計(jì)算數(shù)據(jù)庫(kù)記錄的不變量以確認(rèn)機(jī)器是否損壞了數(shù)據(jù)。
Facebook 也發(fā)現(xiàn)了同樣的問(wèn)題
無(wú)獨(dú)有偶,F(xiàn)acebook 也注意到了這些錯(cuò)誤。今年 2 月,F(xiàn)acebook 發(fā)表了一篇名為《 Silent Data Corruptions at Scale 》的論文,論文中寫(xiě)到,與之前觀察到的數(shù)據(jù)中心相比,靜默數(shù)據(jù)損壞(SDC)正在成為一種更加普遍的現(xiàn)象。SDC 不能通過(guò)中央處理單元(CPU)中的錯(cuò)誤報(bào)告機(jī)制捕獲,因此無(wú)法在硬件級(jí)別上進(jìn)行跟蹤。但是,數(shù)據(jù)損壞在整個(gè)堆棧中傳播,并表現(xiàn)為應(yīng)用程序級(jí)問(wèn)題。這些類(lèi)型的錯(cuò)誤可能導(dǎo)致數(shù)據(jù)丟失,并且可能需要數(shù)月的調(diào)試工程時(shí)間。
在本文中,研究者描述了導(dǎo)致 SDC 的硅制造過(guò)程中常見(jiàn)的缺陷類(lèi)型。討論了一個(gè)數(shù)據(jù)中心應(yīng)用程序中靜默數(shù)據(jù)損壞的真實(shí)示例。并提供了一個(gè)調(diào)試案例,以通過(guò)案例研究來(lái)跟蹤 CPU 中的根本原因和對(duì)錯(cuò)誤指令進(jìn)行分類(lèi),以舉例說(shuō)明如何調(diào)試此類(lèi)錯(cuò)誤。研究者提供了緩解措施的高級(jí)概述,以減少大型生產(chǎn)團(tuán)隊(duì)中無(wú)提示數(shù)據(jù)損壞的風(fēng)險(xiǎn)。
論文雖然提出了緩解策略,但沒(méi)有解決根本原因。
論文地址:https://engineering.fb.com/2021/02/23/data-infrastructure/silent-data-corruption/
圖 2 以圖形形式顯示了數(shù)據(jù)庫(kù)的損壞和鏈接。
圖 3 提供了一個(gè)高級(jí)調(diào)試流程,用于追蹤導(dǎo)致根本原因的靜默錯(cuò)誤。損壞也會(huì)影響非零的計(jì)算。例如,在被識(shí)別為有缺陷的機(jī)器上執(zhí)行了以下不正確的計(jì)算。研究發(fā)現(xiàn)計(jì)算會(huì)影響特定數(shù)據(jù)值的正負(fù)冪,并且在某些情況下,結(jié)果應(yīng)該為零時(shí)卻非零。以不同的精度獲得了不正確的值。
錯(cuò)誤示例
在谷歌的研究人員看來(lái),F(xiàn)acebook 發(fā)現(xiàn)了靜默錯(cuò)誤,但是找出錯(cuò)誤原因并解決它,還需要進(jìn)一步的工作。
不正常的內(nèi)核帶來(lái)的風(fēng)險(xiǎn)不僅包括崩潰(現(xiàn)有的錯(cuò)誤處理故障停止模型可以適應(yīng)這種情況),還涉及錯(cuò)誤計(jì)算和數(shù)據(jù)丟失,這些問(wèn)題可能被忽視,帶來(lái)風(fēng)險(xiǎn)。
Hochschild 講述了一個(gè)例子,「我們的一個(gè) mercurial cores 破壞了加密,只有它才能解密自己錯(cuò)誤加密的內(nèi)容?!构雀璧难芯咳藛T以「商業(yè)原因」拒絕透露其數(shù)據(jù)中心檢測(cè)到的 CEE 率,但他們提供了一個(gè)大致的數(shù)字,即大約是每幾千臺(tái)機(jī)器有幾個(gè) mercurial cores,與 Facebook 報(bào)告的比率類(lèi)似。
理想情況下,谷歌希望看到自動(dòng)識(shí)別 mercurial cores 的方法,并建議在芯片的整個(gè)生產(chǎn)周期中進(jìn)行 CPU 測(cè)試,而不是僅僅依賴(lài)于部署前的老化測(cè)試。目前,谷歌依賴(lài)于人工驅(qū)動(dòng)的內(nèi)核完整性審查,但這種方式并不是特別準(zhǔn)確,識(shí)別可疑內(nèi)核的工具和技術(shù)仍在進(jìn)行中。
谷歌的研究人員解釋說(shuō),「根據(jù)我們最近的經(jīng)驗(yàn),通過(guò)人工驅(qū)動(dòng)審查發(fā)現(xiàn)的可疑性錯(cuò)誤,大約有一半是被證實(shí)的,我們必須通過(guò)進(jìn)一步的測(cè)試 (通常是在首先開(kāi)發(fā)一種新的自動(dòng)測(cè)試之后) 來(lái)提取『證據(jù)』」。另一半是虛假指控和有限的可復(fù)現(xiàn)性。
參考鏈接:https://www.theregister.com/2021/06/04/google_chip_flaws/
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。