RFC-0073:將 x86-64 平台需求提高至 x86-64-v2 | |
---|---|
狀態 | 社交 |
區域 |
|
說明 | 將 x86-64 最低平台從 v1 和擴充功能提升至 v2 |
Gerrit 變更 | |
作者 | |
審查人員 |
摘要
建議將最低 x86-64 平台從「x86-64-v1」提升至「x86-64-v2」。
Fuchsia 目前在 x86-64 CPU 上執行,並採用基準 64 位元 ISA 和 CMPXCHG16B 擴充功能。這份 RFC 建議將 x86-64-v2 ISA 的最低值提高,並新增 LAHF-SAHF、POPCNT、SSE3、SSE4.1、SSE4.2 和 SSSE3 擴充功能。提高最低平台,並允許編譯器使用這些擴充功能產生程式碼,可明顯提升系統效能,且僅略微減少 Fuchsia 執行的系統數量。
設計
Fuchsia 核心和系統目前是針對使用 CMPXCHG16B 擴充功能的「一般」x86-64 CPU 進行編譯。
這涵蓋自 K8 rev F (2006) 以來的所有 Intel x86-64 CPU 和所有 AMD64 CPU。雖然這項功能具有廣泛的相容性,但如果沒有執行階段測試 + 調度,就無法假設或使用許多非常實用的 ISA 擴充功能。
將基準 ISA 提高至「x86-64-v2」(在 ELF ABI 的最新更新中定義),可讓編譯器假設 LAHF/SAHF、POPCNT、SSE3、SSE4.1、SSE4.2 和 SSSE3 都存在。這組功能最初是在 Intel Nehalem 處理器系列 (2008 年推出)、Intel Silvermont Atom 處理器系列 (2013 年推出)、AMD Bulldozer 處理器系列 (2011 年推出) 和 AMD Bobcat 處理器系列 (2011 年推出) 中推出。在初步測試中,這項功能大幅改善了主要系統建構區塊 (FIDL HLCPP/LLCPP、malloc/free) 的效能,這可能是因為基準包含 CRC32C 指令 (由記憶體配置器 Scudo 使用)。
將基準值提高至 x86-64-v2 以上,並升級至 -v3 可新增 AVX、AVX2、BMI1、BMI2、F16C、FMA、LZCNT、MOVBE 和 XSAVE;這會排除 Intel Sandy Bridge、Intel Ivy Bridge、AMD Bulldozer/Piledriver/Steamroller 和所有 Intel Atom CPU,因為這些無法維持。
實作
這項變更可在單一 CR (484898) 中實作。CR 會將「-march=x86-64-v2」傳遞至 Fuchsia 版本的編譯器,讓編譯器能夠使用新的基準功能產生程式碼。
當 x86_64-fuchsia 以目標形式傳遞時,我們也會變更編譯器/工具鍊中的預設值,以便任何以 Fuchsia 為目標且使用工具鍊建構的第三方程式碼都能從 ABI 中受益。
成效
這項提案預計可改善 x86-64 平台上所有已編譯的 C/C++ 程式碼效能。Perfcompare 中的初始微基準測試證實了這一點:
- 2914 個測試案例中有 716 個加快了速度,其中部分關鍵測試案例的速度提升幅度相當顯著
- 值得一提的是,free() / delete 100 個位元組物件的速度提高了 30 毫秒 (基準值為 83 毫秒);這主要是因為現在假設可使用在 malloc 中使用的 CRC32C 指令。
- 大多數 FIDL HLCPP 和 LLCPP 編碼/解碼微型基準測試速度變快;有些甚至大幅提升 (例如,HLCPP/Builder/OptionalStructTree/Depth8/Steps.Build/WallTime 節省了約 4 毫秒 (15 毫秒基準)。
安全性考量
這項提案沒有任何安全性考量。
隱私權注意事項
此提案沒有隱私權考量。
測試
這項變更會透過 Fuchsia CI/CQ 測試和本機核心測試進行測試。此外,我們會在功能定義邊緣附近的各種處理器系列上啟動/測試 Fuchsia,包括 AMD Piledriver、Intel Apollo Lake Atoms 和其他可用的處理器。
說明文件
我們需要在 Fuchsia 平台支援文件的 fuchsia.dev 的「Set up Fuchsia hardware」部分,記錄新的功能基準。目前,我們已列出少數特定 x86-64 裝置,但未指定功能基準。
缺點、替代方案和未知事項
- 實施這項提案的成本為何?
這項變更會導致某些舊版 x86-64 處理器無法執行 Fuchsia,目前可執行 Fuchsia 的處理器如下: ** Intel Pentium 4 / Pentium D 64 位元處理器 ** Intel Core 2 Duo / Quad 處理器 ** Intel 'Bonnell' Atom 處理器 ** AMD K8 NPT (rev F) 處理器 ** AMD K10 處理器
這些處理器也無法在 KVM 或其他未提供缺少指令模擬功能的輔助作業系統下執行 Fuchsia。
這些處理器系列中最新的版本是在 2008 年發布。這類系列產品中,最近推出的新處理器是在 2013 年。
- 還有哪些策略可以解決同樣的問題?
這些功能和手寫彙編/內建項目的動態列舉,可擷取部分/大量的效能提升,但需要在我們的程式碼庫中進行手動分析,且不會擷取太多效能,因為我們假設可使用特定功能,並產生無分支程式碼來使用這些功能。