使用CoW記憶體分叉技術實現亞毫秒級VM沙箱
我想看看如果永遠不需要啟動全新虛擬機,隔離程式碼沙箱能多快啟動。所以我不再每次執行都啟動新的微虛擬機,而是只啟動一次Firecracker,並預先載入Python和numpy,然後對完整VM狀態建立快照。之後的每次執行都會建立一個新的KVM虛擬機,以快照記憶體的`MAP_PRIVATE`映射為基礎,這樣Linux就會自動提供寫入時複製頁面。這意味著每個沙箱都是從真實虛擬機內已經運行的Python程序開始,執行程式碼後結束。這些是真正的KVM虛擬機,不是容器:獨立的客體內核、獨立的客體記憶體、獨立的頁表。當虛擬機寫入記憶體時,會獲得該頁面的私有副本。困難的部分不是CoW本身,而是正確恢復快照虛擬機。使用Rust語言,Apache 2.0授權。
- 網頁應用程式
- 軟體服務
- 開放原始碼
✨ AI 摘要
ZeroBoot 是一個系統,通過對已預啟動並載入Python及函式庫的Firecracker微虛擬機進行快照,創建亞毫秒級虛擬機沙箱。每次新執行都會使用寫時複製記憶體映射分叉此快照,提供完整的KVM隔離,而無需全新虛擬機啟動的開銷。
適合誰
需要快速冷啟動的無伺服器/函數即服務平台, 用於不受信任使用者程式碼的高效能程式碼沙箱, 需要快速、隔離的Python環境的資料科學或機器學習工作負載
為何值得關注
它通過對預初始化快照進行記憶體分叉來消除啟動過程,實現近乎即時的虛擬機啟動,並提供完整的硬體層級隔離。
核心功能
- 使用寫入時複製記憶體分叉技術,在不到一毫秒內啟動VM沙盒
- 啟動Firecracker一次,預載Python和numpy,然後快照完整VM狀態
- 創建新的KVM VM,以快照記憶體的MAP_PRIVATE映射為基礎,實現自動CoW頁面
- 提供真正的KVM VM隔離,擁有獨立客體核心、記憶體和頁表
使用場景
- 一個數據科學平台利用此技術為不同客戶執行數千個隔離的Python數據轉換。每位用戶的腳本都在一個全新的虛擬機中執行,啟動時間不到一毫秒,確保作業之間完全隔離,同時維持預熱環境的性能,像是已載入numpy等庫的環境。
- 一個無伺服器計算提供商採用此技術來創建函數執行環境。當函數被調用時,一個新的微虛擬機從包含運行環境的快照中分支出來,大幅降低冷啟動延遲,從數百毫秒縮減至毫秒以下,提升對延遲敏感應用程式的用戶體驗。
- 一家安全研究公司使用這些沙盒來安全執行不受信任的程式碼樣本進行惡意軟體分析。每個樣本在一個完全隔離的虛擬機中運行,幾乎瞬間啟動,讓研究人員能快速測試數千種變體,同時將任何惡意活動控制在分支環境內。