自從 1 月 Google Project Zero 團隊揭露 Intel CPU 的 Meltdown 缺陷,以及所有現(xiàn)代 CPU 都有的 Spectre 缺陷以后,影響面之廣人人自危。由于是硬件缺陷,各大廠商也只能努力推出修補更新加以彌補。幾個月過去了,相關資訊似乎不再常見,然而真的沒問題了嗎?解決方案都很理想嗎?該如何精準評量效能的降低程度呢?
目前各系統(tǒng)的安全更新主要是從系統(tǒng)軟件面去做處理,理論上會讓程序有 2% 到 30% 不等的降速狀況。那實際影響到底有多大?知名網(wǎng)絡串流影片公司 Netflix 表示,針對 Meltdown 的 Linux 安全修補預估讓串流效能降低了 0.1%~6% 之間,而這還只是做了 4 個 Meltdown patch 修補的其中之一而已。
Netflix 的經(jīng)驗與評估
布倫丹·格雷格(Brendan Gregg)是 Netflix 工程師,同時也是 dTrace 專家、硬盤領域知名人士,他制定了一個“微標竿”(microbenchmark)來評估針對 Meltdown CPU 設計缺陷的 Linux 核心分頁表隔離(KPTI)修補,并提出精準可管理的執(zhí)行效能下降預測,格雷格表示他的工作以下列 5 個因素來評估修補所產(chǎn)生的開銷(overhead):
系統(tǒng)呼叫率(Syscall rate) :數(shù)量多到某種程度才會有可觀的明顯影響,一顆 CPU 每秒有 5 萬個系統(tǒng)呼叫的情況下,額外開銷可能有 2%,伴隨著系統(tǒng)呼叫率的增加而這個數(shù)字又會再上升。在 Netflix,除了資料庫以外,高系統(tǒng)呼叫率在云端中不常見。
前后文切換(Context switches) :這個增加的額外開銷類似系統(tǒng)呼叫率的部分,格雷格認為前后文切換率可以簡單地添加到系統(tǒng)呼叫率里用于后續(xù)的評估。
分頁錯誤率(Page fault rate) :錯誤率高時,還會增加一點額外開銷。
存儲器工作集大小(熱資料) :Working set size(hot data),超過 10MB 資料量存取,會因為 TLB(CPU 的頁表快取)沖洗,導致額外開銷。這可以將 1% 的開銷(系統(tǒng)呼叫循環(huán))變成 7%。這個很重的額外開銷可以透過兩個方法降低:1. Linux 4.14 開始的 pcid;2. 使用巨大的分頁。
快取存取類型(Cache access pattern) :有些存取類型從快取良好到快取不良轉變時,會讓額外開銷遽增,最糟糕可能會額外增加 10% 的額外開銷,例如 7% 的開銷增加到 17%。
格雷格的結論是,在某些情況下,軟件修補所增加的開銷,高達 800%,但如果對系統(tǒng)做精細的調(diào)校,對效能的影響不至于讓人那么無法接受。Gregg 大幅降低修補帶來的新程序碼帶給 Linux 的額外開銷,Netflix 使用的是 AWS 基礎設施 ,格雷格的結論是:基于系統(tǒng)呼叫率,KPTI 的開銷在 0.1%到 6% 之間,他有自信把開銷降到 2%。
他還考慮到他的雇主 Netflix 使用的 AWS 基礎設施的影響,并得出結論“由于我們的系統(tǒng)調(diào)用率,KPTI 的開銷在 0.1% 到 6% 之間,我預計我們會把它降低到低于 2% 調(diào)整”,這個成績雖然不錯,格雷格還沒有估計進修補對 hypervisors 跟 microcode 對效能損失的影響。
使用 Linux 服務器的業(yè)者(包含一般使用者)可以針對電腦的使用情境重編核心自行調(diào)整,降低修補所帶來的效能下降問題,但對于廣大一般 Windows、MacOS X 的電腦使用者而言,就沒這么幸運了,沒有漏洞的 CPU 才是釜底抽薪的方案 。
Intel 提出分區(qū)系統(tǒng)的緩解修補
Intel 在這次的 CPU 漏洞風暴可以說是跌個滿頭包,不斷被動的應付。終于在 3 月 15 日上午,Intel 宣布針對 Meltdown 和 Specter v2 漏洞,提出分區(qū)系統(tǒng)的硬件緩解(mitigations)修補,將會實做在 Xeon server/HEDT platform 下一代的 Cascade Lake,以及第 8 代酷睿(Core)處理器里。
要特別注意的是,Intel 在硬件做出來的改變只能緩解 Meltdown(Intel 稱為“variant 3”)和 Specter v2,是透過新的分區(qū)系統(tǒng)減輕了漏洞,同時改善了行程(process)和特權級別(privilege-level)分離,類似“防護墻”的做法。
Intel 2018 的 Meltdown 與 Spectre 緩解計劃如下:
Meltdown :以硬件解決
Spectre variant 1 :繞過邊界檢查(bounds check bypass)的漏洞,目前只能以軟件解決
Spectre variant 2 :分支目標注入(branch target injection)漏洞,以硬件解決
很不幸的是 Spectre variant 1 目前還只能靠各軟件開發(fā)人員來解決,而 Spectre 最被大家擔心的其實一直都是 v1,整個產(chǎn)業(yè)的研究人員對 v1 還沒有深度的理解,不知如何處理,好在 Specter v1 只能用于攻擊同級的行程而無法攻擊管理級的行程,也就是說黑客能透過程序穿透進一般使用者等級的程序與資料,而無法穿透進更安全的系統(tǒng)管理層級。
雖然是不全面的緩解,但有總比沒有好。此外,Intel 已經(jīng)針對過去 5 年發(fā)布的所有 CPU 產(chǎn)品提供 microcode 更新,甚至 Core 架構系列,第二代的 Sandy Bridge 以后都有提供,Intel 還計劃繼續(xù)處理最久達 2007 的 cpu 產(chǎn)品的 microcode 更新,包含第一代酷睿處理器(Nehalem / Gulftown / Westmere / Lynnfield / Clarksfield / Bloomfield / Arrandale / Clarkdale)和 45nm Core 2 處理器(Penryn / 的 Yorkfield / Wolfdale 處理器 / Hapertown) ,但是 65 納米 Core 2(Conroe 等)不在內(nèi),然而最大的課題應該是:主機板業(yè)者愿不愿意提供采用舊 CPU 的機板 BIOS 更新?品牌電腦業(yè)者針對過保固的產(chǎn)品是否愿意提供更新呢?
畢竟是硬件有缺陷,總是要修補,但追根究底還是要改良硬件設計來徹底解決 Meltdown 與 Spectre 的漏洞。Intel 最終可能在 2018 末、2019 初發(fā)布的第九代酷睿處理器架構 Ice Lake,透過改變設計解決上述問題。在此之前,終端消費者還是要關注好自身的權益,請原購買產(chǎn)品的公司提出解決方案。