フレーク bisect

不安定なテストは、ボット上で別のステップで報告されます(ビルド例)。

各テストログは、自動フレーク bisect をトリガーするための、以下のような事前に入力されたコマンドラインを提供します。

Trigger flake bisect on command line:
bb add v8/try.triggered/v8_flako -p 'to_revision="deadbeef"' -p 'test_name="MyTest"' ...

初めてフレーク bisect をトリガーする前に、ユーザーは google.com アカウントでログインする必要があります。

bb auth-login

次に、提供されたコマンドを実行します。フレーク bisect を実行するビルドURLが返されます()。

運が良ければ、bisect は疑わしい箇所を指摘します。そうでない場合は、さらに読む必要があるかもしれません…

詳細な説明 #

技術的な詳細については、実装のトラッカーバグも参照してください。フレーク bisect アプローチは、finditと同じ意図を持っていますが、異なる実装を使用しています。

仕組み #

bisect ジョブには、キャリブレーション、逆方向および内側 bisect の 3 つのフェーズがあります。キャリブレーション中は、1 回の実行で十分なフレークが検出されるまで、合計タイムアウト(または繰り返し回数)を 2 倍にしてテストが繰り返されます。次に、逆方向 bisect は、フレークのないリビジョンが見つかるまで git の範囲を 2 倍にします。最後に、正常なリビジョンと最も古い不良リビジョンの範囲を bisect します。 bisect は新しいビルドプロダクトを生成せず、V8 の継続的なインフラストラクチャで以前に作成されたビルドのみに基づいていることに注意してください。

bisect が失敗する場合 #

フレーク bisect をカスタマイズするためのプロパティ #

変更する必要のないプロパティ #

ヒントとコツ #

ハングアップするテストの bisect(デッドロックなど) #

失敗した実行がタイムアウトし、パスが非常に高速に実行されている場合、timeout_sec パラメータを調整すると便利です。 bisect がハングアップした実行のタイムアウトを待つことで遅延されなくなります。たとえば、パスが通常 1 秒未満で到達する場合、タイムアウトを小さい値(たとえば 5 秒)に設定します。

容疑者に対する信頼度を高める #

実行によっては、信頼性が非常に低い場合があります。たとえば、1 回の実行で 4 つのフレークが見つかった場合、キャリブレーションは満たされます。 bisect 中は、1 つ以上のフレークを含むすべての実行は不良とみなされます。このような場合は、bisect ジョブを再起動し、to_revision を原因に設定し、元のジョブよりも多くの繰り返し回数または合計タイムアウトを使用して、同じ結論に再び到達することを確認すると便利です。

タイムアウトの問題の回避策 #

全体のタイムアウトオプションによってビルドがハングアップする場合、適切な繰り返し回数を推定し、total_timeout_sec0 に設定するのが最善です。

ランダムシードに依存するテストの動作 #

まれに、特定のランダムシードでのみコードパスがトリガーされる場合があります。この場合、extra_args を使用して修正すると効果的です。例:"extra_args": ["--random-seed=123"]。そうでない場合、ストレステストランナーは全体で異なるランダムシードを使用します。ただし、特定のランダムシードは、あるリビジョンでは問題を再現する可能性がありますが、別のリビジョンでは再現しない可能性があることに注意してください。