Hermit,一種用於受控測試和錯誤檢測的工具

隱士

Hermit,作為一個可重現的容器,給出瞭如果系統棧提供可重現性作為抽象會是什麼樣子的想法

Facebook揭幕 最近通過一份出版物,推出 隱士, 形成一個 確定性程序執行的環境,這使得可以使用相同的輸入數據在不同的啟動上獲得相同的結果並重複執行過程。

在正常執行期間,各種無關因素會影響輸出,例如當前時間、線程調度函數、虛擬內存地址、來自偽隨機數生成器的數據以及各種唯一標識符。

Hermit 允許在容器中運行程序 這些因素在後續運行中保持不變。 可重複執行,完全再現易變環境的配置, 可用於錯誤診斷、調試 多步迭代,為回歸測試、壓力測試、多線程故障排除和可重複構建系統創建固定環境。

Hermit 強制任意程序的確定性執行,並充當可重現的包裝器。 也就是說,它將程序與非確定性來源(如時序、線程交錯、隨機數生成等)隔離開來。 有保證的確定性是一個強大的工具,是許多應用程序的基礎,包括並發壓力測試、記錄/重放、可重現構建和並發錯誤的自動診斷等。

Hermit 無法將來賓程序與非確定性來源隔離開來,例如文件系統更改或來自外部網絡的響應。 相反,為了提供完全確定性,用戶必須提供固定的文件系統基礎映像(例如,使用 Docker)並禁用外部網絡。

關於隱士

隱士 允許電源創建可重現的環境 通過攔截系統調用,其中一些被替換為自己的處理程序,產生恆定的輸出,其中一些被重定向到內核,之後從輸出中刪除非持久性數據。

攔截呼叫 對系統來說, 使用框架 遐想,其代碼也由 Facebook 發布。 為了防止文件系統更改和網絡請求影響執行進度, 使用靜止圖像執行執行 文件系統並禁用對外部網絡的訪問。 通過訪問偽隨機數生成器,Hermit 生成一個預定義的序列,每次執行時都會重複該序列。

非確定性最複雜的來源是線程調度程序。 內核調度線程的方式取決於許多外部因素,包括物理 CPU 的數量或系統上運行的其他需要 CPU 時間的線程的數量。

在對性能的更複雜的非永久性影響中, 亮點線程調度器,其行為取決於許多外部因素,例如 CPU 內核的數量和其他正在運行的線程的存在。

確保可重複的調度程序行為,所有線程都序列化,綁定到單個 CPU 內核 以及控制傳遞給線程的順序。 每個線程被允許執行固定數量的指令,之後停止執行並轉移到另一個線程(為了限制,使用 CPU PMU(性能監控單元),它在指定數量的條件分支後停止執行)。

診斷 由於競爭條件導致的線程問題,Hermit 有一種模式可以檢測出亂序的操作 並造成封鎖。 為了識別這樣的問題,對登記了正確操作和執行異常終止的狀態進行比較。

最後,如果你有興趣能夠更多地了解它,你應該知道 項目代碼 它是用 Rust 編寫的,並在 BSD 許可下分發。

您可以查看詳細信息 以下鏈接。


發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責資料:AB Internet Networks 2008 SL
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。