Home

技術系のメモと日々の雑感

カーネルのアップデートと GRUB 設定の変化

退屈しのぎにバラックで PC を組んで CentOS 5.1 を入れた後、yum でカーネルをアップデートしたときの話。
前から GRUB の設定(grub.conf)がどんな風に引き継がれるのか気になっていて、ちょうどいい機会だったのでアップデート前後で見比べてみたら想像以上に賢かった。
アップデート前はこんな感じ。

default=0
timeout=3
#splashimage=(hd0,0)/grub/splash.xpm.gz
#hiddenmenu
title CentOS (2.6.18-53.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-53.el5 ro root=LABEL=/
        initrd /initrd-2.6.18-53.el5.img
title CentOS-original (2.6.18-53.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-53.el5 ro root=LABEL=/ rhgb quiet
        initrd /initrd-2.6.18-53.el5.img

見ての通り、いじっていたのは timeout を3秒に変更したのと、 splashimage、hiddenmenu の2行をコメントアウトしたのと、デフォルトで設定されている title 以降のエントリをコピーしてオリジナルとして残した上で kernel 行の「rhgb quiet」のオプションを削ったエントリを追加したぐらい。
ちなみに、これらは別に今回の比較のための設定ではなくて、CentOS を入れたら毎回やってる個人的なクセのようなものだけどね。
で、アップデートしたら

default=0
timeout=3
#splashimage=(hd0,0)/grub/splash.xpm.gz
#hiddenmenu
title CentOS (2.6.18-53.1.4.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-53.1.4.el5 ro root=LABEL=/
        initrd /initrd-2.6.18-53.1.4.el5.img
title CentOS (2.6.18-53.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-53.el5 ro root=LABEL=/
        initrd /initrd-2.6.18-53.el5.img
title CentOS-original (2.6.18-53.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-53.el5 ro root=LABEL=/ rhgb quiet
        initrd /initrd-2.6.18-53.el5.img

こうなった。
timeout、splashimage、hiddenmenu の設定がそのまま残るのは予想していたけど、実際に使用しているカーネルのオプションが引き継がれて、ちゃんと「rhgb quiet」が外れていたのにはちょっと感心してしまった。
たぶん /proc/cmdline を見ているんだろうけど、ここまでチェックしてくれていたらアップデート後に起動できなくなるパターンは少ないだろうね。

top の CPU ステータス

最近の top って CPU のステータス行の値がいくつか増えてるね。

Cpu(s): 0.2%us, 4.5%sy, 0.0%ni, 49.2%id, 46.2%wa, 0.0%hi, 0.0%si, 0.0%st

上の例はディスクの書き込みが連続したときのものなので、wa の値が上がっているということはこの値が I/O Wait だということは想像がつくけど、問題はあとの3つ。
man ページには特に説明はないし、Web で情報を探してもうまくヒットしない。
どこから値を引っ張ってきているのかだけ分かればいいんだけどな。
で、暇だったので調べてみた。
滅多にソースなんて見ないんだけど、今回は他に方法が浮かばなかったので procps のソースをダウンロードして覗いてみたら、すぐに /proc/stat の1行目を読んでいることが分かった。
ここまでくればあとは簡単。
proc の man ページによると、wa、hi、si はカーネル 2.6 から追加されたもので、st は 2.6.11 以降に追加されたもらしい。
それぞれの項目の意味は次の通りだ。

wa:I/O Wait           I/O 処理の完了を待っていた時間
hi:Hardware Interrupt 割り込み処理を行った時間
si:Software Interrupt ソフトウェア割り込み処理を行った時間
st:Stolen Time        仮想化環境で他の OS に消費された時間

もう Xen を想定して作ってあるんだね。
でも、Stolen Time(盗まれた時間)は他にもっとイメージしやすい呼び方がありそうな気が・・・。