fault injectionってなあに

この記事は

Linux kernelのfalult injection機能の(特にNVMe SSDに関連する部分について)
ソースを読んだり、実際に使ってみたりする記事のうちの一つ

記事一覧

その1:fault injectionってなあに ★今回はこれ
その2:fault injection機能が埋まっている箇所のソースを読む
その3:NVMe SSDにfault injectionしてみる

(順次追加予定)

事の始まり

Kernel/VM探検隊@北陸 Part 6 - connpassへ参加してきた

satさんのセッションでは、タイトルである
「device mapperによるディスクI/O障害のエミュレーション」のほか、
それ以外のディスクI/O障害のエミュレーションの手法についても簡単な紹介があった

そもそも、kernel/driverに自分でデバッグコード埋め込まなくてもそんなことできるって初めて知ったぞ…

私はHwよりのところのドライバを触っている人なので、
紹介のあった手法の中で、よりHwに近い領域で障害をエミュレーションする、
NVMe SSDへのfault injection機能について気になった

fault injectionってなあに

意図的にエラーを発生させるための機能

通常、エラー処理は正常処理と比較するとあまり実行されない
fault injectionにより意図的にエラーを発生させ、コードのカバレッジを高めていきたいということらしい

公式のドキュメント*1 を読みながらもう少し詳細なところを確認していく
*1 Fault injection capabilities infrastructure — The Linux Kernel documentation

どこに対してfault injectionできるの

現在injection可能なのは以下

  • slab allocation failures
  • page allocation failures
  • failures in user memory access functions
  • futex deadlock and uaddr fault errors
  • kernel RPC client and server failures
  • disk IO errors
  • MMC data errors on devices permitted
  • return on specific functions
  • NVMe status code and retry flag
  • IO timeouts

この項目からはわからないが、 PMのPrepareの段階の失敗をinjectnionすることもできる様子、気になる
まだ棚ぼた的に使ってみたい箇所の発見もあるかもしれないという気がする
次回以降の記事で、いい感じのキーワードでソース上をgrepしていい感じに見ていきたい

動作のチューニング

injectnionする失敗について、以下の項目がチューニングが可能

  • likelihood of failure injection
  • interval between failure
  • how many times failures may happen at most
  • initial resource "budget"
  • verbosity of the messages
  • filtering by process
  • specifies the range of virtual addresses
  • stacktrace depth
  • inject failures into highmem/user allocations
  • inject failures into allocations that can sleep
  • minimum page allocation order
  • disconnect injection on the RPC client
  • disconnect injection on the RPC server
  • cache wait injection on the RPC
  • target function
  • shows error injectable functions(read only)
  • "error" return value

かなり沢山項目がある
使ってみながら見ていく感じかなあ

最後に

興味をくすぐるテーマに出会わせてくれたsatさん、
その機会を提供をしていただいたイベントの運営の皆さん、ありがとうございました

…もうすべての記事を書き終わったかのような口ぶりだが
どこかで力尽きたときのための念のための保険で、一応書ききるつもりはある

ちなみに、satさんがセッションと同等の内容を Youtubeにも挙げていらっしゃるのでそちらも要チェックだ
その63 device mapperによるディスクI/O障害のエミュレーション 既存ターゲット編 - YouTube
その64 分散ストレージCephのデータ破壊検知修復機能は本当に動作するのか - YouTube
その65 device mapperによるディスクI/O障害のエミュレーション カーネルモジュール自作編 - YouTube