フレークビセクト
フレークテストはボットでの別のステップで報告されます(ビルド例)。
各テストログには、自動フレークビセクトをトリガーするための事前入力されたコマンドラインが提供されます。例:
コマンドラインでフレークビセクトをトリガー:
bb add v8/try.triggered/v8_flako -p 'to_revision="deadbeef"' -p 'test_name="MyTest"' ...
初めてフレークビセクトをトリガーする前に、ユーザーはgoogle.comアカウントでログインする必要があります:
bb auth-login
その後、提供されたコマンドを実行し、フレークビセクトを実行しているビルドURLが返されます(例)。
運が良ければ、ビセクションは疑わしいポイントを指摘します。そうでなければ、さらに読み進めることをお勧めします…
詳細な説明
技術的詳細については、トラッカーバグをご覧ください。フレークビセクトのアプローチはFinditと同じ意図を持っていますが、異なる実装を使用しています。
仕組みは?
ビセクトジョブは3つのフェーズで構成されています: 校正、後方ビセクト、内側ビセクト。校正では、総タイムアウト(または繰り返し回数)を倍増させてテストを繰り返し、1回の実行で十分なフレークが検出されるまで実施されます。その後、後方ビセクトはGit範囲を倍増させてフレークがないリビジョンを見つけます。最後に、良好なリビジョンと最も古い不良リビジョンの範囲内をビセクトします。ビセクトは新しいビルド製品を生成せず、V8の継続的インフラストラクチャで以前に作成されたビルドに基づいています。
ビセクトが失敗する場合…
- 校正中に信頼性が確保できない場合。一億分の一のフレークまたは他のテストが並行して実行された場合にのみ見える不安定な動作に典型的です(例: メモリ集約型テスト)。
- 原因が古すぎる場合。ビセクトは一定のステップ数後に撤退するか、または古いビルドがアイソレートサーバーで利用できなくなった場合。
- ビセクトジョブ全体がタイムアウトする場合。この場合、古い既知の不良リビジョンで再起動することができるかもしれません。
フレークビセクトをカスタマイズするためのプロパティ
extra_args
: V8のrun-tests.py
スクリプトに渡される追加の引数。- repetitions: テスト繰り返しの初回回数(
run-tests.py
の--random-seed-stress-count
オプションに渡される;total_timeout_sec
が使用される場合は未使用)。 timeout_sec
:run-tests.py
に渡されるタイムアウトパラメーター。to_revision
: 不良とわかっているリビジョン。ここからビセクトが開始されます。total_timeout_sec
: ビセクトステップ全体の初回の総タイムアウト。この時間は校正中に必要に応じて数回倍増されます。repetitions
プロパティを代わりに使用したい場合は0に設定します。variant
:run-tests.py
に渡されるテストバリアントの名前。
変更が必要ないプロパティ
bisect_buildername
: ビセクト用のビルドを生成したビルダーのマスター名。bisect_mastername
: ビセクト用のビルドを生成したビルダーの名前。build_config
: V8のrun-tests.py
スクリプトに渡されるビルド構成(そこでのパラメーター名は--mode
、例:Release
やDebug
)。isolated_name
: アイソレートファイルの名前(例:bot_default
、mjsunit
)。swarming_dimensions
: テストを実行するボットタイプを分類するためのスウォーミングディメンション。文字列のリストとして渡され、各文字列はname:value
の形式で表されます。test_name
: run-tests.pyに渡される完全修飾テスト名。例:mjsunit/foobar
。
ヒントとコツ
ハングするテストのビセクト(例: デッドロック)
失敗する実行がタイムアウトし、成功する実行が非常に速く走る場合、timeout_secパラメーターを調整することをお勧めします。ハング実行がタイムアウトするのを待つことなくビセクトが遅延しないようにします。例えば、成功する場合が通常1秒以内で達成される場合、タイムアウトを小さい値に設定します。例: 5秒。
疑わしいポイントに対する信頼性を向上させる
いくつかの実行では信頼性が非常に低い場合があります。たとえば、校正が1回の実行で4つのフレークが見つかった場合に満たされることがあります。ビセクトの間、1つ以上のフレークを含むすべての実行が不良とみなされます。このような場合、繰り返し回数の増加や総タイムアウトを使用してビセクトジョブを再起動し、その結論が再度確認できるようにすることが役立つかもしれません。
タイムアウト問題の回避
総タイムアウトオプションがビルドをハングさせる場合、適切な繰り返し回数を見積もり、total_timeout_sec
を0
に設定するのが最善です。