# Fault Injection Techniques and Tools
> [!abstract] 概要
> 障害注入は、計算機システムのディペンダビリティ(dependability)評価において重要である。研究者と技術者は、ハードウェアでもソフトウェアでも実装できる多くの新しい障害注入手法を生み出してきた。
## 論文情報
- 著者: Mei-Chen Hsueh(イリノイ大学アーバナ・シャンペーン校 Coordinated Science Laboratory)、[[Timothy K. Tsai]](Bell Labs, Lucent Technologies)、[[Ravishankar K. Iyer]](同校)
- 掲載: IEEE Computer, 1997 年 4 月号, pp. 75-82(NASA-CR-206801 として収録)。arXiv なし。
- 種別: 8 ページの解説記事。文献 10 件。
## 概要
障害注入を「試作システムの実験的ディペンダビリティ評価」の中核手法と位置づけ、その環境構成、ハードウェア実装(接触型・非接触型)、ソフトウェア実装(コンパイル時・実行時)の技法を整理する。代表的な 7 ツール(Messaline, FIST, MARS, Ferrari, Ftape, Doctor, Xception)を事例に、注入点・トリガ・摂動・コストのトレードオフを比較し、ハードウェア手法は低水準、ソフトウェア手法は上位の検知・回復機構の評価に使い分けると結論づける。
## 問題設定
大規模で複雑なシステムでは、障害の破壊性と誤りの潜伏時間の長さから、運用環境で故障の原因を特定したり障害シナリオを再現したりすることが難しい。そこで実験ベースの手法で、システムの障害耐性(検知・回復機構を含む)を調べる必要がある。設計段階から運用段階まで適用でき、次の 3 手法を挙げる。
- **シミュレーションベースの注入**: 概念・設計段階で使う低コストの手法。誤りや故障が既定の分布に従うと仮定し、耐障害機構の有効性を評価する。実装詳細が未確定なので、単純化した仮定に基づく。
- **試作・稼働システムへの注入**: 仮定なしで評価でき、より正確な結果が得られる。依存性のボトルネックの特定、障害下の挙動の把握、誤り検知・回復のカバレッジ判定、耐障害機構の有効性評価に使う。ただし模擬した障害の研究にしか向かず、MTBF や可用性のような指標は得られない。
- **稼働システムの実測**: 実ワークロード下の自然発生の誤りや故障のデータから、実際の誤り・故障の過程を理解し解析モデルを作る。ただし障害が稀なため収集に時間がかかり、現場条件の変動で統計的妥当性に疑問が残る。
## 提案手法
論文は新手法の提案ではなく、既存技法の体系化である。
### 障害注入環境
![[wiki/sources/_attachments/1997__Computer__Fault-Injection-Techniques-and-Tools/fig01-fault-injection-environment.png]]
*Figure 1: 障害注入環境の基本構成要素*
環境は、対象システム、障害注入器、障害ライブラリ、ワークロード生成器、ワークロードライブラリ、コントローラ、モニタ、データ収集器、データ解析器からなる。注入器は対象がワークロード生成器の命令を実行する間に障害を注入する。モニタは実行を追跡して必要時にデータ収集を起動する。障害ライブラリを分離することで柔軟性と可搬性を得る。
### ハードウェア障害注入
ハードウェア障害注入は、追加ハードウェアで対象のハードウェアに障害を入れる。低水準の障害モデル(例: 短絡としてのブリッジ障害)に基づき、タイマやアドレスバス上のイベントで障害をトリガし、高い時間分解能と低い摂動で影響を監視できる。CPU の障害潜伏時間の測定など、高い時間分解能や、他手法で到達しにくい箇所へのアクセスが必要な場面に適する。
- **接触型(ピンレベル注入)**: ピンの電流・電圧を外部から変える。アクティブプローブは電流を加えるためスタックアット障害に限られ(ピン間にまたげばブリッジ障害も可)、電流過多で素子を損傷する恐れがある。ソケット挿入は対象と基板の間にソケットを挟み、スタックアット、オープン、より複雑な論理障害を注入し、ピン信号を反転、隣接ピンや過去の信号との AND/OR にもできる。障害の時刻と位置の制御性が良く摂動はほぼない。ただしチップ内部で起きる伝統的障害モデルとは同一でない。電源側のアクティブプローブは電源擾乱を注入できるが、素子の損傷リスクがある。
- **非接触型**: 重イオン放射や電磁干渉で対象チップ内に擬似電流を生じさせる。自然の物理現象を模す点が好まれるが、放射や電界の発生時点を制御できず、障害の時刻と位置を厳密にトリガしにくい。
### ソフトウェア障害注入
専用ハードウェアが不要で、アプリケーションや OS を対象にできる。対象がアプリケーションなら注入器はアプリ内かアプリと OS の間に置き、OS が対象なら OS に組み込む。欠点は次の通り。
- ソフトウェアからアクセスできない箇所へ注入できない。
- 計装がワークロードを乱し、ソフトウェア構造すら変えうる。
- 時間分解能が低い。メモリ障害のような潜伏の長い障害では問題にならないが、バスや CPU の障害のような短い潜伏では伝播などの挙動を捉え損ねる。ソフトウェア注入の多様性とハードウェア監視の精度を組み合わせるハイブリッド手法で緩和できるが、観測点とデータ量が制限され、コストも上がる。
注入時期で 2 分類する。
- **コンパイル時注入**: 実行前にソースやアセンブリコードを改変して障害イメージを生成する。実行時に追加ソフトウェアも摂動も不要で、障害が埋め込み済みなので永続障害を模擬でき、実装も単純である。一方、ワークロードの実行中には注入できない。
- **実行時注入**: 注入のトリガ機構が必要である。
- タイムアウト: タイマ満了の割り込みで注入する。最も単純でアプリの改変は不要だが、時間基準のため効果が予測しにくい。一過性・間欠的なハードウェア障害の模擬に向く。
- 例外/トラップ: ハードウェア例外またはソフトウェアトラップで注入器へ制御を移す。特定の事象や状態で注入できる。
- コード挿入: 対象プログラムに命令を追加し、特定命令の前で実行時に注入する。コード改変と異なり元命令を変えない。トラップ方式と違い注入器をユーザモードで動かせる。
## 新規性
個別ツールの提案ではなく、ハードウェア/ソフトウェア、接触/非接触、コンパイル時/実行時という軸で 1990 年代半ばまでの障害注入技法とツールを 1 枚の枠組みで整理した点にある。コスト、摂動、損傷リスク、監視の時間分解能、注入点のアクセス性、制御性、トリガ、再現性という比較の観点を表として示した点が、手法選択の実務的指針を与える。
## 実験設定
実験は原著でなく引用された先行研究のものである。論文自身は新規実験を行わず、各ツールの実施事例を紹介する。
- Messaline(LAAS-CNRS): アクティブプローブとソケットによるピンレベル注入。最大 32 点を同時に注入でき、各注入点に障害の活性化を検知する素子を持つ。鉄道の集中連動制御システムと Esprit Delta-4 の分散システムで使用された。
- FIST(Chalmers 工科大学): 接触・非接触の併用。真空チャンバ内で 2 プロセッサ計算機の一方に重イオンを照射し、他方を基準として比較する。電源擾乱は Vcc ピンに MOS トランジスタを挿入して電圧降下量を制御する。
- MARS(ウィーン工科大学): 分散耐障害アーキテクチャ。重イオン、ピンレベル、電磁干渉の 3 手法で誤り検知機構を評価した。
- Ferrari(テキサス大学オースティン校): ソフトウェアトラップ(プログラムカウンタまたはタイマで起動)で CPU・メモリ・バス障害を注入。Sun SparcStation 上で実験。
- Ftape(イリノイ大学): CPU のユーザレジスタ、メモリ、ディスクに注入。合成ワークロード生成器と組み合わせ、ワークロード活動に応じた注入戦略を取る。Tandem の耐障害計算機で使用。
- Doctor(ミシガン大学): CPU・メモリ・ネットワーク通信の障害。タイムアウト、トラップ、コード改変の 3 種のトリガ。分散リアルタイム系 Harts で使用。
- Xception(コインブラ大学): プロセッサ内蔵のデバッグ・性能監視機能と例外トリガを使う。Parsytec の PowerPC 601 並列機で実施。
![[wiki/sources/_attachments/1997__Computer__Fault-Injection-Techniques-and-Tools/fig02-messaline.png]]
*Figure 2: Messaline の全体構成*
![[wiki/sources/_attachments/1997__Computer__Fault-Injection-Techniques-and-Tools/fig03-fist.png]]
*Figure 3: FIST の環境*
![[wiki/sources/_attachments/1997__Computer__Fault-Injection-Techniques-and-Tools/fig04-ftape.png]]
*Figure 4: Ftape の環境*
## 実験結果
- MARS の比較では、3 手法は補完的で異なる種類の誤りを生む。ピンレベル注入は CPU 外の誤り検知機構をより効果的に働かせ、重イオンと電磁干渉はソフトウェア・アプリケーションレベルの検知機構の試験に向く。
- FIST では、重イオン放射と電源擾乱は制御フローとデータの誤りに類似の影響を与えるが、重イオンは主にアドレスバスの誤り、電源擾乱は主に制御信号に影響する。
- Ferrari では、誤り検知は障害の種類に強く依存する。タスクメモリの障害は最も高い検知率だった(トラップをループ内に置いて繰り返し注入されたため)。I/O ルーチンやシステムライブラリの障害は実行頻度が低いため多くが未検知だった。
- Xception では、特定のプロセッサ機能ユニットで、注入障害の最大 73 パーセントが未検知の誤った結果になり、誤り検知機構の欠陥が示された。
- Doctor は Harts で、隣接ノード間の間欠的なメッセージ喪失の影響とルーティングの効果を調べ、メッセージ配送の回復モデルの検証に使われた。
- Ftape は耐障害性ベンチマークの基盤にもなり、システム障害の発生と障害下の性能低下量を測る。
![[wiki/sources/_attachments/1997__Computer__Fault-Injection-Techniques-and-Tools/tab01-injection-methods-by-fault-model.png]]
*Table 1: 障害モデル別の障害注入実装手法*
![[wiki/sources/_attachments/1997__Computer__Fault-Injection-Techniques-and-Tools/tab02-characteristics.png]]
*Table 2: 障害注入手法の特性*
## 考察
- 手法の選択は、対象とする障害種別と作成の手間による。スタックアット障害の制御にはハードウェア注入器が適し、永続障害のソフトウェアによる注入は高オーバーヘッドか不可能である。データ破損ならソフトウェアで足りる。メモリのビット反転は両方で注入できるため、コスト・精度・侵襲性・再現性が判断材料になる。
- 両者の違いは、アクセスできる注入点、コスト、摂動の大きさに集約される。ハードウェアは非ソフトウェア可視の内部素子まで届く。ソフトウェアはメモリやレジスタなどソフトウェア状態への変更に便利である。よって低水準の誤り検知・マスク機構の評価にはハードウェア手法、上位の機構の試験にはソフトウェア手法を使う。ソフトウェアは安価だが、対象上でソフトウェアを実行するため摂動オーバーヘッドが大きい。
- Xception のようにトリガをアドレスアクセスに基づかせると、実験は再現可能になる。
## 強み / 弱点・課題
- 強み: 手法・トリガ・ツールを比較の観点付きで短く俯瞰でき、手法選択の判断材料になる。
- 弱点: 解説記事のため、各ツールの定量的な比較は乏しい。対象は 1990 年代のプロセッサとシステムで、現代のクラウド・分散システム・GPU・機械学習系への適用は扱わない。ソフトウェア注入の摂動は定性的な記述にとどまる。
- 注記: 取り込み元 PDF はスキャンで OCR 品質が低く、表 2 の画像には汚れがあるが、各セルの値は読める。