訂閱電子報∣ 友善列印字體大小 文章分享-Facebook 文章分享-Plurk 文章分享-Twitter
為了讓CPU更好賣,英特爾將硬體變“軟”了
獲取產業訊息零時差!立即訂閱電電公會電子報。
這是一篇極具可讀性的短文,有趣地揭示了英特爾x86指令集架構(ISA)最近發生的事情。我們看到了擴展的數量和複雜度的急劇增加,及其對系統研究人員(和英特爾)產生的一些有趣的影響。我們也看到越來越多的微代碼的使用模糊了ISA作為硬體和軟體之間的界限這一角色。

我們認為,這些擴展現在正在逼近類似軟體層面的複雜程度,但同時也包含了硬體實現的所有缺點,以及緩慢的部署週期。我們懷疑當前的路徑可能是不可持續的,並假設了一個可替代的未來,最終目標是將新的ISA特性與底層硬體分離。

過去:穩定且可控的增長
386參考手冊列出了96條指令。隨著時間的推移,新的指令在諸如浮點支援,向量擴展,加密加速器,64位等領域都在不斷增加。至關重要的是:

……過去的系統設計人員極大程度上忽略了這種變化……除了64位元元模式和虛擬化擴展之外,x86系統開發人員偶爾也會進行一些調整,以提高性能或糾正明顯的缺點,但除此之外,其他方面都被忽略了。即使是64位元元模式也不會顯著增加架構的複雜性……

為什麼要購買新CPU?
隨著摩爾定律的放緩,英特爾傳統的兩年“Tick-Tock”發展模式也在放緩。這就提出了一個顯而易見的問題:
……如果沒有微架構方面的改進,他們的CPU就不會有大幅提速,也不會有更高的效率,而且他們相同價位的CPU的核心數量與先前的CPU完全相同。為什麼會有人購買新的CPU?

如果你站在英特爾的角度思考一會兒,你就能明白為什麼會有這樣的麻煩。你還能做些什麼可以讓購買新CPU變得有吸引力呢?

英特爾似乎正在轉向的一個理由是:如果新的CPU實現了一個重要的ISA擴展——例如,軟體提出了一個需求,因為它對於安全至關重要——消費者就會有一個強大的理由去升級。

換言之,加快發佈速度很可能是英特爾有意讓我們繼續購買的策略。結果……
在過去的兩年裡,ISA的複雜性急劇地增加了(例如:在下圖中,我們可以看到架構手冊的大小),在此過程中有更多的擴展。 

上圖仍然遵循摩爾定律(注意左側坐標軸上的對數刻度),最近公佈的節奏放緩尚未出現。在手冊中使用文字作為複雜性的代表,我們可以看到在2015-16年間因Skylake引入的而引起的大幅增長。

(出於興趣,我估計手冊有200萬詞,平均閱讀速度為每分鐘200詞,以每週閱讀40小時計算,需要一個月才能讀完,而這僅僅是為了閱讀一份手冊!)

下表總結了最近的ISA擴展以及引入的新指令的數量。
 
複雜性的增加不僅僅來自於新指令的數量,更重要的是來自於與現有指令的交互:
這些最近的擴展引入了新的系統級功能,這經常改變現有指令的語義,並與其他擴展和先前的體系結構特性進行複雜的交互。

SGX和CET示例
鮑曼引用SGX和CET擴展作為主要例子。我們以前一定在《晨報》上看到過SGX很多次吧。

功能強大的組合以及強大的物理安全(記憶體加密)使得SGX對研究人員和從業者都有吸引力……但是,SGX引入了大量的複雜性:用近200頁的英文/偽代碼規範描述了26條指令。

在這200頁中,有近20頁專門用於介紹SGX與先前架構特徵的交互。而事實證明,其中一種交互可能會破壞SGX尋求提供的安全保障。這對我來說是新鮮的,儘管我讀過很多關於研究SGX系統的文章。

如果你感興趣的話,你可以在這裡參考“防止分頁錯誤告訴你的秘密”(CCS’16)。攻擊依賴於作業系統控制下的側面通道(因此在SGX威脅模型中被認為是攻擊者的控制):分頁錯誤。通過在幾乎每條指令上誘導一個分頁錯誤,足夠的資訊被洩漏出去,平均27%的金鑰位可以恢復,如果使用OpenSSL和libgcrypt的加密金鑰則可以恢復100%的金鑰位。

也許具有諷刺意味的是,已知的最優方法利用了與事務記憶體擴展的看似無意的交互:事務中止而不是分頁錯誤,因此作業系統不能觀察事務性的擴充記憶體訪問。

老實說,CET(控制流程執行技術)擴展聽起來很酷。它通過維護影子堆疊和間接分支跟蹤來防禦代碼重用攻擊(如ROP)。影子堆疊只包含返回位址,並且無法訪問正常代碼。在返回的時候,來自常規和影子堆疊的位址會被彈出並進行比較——如果它們不匹配,就會有麻煩了!

CET承諾為不安全的C / C ++代碼增加強大的防禦,代價是犧牲大量的架構複雜度……主要的複雜性來自於功能交互。在x86上的控制傳輸已經非常複雜,包括許多調用和返回的形式,比如對不同的段或特權級別的調用。總共有9條指令(其中一些有很多變體,如JMP)被CET修改。

我們能保持這種速度嗎?
隨著複雜交互的系統級特性的複雜性的快速增長,我們看到了很高的變化速度。然而,“x86語義的忠實實現對於x86相容的處理器、虛擬機器、模擬器、JIT編譯器、動態翻譯器、反彙編器、調試器、評測器等都是至關重要的。”

……我們不得不質疑,在許多實現中,x86承諾的無限向後相容性是否可持續。

當改進通過新的指令進行時,取得收益需要更長的時間
第一個SGX規格發佈於2013年,首顆實現它的CPU直到2015年才發貨,而支持SGX的伺服器級CPU仍然在2017年初出現。另外再加上充分部署的時間,那麼從初始規格到廣泛適用便需要10年時間。在這個週期的某個時刻,軟體發展人員將能夠以合理的假設來開始SGX的開發。

這代表了軟體發展人員的一個艱難的權衡;之前ISA擴展也花了很長時間部署,但是它們通常只能加速現有的功能;具有像SGX這樣的功能,開發人員面臨著一個嚴峻的選擇;無限期地為安全性而等待,或者立即就部署它。

加上這個軟體的滯後,我們可能會看到,新功能的普遍開發大概需要十多年的時間。

硬體和軟體之間的界限正在變得模糊
仔細閱讀英特爾的專利,你會看到,SGX指令完全以微代碼實現。如果新的ISA功能是新的微代碼,那麼就可以在現有的CPU上支援它們。例如,或許(許多)新指令的(性能較差的)版本可以通過這種方式實現,從而為新特性的採用提供了一個更快的途徑。它的許可和收入模式是一個開放的問題(與出售新CPU的願望的相互作用)。

……現在比以往任何時候都更需要重新考慮指令集的概念,它不再是硬體和軟體之間的界限,而是堆疊中的另一個翻譯層。
訂閱電子報 友善列印 字體大小:
獲取產業訊息零時差!立即訂閱電電公會電子報。