Linuxカーネルも人類が生み出したものである以上,
カーネルだってつらいときはあるんです
Linuxカーネルには
- ※1
- より正確に言うと
「原因追求が可能なケースも運が良ければ存在すると思っておくといいかもしれない」 ぐらいです。
UbuntuをはじめとするLinuxディストリビューションにとって,
ハードウェア・
言い方を変えると,
- ひたすらスピンロックで待ち続けるお行儀の悪いサードパーティのドライバー
- 設定が悪いとひたすら割り込みし続けるデバイス
- 変なトランザクションを受けるとSoCごと停止するコントローラー
- ソフトリセットかけるとNMI panicを誘発するデバイス
- リードするとたまに仕様と全然違う値が返ってくるレジスタ
- 意味もなくメモリーを確保しながらCPU負荷を上げ続けるユーザープロセス
カーネルはできる限り
本来はより上位に位置するシステム管理者が,
- ※2
- カーネルの不具合に遭遇したときの話です。
前置きが長くなりましたが,
情報の引き継ぎは重要です
問題が起きたときにやるべきことは,
Ubuntuには
「ユーザープロセスが死ぬ」
Linuxカーネルにはkexecと呼ばれる仕組みが存在します。これはメモリー上にカーネル本体とinitramfsをあらかじめ展開しておき,
- ※3
- 実際は,
ジャンプ前にきちんと後処理をしておかないと, 再起動中に変なDMAアクセスや割り込みが発生してうまく起動できなくなります。もちろん誰かがずっとCPUを握り続けているような状況だとジャンプ処理への移行すらおぼつきません。
クラッシュダンプシステムでは,