讓你的 QEMU 更快 (2022) (★
104 分)
這篇文章描述了一個有關提升 QEMU 效能的重要經歷,特別是針對 NixOS 測試環境中的使用場景。NixOS 廣泛運用 QEMU 虛擬機器進行測試,使用 Plan 9 檔案協定 (9p) 為測試存取 Nix Store。然而,作者在執行一個涉及大量檔案(約 278,000 個,共 5.3 GiB)的測試時,發現資料複製異常緩慢,花費超過兩小時多來完成。這促使作者進行深入分析並最終成功將測試時間縮短至僅 7 分鐘。
透過問題剖析,作者發現主要瓶頸來自 QEMU 的 9p 文件操作過程中,使用一個線性搜尋 (linked list) 方式來尋找文件 ID(fid)的設計,該實現效能隨著文件數量增加而顯著下降。為解決此問題,作者將 fid 的查詢結構改為使用雜湊表(hash table),優化了查詢效能至理想的 O(1) 複雜度。這項最佳化大幅提升了 QEMU 的文件操作效能,使測試流程顯著加快。
文章同時也記錄了作者的學習過程,包括如何使用
perf 工具生成火焰圖分析效能瓶頸、回顧不同效能剖析方法的差異,並學習了 QEMU 的電子郵件補丁提交流程。雖然過程中遇到多次挫折,但在 QEMU 的維護者幫助下,作者成功將最佳化補丁加入官方程式碼中。此外,這項改進不僅讓作者在本機測試更高效,對於所有使用 QEMU 的使用者以及 NixOS 的建構測試,也將帶來廣泛的效能改進,並減少對伺服器資源的需求。
總體而言,這次經驗展示了開源軟體中解決痛點的魅力,也讓作者對多項技術工具、協定和流程有更深的了解,並覺得解決這類挑戰非常有成就感。
👥
13 則討論、評論 💬
https://news.ycombinator.com/item?id=42438449