kexec
kexecのコードをつらつらと読んでみた。プロセスの実行関数はexecだが、こちらはkernel executionの略で、kが頭についてkexecと呼ばれる。ユーザ空間のツール(kexec-tools)と、カーネル空間のシステムコール(sys_kexec_load/sys_reboot)からなっている。
使い方の概要としては、カーネルイメージをメモリ空間にマップ(sys_kexec_load)して、切り替える(sys_reboot)というツールである。kexec-toolsは、ELFフォーマットを解釈するので、ELFフォーマットにしたがっているバイナリなら原理的には使える。将来的には、ELF以外のフォーマット(PE/COFF等)にも対応しようとしているようだが、今のところ対応していない。対応しているアーキテクチャは幅広く、ARM、Power、s390等々からx86まで複数のプラットフォームに対応している。
もともとは、再起動時にデバイスの初期化等の時間のかかる処理をスキップするために作られたのが始まりである。その後利用用途は拡大して、障害発生時に、セカンドカーネルに移ってメモリイメージをダンプする等いろいろな場面で活躍している。
- 概説
- ソースコード
- ユーザ空間
- カーネル空間
- sys_kexec_load
- linux/kexec.c at v3.16 · torvalds/linux · GitHub
- kernel_kexecはここ。
- linux/kexec.c at v3.16 · torvalds/linux · GitHub
- sys_reboot
- sys_kexec_load
- 関連資料
- ブートプロセス
- LWN.net
- Executable Format
- kexecの仕組み