# 障害スケッチング
## 定義
障害スケッチング(failure sketching)は、本番環境で発生した障害に対して、開発者が障害を手元で再現することなく根本原因診断を行えるよう、「失敗スケッチ(failure sketch)」と呼ぶ高レベル実行トレースを自動生成するデバッグ手法である。Kasikci ら(EPFL, Intel)が SOSP 2015 で提案した([[@2015__SOSP__Failure Sketching - A Technique for Automated Root Cause Diagnosis of In-Production Failures]])。
失敗スケッチは以下の性質を持つ:
1. 障害発生点へのデータ・制御依存を持つプログラム文のみを含む(全実行ログではない)
2. 失敗実行と成功実行の差異——障害と最も高い正相関を示す「障害予測子(failure predictor)」——を明示する
この概念は、レコード/リプレイシステムが障害の完全な再現を目指すのに対し、根本原因診断に必要な最小限の情報に特化している点で異なる。
### Gist による実装
プロトタイプ [[Gist]] は 3 段階で動作する:
1. **静的スライス計算**: 障害発生文から後向きスライシングで、障害に関与しうる文の集合を静的に求める
2. **スライス精緻化**: 適応的スライストラッキング(AsT)・Intel Processor Trace(制御フロー)・ハードウェアウォッチポイント(データフロー)の組み合わせで、実際に実行された文に絞り込み、静的解析で見落とした文を追加する
3. **根本原因特定**: 失敗実行と成功実行の協調収集データから、F 値によりランク付けした障害予測子を特定する
### 評価結果
7 プログラム 11 バグで:
- 平均総合精度 96%(関連精度 92% + 順序精度 100%)
- 平均ランタイムオーバーヘッド 3.74%(レコード/リプレイ系比で約 166 倍低い)
- 2〜5 回の障害再発でスケッチが完成
---
## 横断的知見
- (現時点では本論文が単独ソースのため、複数ソース突き合わせによる横断的知見は蓄積待ち)
---
## 未解決の問い
- 障害スケッチングは Intel PT への依存が大きい。ARM や RISC-V など他アーキテクチャでの実現可能性はどうか。
- 「失敗実行と成功実行の差異」という考え方は、マイクロサービス等のクラウド環境の障害(ハードウェアではなくサービス間依存に起因)にも適用できるか。その場合、「実行トレース」はどのレベル(OS/言語ランタイム/サービスメッシュ)で取得するのが適切か。
- 障害予測子の F 値ランキングと、開発者が実際に「根本原因を見つけた」と感じるまでの認知負荷は相関するか。精度 92% のスケッチと 100% のスケッチで診断時間にどの程度差が出るか。
- 本番 LLM 推論・訓練クラスタで発生する障害(ストラグラー、NaN 伝播、通信タイムアウトなど)に対して、障害スケッチングのアイデア——「失敗実行と成功実行の差異の最小集合」——を AIOps 文脈で応用できるか。
---
## 関連
- 実装: [[Gist]]
- 親概念: [[根本原因分析]] / [[Fault Localization]]
- 出典: [[@2015__SOSP__Failure Sketching - A Technique for Automated Root Cause Diagnosis of In-Production Failures]]
- 著者: [[Baris Kasikci]] / [[George Candea]]
## 出典
- [[@2015__SOSP__Failure Sketching - A Technique for Automated Root Cause Diagnosis of In-Production Failures]] — 概念の提案論文。Gist の設計・実装・評価。(SOSP 2015, Kasikci ら)