RFC-0073:將 x86-64 平台要求提高至 x86-64-v2 | |
---|---|
狀態 | 社交 |
區域 |
|
說明 | 將最低 x86-64 平台從 v1 + 擴充功能提高為 v2 |
變更 | |
作者 | |
審查人員 |
摘要
建議將最低 x86-64 平台從「x86-64-v1」提高為「x86-64-v2」。
Fuchsia 目前在 x86-64 CPU 上執行,並使用 64 位元 ISA 和 CMPXcp16B 擴充功能。此 RFC 建議針對 x86-64-v2 ISA 提高最低,並新增 LAHF-SAHF、POPCNT、SSE3、SSE4.1、SSE4.2 和 SSSE3 擴充功能。提高最低平台,並允許編譯器使用這些擴充功能產生程式碼,可明顯提升系統效能,同時僅稍微減少 Fuuchsia 執行的系統數量。
設計
Fuchsia 核心和系統目前採用 CMPXPI16B 擴充功能,以「一般」x86-64 CPU 為目標進行編譯。
這涵蓋所有 Intel x86-64 CPU 以及自 K8 rev F (2006) 以來的每個 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) 的效能,原因可能是由於基準 (包括記憶體配置器 Scudo 使用的 CRC32C 指令) 所導致。
調高基準線超過 x86-64-v2,直到 -v3 新增 AVX、AVX2、BMI1、BMI2、F16C、FMA、LZCNT、MOVBE 和 XSAVE;則會導致系統排除 Intel Sandy Bridge、Intel Ivy Bridge、
實作
這項變更可以在單一 CR 484898 中實作。CR 會將「-march=x86-64-v2」傳遞給 Fuchsia 版本的編譯器,讓編譯器能夠使用新的基準功能產生程式碼。
我們也會在 x86_64-fuchsia 做為目標傳遞 x86_64-fuchsia 時,變更編譯器/工具鍊中的預設值,讓凡是以 Fuchsia 為目標且使用工具鍊建構的第三方程式碼,都能受益於 ABI。
效能
本提案旨在改善所有在 x86-64 平台上所有已編譯的 C/C++ 程式碼效能。效能的初始 microbenchmark 列舉如下:
- 2914 年共出現 716 個測試案例速度加快,其中某些關鍵案例的幅度相當可觀
- 值得注意的是,100 位元組物件的 free() / 刪除速度加快 30 秒 (基準 83ns);這主要是因為 Malloc 使用的 CRC32C 指令現已假設可供使用。
- 大多數 FIDL HLCPP 和 LLCPP 對微基準編碼/解碼的 Microbenchmark 可以比較快速;有些可相對的 (HLCPP/Builder/OptionalStructTree/Depth8/Steps.Build/WallTime) 節省約 4 毫秒 (15 毫秒的基準時間)。
安全性考量
本提案沒有任何安全性考量。
隱私權注意事項
本提案沒有任何隱私權方面的考量。
測試
這項異動將透過 Fuchsia CI/CQ 測試和核心測試的本機測試來進行測試。此外,我們也會在功能定義邊緣 (AMD Piledriver、Intel Apolo Lake Atom) 和其他處理器附近的各種處理器系列中啟動/測試 Fuchsia 的效能。
說明文件
我們需要記錄 Fuchsia 平台支援文件中的新功能基準,詳情請參閱 fuchsia.dev 的「設定 Fuchsia 硬體」一節。目前列出了幾個特定 x86-64 裝置,但未指定特徵基準。
缺點、替代方案和未知
- 實作這項提案需要多少費用?
這項變更將使某些舊版 x86-64 處理器無法執行 Fuchsia。目前可執行的處理器: ** Intel Pentium 4 / Pentium D 64 位元處理器 ** Intel Core 2 Duo / Quad 處理器 ** Intel 'Bonnell Atom AMD 處理器 (Dtel 'Bonnell' Atom 處理器 () K8 NPT0 處理器)
這些處理器也無法在 KVM 或其他無法模擬缺少指令的管理程序下執行 Fuchsia。
這些處理器系列在 2008 年推出的最新機型,這些系列中的最後一個新處理器是在 2013 年推出。
- 還有哪些策略可以解決相同問題?
以動態列舉這些功能和手寫組裝/內在學的動態列舉可能會擷取效能的某些或重大結果,但需要在程式碼集中進行手動分析,且無法達到效能達到預期效果,會假設特定功能可用,並產生無分支的程式碼來使用這些功能。