Facebook、反復可能なプログラム実行のためのツールキット「Hermit」を公開

Facebook (ロシア連邦で禁止されている) は、Hermit ツールキットのコードを公開しました。このツールキットは、プログラムを決定論的に実行するための環境を作成し、異なる実行で同じ結果を達成し、同じ入力データを使用して実行を繰り返すことを可能にします。 プロジェクト コードは Rust で書かれており、BSD ライセンスに基づいて配布されます。

通常の実行中、結果は、現在時刻、スレッド スケジューリング、仮想メモリ アドレス、擬似乱数発生器からのデータ、さまざまな一意の識別子など、さまざまな外部要因の影響を受けます。 Hermit を使用すると、これらの要素が後続の実行にわたって一定のまま維持されるコンテナ内でプログラムを実行できます。 環境の非永続パラメータを完全に再現する反復実行は、エラー診断、反復実行による複数ステップのデバッグ、回帰テスト用の固定環境の作成、ストレス テスト、マルチスレッドおよび反復可能なビルド システムの問題の特定に使用できます。 。

Facebook、反復可能なプログラム実行のためのツールキット「Hermit」を公開

再現可能な環境はシステム コールをインターセプトすることによって作成され、その一部は永続的な結果を生成する独自のハンドラーに置き換えられ、一部はカーネルにリダイレクトされ、その後結果から非永続データが消去されます。 システムコールを傍受するには、Reverie フレームワークが使用されます。このフレームワークのコードも Facebook によって公開されています。 ファイル システムの変更やネットワーク リクエストが実行の進行に影響を与えるのを防ぐため、実行は固定 FS イメージを使用し、外部ネットワークへのアクセスを無効にして実行されます。 擬似乱数ジェネレーターにアクセスすると、Hermit は起動されるたびに繰り返される事前定義されたシーケンスを生成します。

実行の進行状況に最も複雑な変数の影響を与えるものの XNUMX つはスレッド スケジューラです。その動作は、CPU コアの数や他の実行スレッドの存在など、多くの外部要因に依存します。 スケジューラーの反復可能な動作を保証するために、すべてのスレッドは XNUMX つの CPU コアのみと接続してシリアルに実行され、制御がスレッドに転送される順序が維持されます。 各スレッドは固定数の命令を実行でき、その後実行が停止して別のスレッドに転送されます (指定された数の条件付き分岐の後に実行を停止する CPU PMU (パフォーマンス監視ユニット) を制限するため)。

競合状態によるスレッドの問題を診断するために、Hermit には、実行順序が狂い、異常なシャットダウンにつながった操作を識別するモードがあります。 このような問題を特定するには、正常な動作と実行の異常終了が記録された状態を比較します。

出所: オープンネット.ru

コメントを追加します