萌えハッカーニュースリーダー

2025/04/04 13:17 Deterministic simulation testing for async Rust

出典: https://s2.dev/blog/dst
hakase
博士

ロボ子、今日のITニュースは「Deterministic Simulation Testing (DST)」じゃ。S2っていうプロジェクトで、システムの信頼性を高めるためにDSTを導入したらしいぞ。

roboko
ロボ子

DSTですか。初めて聞く言葉です。具体的にはどのようなテストなのでしょうか?

hakase
博士

DSTは、乱数生成器のシードを基に状態空間をランダムに探索して、エッジケースを見つけ出すテストのことじゃ。バグを確実に再現できるから、システムの信頼性が向上するってわけ。

roboko
ロボ子

なるほど。記事には「本番環境でユーザーがバグに遭遇するのを防ぐ」とありますね。それは素晴らしいです。

hakase
博士

そうじゃろ? しかも、クライアントだけでなくメインラインコードでもインバリアントをチェックするらしいぞ。ACID特性が関わる場合は、アサーションを使って積極的にクラッシュさせるって、なかなか思い切ったことをするのじゃ。

roboko
ロボ子

積極的にクラッシュですか! でも、それだけ自信があるということですね。

hakase
博士

記事によると、DSTでは実行、エントロピー、時間、I/Oを制御することが重要らしいぞ。特に、スケジューラノイズを排除するためにシングルスレッドで実行するのは興味深い。

roboko
ロボ子

シングルスレッドですか。Tokioのシングルスレッドスケジューラを利用しているんですね。

hakase
博士

その通り! Tokioは抽象化されたクロックやシード可能なRNGも提供してくれるから、DSTにはもってこいなのじゃ。さらに、Turmoilっていうシミュレートされたネットワークも使ってるらしい。

roboko
ロボ子

Turmoilですか。複数のホストをシングルスレッドで実行できるのは便利ですね。

hakase
博士

じゃろ? MadSimっていう`libc`シンボルをオーバーライドする技術も使って、時間とエントロピーを制御してるらしいぞ。でも、依存関係のあるライブラリがマルチスレッドとかに依存してると、ちょっと面倒なことになるみたいじゃ。

roboko
ロボ子

確かに、それは大変そうですね。Rustの`HashMap`がDOS攻撃防御のためにランダム化されているのも問題になりそうですね。

hakase
博士

そうなんじゃ。でも、`mad-turmoil`クレートを使って、`getrandom`とか`clock_gettime`みたいな関数をオーバーライドすることで解決してるらしいぞ。賢いのじゃ!

roboko
ロボ子

なるほど、すごいですね! CIで同じシードを再実行してログを比較する「メタテスト」も追加したんですね。CIで再現できない問題をローカル環境で再現できるのは大きいです。

hakase
博士

そうじゃ! DSTのおかげで、外部APIや内部プロトコルのニュアンス、デッドロックなど、17件も重要な問題を特定できたらしいぞ。DST、恐るべしじゃな。

roboko
ロボ子

DST、本当にすごいですね。私もぜひ試してみたいです。

hakase
博士

よし、ロボ子。今度、DSTを使ったバグ出し大会でも開くかのじゃ? 優勝者には、私が作った特製バグ埋め込み済みソフトウェアをプレゼントするぞ!

roboko
ロボ子

えっ、それはご遠慮しておきます…。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search