Wasm 性能究竟如何 - Arm 上的容器運行時和 WasmEdge 基準測試
此文爲 《Container Runtimes and WasmEdge benchmarking on Arm》 的翻譯版本。原文發佈在 Arm Community,作者爲 Howard Zhang。
原文鏈接:https://community.arm.com/arm-community-blogs/b/infrastructure-solutions-blog/posts/container-runtimes-wasmedge-arm
本文章的翻譯與傳播已經獲得許可。
這篇博客,我想介紹一些 Arm64 平臺上的運行時。具體來說,對 WasmEdge 和 Runc 進行基準測試,展示 Wasm 與容器相比的優勢。Arm 始終如一地爲開源項目做出貢獻。我們積極參與以下雲原生項目,專注於在 Arm64 平臺上啓用、優化性能以及實施持續集成和部署。
Runtime
容器運行時是負責運行容器的軟件。Runc 是應用廣泛的運行時,Containerd 和 Docker 默認使用它。還有一些其他運行時,例如 Crun、Runsc 和 Kata 容器。運行時的職責有:
-
消耗容器掛載點(mount point)
-
使用容器元數據(也可以是手動製作的 config.json 用於測試)
-
與內核通信以啓動容器化進程(克隆系統調用)
-
設置 cgroups、SELinux 策略、App Armor 規則
每個運行時都有自己的適應區域,例如輕量級應用程序或安全環境。
Kata 容器
Kata Container 是一個安全的容器運行時,它使用硬件虛擬化技術作爲額外的防禦層。這允許它提供更強大的工作負載隔離,同時仍然是輕量的,並且像常規容器一樣運行。
圖片來源 : https://katacontainers.io/learn/
此外,我們將默認的虛擬機監視器 (VMM) 從 Qemu 更改爲 Cloud Hypervisor。與 Qemu 相比,Cloud Hypervisor 更加輕量和安全。這是因爲 Cloud Hypervisor 具有最少的模擬設備,並且是用 Rust 實現的,從而避免許多常見的安全問題。
詳情請參考
-
https://katacontainers.io/
-
https://www.cloudhypervisor.org/.
gVisor
gVisor 是一個用 Go 編寫的應用程序內核,它實現了 Linux 系統調用接口的大部分。它在運行的應用程序和主機操作系統之間提供了額外的隔離層。它利用 KVM 來保持容器和主機之間內存和 CPU 的隔離。它還有一個應用程序內核,可以處理用戶空間中的大多數系統調用,並且只有有限數量的系統調用會傳遞給主機內核。這減少了攻擊面。
圖片來源: https://gvisor.dev/blog/2020/04/02/gvisor-networking-security/
詳情請參考:
- https://gvisor.dev/
WasmEdge
WasmEdge 是一個輕量級、高性能和可擴展的 WebAssembly 運行時,適用於雲原生、邊緣和去中心化應用程序。
圖片來源: https://wasmedge.org/book/en/use_cases/kubernetes.html
WasmEdge 使用 WebAssembly 和 WASI。我不會深入介紹這兩種技術,而是進行一般性介紹。
-
WebAssembly(縮寫爲 Wasm)是一種基於堆棧的虛擬機使用的、二進制指令格式。
-
內存安全的沙盒執行環境
-
程序語言,如 Rust、C 和 Golang,可以編譯成兼容所有這些平臺的 Wasm 二進制格式
-
WASI 是 WebAssembly 的模塊化系統接口。Wasm 應用程序通過 WASI 與主機內核交互。
詳情請參考
-
https://wasmedge.org/docs
-
https://github.com/WebAssembly/WASI
-
https://webassembly.org/
總的來說,與容器技術相比,Wasm 有幾個優點。
-
更小的二進制尺寸和內存足跡
-
一些庫可以在 Wasm 二進制文件之間共享。
-
更快的啓動時間
-
沒有一些容器技術的啓動工作,比如創建命名空間、cgroup 等。
-
減少主機內核的中繼
-
容器技術需要 namespace、cgroup、文件系統等,但 Wasm 不需要它們。
但是,作爲一項不成熟的技術,它確實有一些缺點:
-
WASI 僅支持有限的系統調用,許多應用程序無法遷移到 Wasm
-
安全性還有待驗證
-
許多導入功能仍未隱含。https://github.com/WebAssembly/proposals
這些優勢使得 Wasm 非常適合 Serverless 和邊緣計算,這些對鏡像大小或啓動時間敏感。
WasmEdge 和 Runc 之間的微基準測試
我們進行了三個基準測試,以說明 WasmEdge 相較 Runc 的優勢,所有基準測試都在 Arm64 服務器上完成。以下是有關測試平臺的一些信息。
第一個測試驗證普通 rust 二進制文件(由普通容器使用)和 Wasm 二進制文件之間的大小。以下是代碼
fn main() {
println!("hello");
}
普通的 Rust 二進制文件是 1.8MB,而 Wasm 二進制文件只有 0.8MB。
第二個測試是重複啓動 helloworld 鏡像,即 runc 和 WasmEdge 分別啓動 1、10、100、500、1000 和 1500 次。正如你在第二張圖片中看到的,Wasm 的啓動時間約爲普通容器的 25%。
第三個測試通過啓動幾個 helloworld 鏡像並讓它們休眠一段時間來並行運行,然後計算內存使用情況。正如你在第三張圖片中看到的,1500 個 Wasm 的內存佔用比 1500 個普通容器少 25%。
總結
在這篇博客中,我們簡要介紹了運行時,並展示了 runc 和 WasmEdge 之間的鏡像大小、啓動時間和內存佔用的基準測試。
下表總結了以下維度對運行時的評估:鏡像大小,啓動時間,安全性,應用程序開發難度,項目成熟度和適應環境。
如果對這些運行時感興趣,可訪問它們的官方網站獲取更詳細的信息。
-
WasmEdge: https://wasmedge.org/
-
WebAssembly: https://webassembly.org/
-
Kata Containers: https://katacontainers.io/
-
Cloud Hypervisor: https://www.cloudhypervisor.org/.
-
gVisor: https://gvisor.dev/
關於 WasmEdge
WasmEdge 是輕量級、安全、高性能、可擴展、兼容 OCI 的軟件容器與運行環境。目前是 CNCF 沙箱項目。WasmEdge 被應用在 SaaS、雲原生,service mesh、邊緣計算、邊緣雲、微服務、流數據處理等領域。
✨GitHub:https://github.com/WasmEdge/WasmEdge
💻官網:https://wasmedge.org/
Discord 羣:https://discord.gg/U4B5sFTkFc
文檔:https://wasmedge.org/book/en
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/6LUuAJL7WEPu9U3QJ2aIMg