toplogo
登入

Mewz:基於單核心技術實現高隔離性和可移植性的 WebAssembly 輕量級執行環境


核心概念
本文提出了一種名為 Mewz 的新型輕量級 WebAssembly 執行環境,透過結合單核心技術和 WASI,解決了雲端環境中容器和虛擬機器的可移植性和效能開銷問題,並透過實驗證明了其在執行 WebAssembly 應用程式方面的低開銷優勢。
摘要
edit_icon

客製化摘要

edit_icon

使用 AI 重寫

edit_icon

產生引用格式

translate_icon

翻譯原文

visual_icon

產生心智圖

visit_icon

前往原文

導言 雲端運算需要為工作負載提供隔離性和可移植性。 虛擬機和容器廣泛用於滿足這些需求,但存在兩個問題:容器映像檔依賴於主機作業系統和 CPU 架構,以及虛擬機器和容器的開銷導致效能下降。 現有解決方案未能同時解決這兩個問題。 背景 雲端運算的兩個主要需求:隔離性(防止用戶之間的干擾)和可移植性(輕鬆遷移到不同的雲端環境)。 虛擬機器和容器的組合使用存在兩個問題:容器映像檔的可移植性受限於相同的主機作業系統和架構,以及虛擬機器和容器的開銷同時發生。 單核心 單核心是一種輕量級核心,旨在在雲端中運行。 單核心將單個應用程式與核心靜態鏈接到單個核心映像檔中,減少了系統呼叫的開銷。 然而,單核心映像檔依賴於架構,因此不能解決可移植性問題。 Wasm WebAssembly (Wasm) 是一種用於可執行代碼的可移植二進制格式。 Wasm 有一個名為 WebAssembly 系統介面 (WASI) 的 API 規範,為 Wasm 提供系統資源。 Wasm 的獨立於作業系統/CPU 架構以及 WASI 吸收平台差異的能力使其成為解決可移植性問題的理想選擇。 然而,Wasm 本身不能提供雲端運算所需的隔離性,因此需要虛擬機器隔離,這意味著使用 Wasm 作為容器的替代方案並不能解決虛擬化開銷問題。 架構 本文提出了一個結合 Wasm 和單核心的新系統,以解決可移植性和開銷問題。 應用程式被編譯成 Wasm 二進制文件並分發。在雲端環境中,Wasm 二進制文件被鏈接到單核心映像檔中。然後,單核心映像檔在虛擬機器上運行。 這種架構受益於單核心的輕量級特性,同時確保了二進制文件的可移植性。 具有 WASI API 的單核心 Mewz 是一個提供 WASI API 給 Wasm 二進制文件的單核心。 Mewz 通過在構建時與 Wasm 應用程式靜態鏈接來執行它。 Mewz 僅提供 WASI 實現所需的功能,從而最大限度地減少了功能,例如,它不實現線程功能。 Wasm 的 AoT 編譯器 為了靜態鏈接 Mewz 和 Wasm 二進制文件,本文實現了 Wasker,一個將 Wasm 二進制文件轉換為目標 CPU 架構上的原生代碼的 AoT 編譯器。 Wasker 將 Wasm 二進制文件編譯成一個目標文件,將 WASI 函數保留為未解析的符號。 通過 Wasker 進行 AoT 編譯後,目標文件通過符號解析與 Mewz 鏈接。 效能評估 本文通過運行一個分發靜態文件的簡單 HTTP 伺服器來評估系統的效能。 比較了四種環境的效能:Mewz、WasmEdge、Nanos 和 Linux。 結果表明,Mewz 的吞吐量比 Linux 上的 WasmEdge 高 1.3 倍,這表明 Mewz 的開銷低於 Linux 上的 WasmEdge。 然而,Linux 和 Nanos 的吞吐量分別比 Mewz 高 2.5 倍和 2.2 倍,這可能是因為 Rust 編譯器生成的 Wasm 二進制文件的優化不足。 相關工作 Firecracker 是一個基於 KVM 的虛擬機器監視器,旨在實現快速啟動時間、小內存佔用空間和接近物理機的效能,同時確保高度隔離。 gVisor 是一個容器運行時,它以與主機系統高度隔離的方式運行容器,旨在減少無伺服器計算中的虛擬化開銷。 結論 本文提出了一個結合 Wasm 和單核心的新系統,解決了在雲端運算中使用容器和虛擬機器時的可移植性和開銷問題。 通過採用 Wasm,它使應用程式能夠在任何主機作業系統和 CPU 架構上運行,這與容器映像檔不同。 將 Wasm 作為單核心運行減少了伴隨虛擬機器隔離的客戶作業系統的開銷。 為了實現這種架構,本文開發了一個具有 WASI API 的單核心和一個將 Wasm 轉換為原生代碼的 AoT 編譯器。 通過運行一個編譯成 Wasm 的簡單 HTTP 伺服器,評估了系統的效能。 結果表明,它運行 Wasm 應用程式的開銷低於現有的 Wasm 運行時。
統計資料
Mewz 的吞吐量比 Linux 上的 WasmEdge 高 1.3 倍。 Linux 和 Nanos 的吞吐量分別比 Mewz 高 2.5 倍和 2.2 倍。 執行 Wasm 代碼和執行 WASI 函數佔用了 Mewz 很大一部分的 CPU 週期。

深入探究

在實際應用場景中,Mewz 與其他輕量級虛擬化技術(如 Firecracker、Kata Containers)相比表現如何?

Mewz、Firecracker 和 Kata Containers 皆是為了解決傳統虛擬化技術所帶來的效能和資源開銷問題而出現的輕量級虛擬化技術,但它們採用了不同的方法,因此在實際應用場景中各有優劣: Mewz: 優勢: 極致輕量: Mewz 將應用程式與 Unikernel 靜態連結,移除了 Guest OS 的開銷,實現極致輕量級虛擬化。 高可移植性: 基於 WebAssembly 的可移植性,Mewz 應用程式可以在不同平台上運行,無需重新編譯。 劣勢: 生態系統尚未完善: WebAssembly 和 WASI 仍在發展中,Mewz 的生態系統相較於其他技術尚未完善。 功能受限: Mewz 目前功能較為基礎,例如檔案系統僅支援唯讀的記憶體檔案系統,網路功能也依賴 WASI 擴展。 WASI 相容性問題: WASI 規範仍在發展,未來版本更新可能導致相容性問題。 Firecracker: 優勢: 高效能: Firecracker 採用精簡的虛擬化功能,減少虛擬化層的開銷,提供接近原生效能。 快速啟動: Firecracker 的輕量級設計使其擁有極快的啟動速度,適合用於 Serverless 運算等場景。 劣勢: 功能受限: Firecracker 僅支援 Linux Guest OS,且功能相對有限。 可移植性較差: Firecracker 虛擬機器映像檔與特定平台綁定,可移植性較差。 Kata Containers: 優勢: 強隔離性: Kata Containers 使用輕量級虛擬機器為每個容器提供強隔離性,安全性更高。 相容性好: Kata Containers 兼容 OCI 標準,可以與 Docker 等容器工具無縫整合。 劣勢: 資源開銷較高: 相較於 Unikernel 技術,Kata Containers 的資源開銷仍然較高。 啟動速度較慢: Kata Containers 的啟動速度相較於 Firecracker 較慢。 總結: 對於追求極致輕量和高可移植性的應用場景,例如邊緣計算和 Serverless 運算,Mewz 是一個值得考慮的選擇。 對於需要高效能和快速啟動的 Linux 應用程式,Firecracker 是一個較好的選擇。 對於需要強隔離性和與現有容器生態系統良好相容性的應用場景,Kata Containers 是一個更為成熟的選擇。

如果未來 WASI 規範進行重大更新,Mewz 如何應對相容性問題?

WASI 規範的更新確實可能為 Mewz 帶來相容性問題,為此,Mewz 可以採取以下策略: 模組化設計: Mewz 可以採用模組化設計,將 WASI 相關功能封裝成獨立模組,方便更新和替換。 版本相容性: Mewz 可以支援多個 WASI 版本,允許應用程式選擇特定版本,確保舊版應用程式的相容性。 社群合作: Mewz 可以積極參與 WebAssembly 和 WASI 社群,參與規範制定和討論,及早發現和解決潛在的相容性問題。 提供遷移工具: 針對重大 WASI 更新,Mewz 可以提供工具幫助開發者將應用程式遷移到新版本。 透過以上策略,Mewz 可以更好地應對 WASI 更新帶來的相容性問題,確保系統的穩定性和可維護性。

假設 WebAssembly 技術未能如預期般普及,Mewz 的設計理念是否還能應用於其他領域?

即使 WebAssembly 未能如預期般普及,Mewz 的設計理念仍然具有參考價值,可以應用於其他領域: 輕量級虛擬化: Mewz 的 Unikernel 架構和靜態連結方式可以應用於其他輕量級虛擬化技術,例如構建特定領域的 Unikernel 系統。 嵌入式系統: Mewz 的輕量級和高效率特性使其適合應用於資源受限的嵌入式系統,例如物聯網設備和邊緣設備。 安全沙箱: Mewz 的隔離性和安全性特性可以應用於構建安全沙箱環境,用於執行不可信程式碼或隔離敏感應用程式。 Mewz 的設計理念核心在於: 最小化系統開銷: 透過移除不必要的軟體層級和功能,實現極致輕量化。 提高資源利用率: 將應用程式與核心緊密整合,減少系統資源消耗,提高資源利用率。 增強安全性: 透過 Unikernel 架構和靜態連結方式,減少攻擊面,提高系統安全性。 這些理念在其他追求輕量級、高效能和高安全性的領域同樣適用,因此即使 WebAssembly 未能普及,Mewz 的設計理念仍然具有參考價值。
0
star