こんにちわ。エンジニアの吉田です。

Linuxで cat /proc/stat が出力するcpuの値を見ていたところ、マニュアルに載っていない
10個目の値があったので、なんだろうと思い調査してみました。
(ちなみに、確認していたLinuxのKernelのバージョンは2.6.35です。)



まず、cat /proc/stat の結果から cpu という文字列でgrepした結果が以下のような感じです。

[root@localhost ~]# cat /proc/stat | grep cpu
cpu  7217 6329 25998 154652671 39215 0 422 6715 0 0
cpu0 4356 4567 14124 77298971 33018 0 130 4617 0 0
cpu1 2860 1762 11874 77353700 6196 0 292 2097 0 0

各値が何を意味するかは、man proc ドキュメント内の /proc/stat の説明を見るとわかるはずです。
man procの説明では、左から順番に以下のものであると書かれていました。

  1. user
  2. nice
  3. system
  4. idle
  5. iowait (kernel2.5.41から)
  6. irq (kernel2.6.0-test4から)
  7. softirq (kernel2.6.0-test4から)
  8. steal (kernel2.6.11から)
  9. guest (kernel2.6.24から)

9個しか説明がないけど、cat /proc/stat では値が10個並んでいる。。。
これはなんだろうと思い、調べてみます。


「proc stat tenth column」などといった単語で調べてみると以下のサイトが見つかりました。

■Gentoo Forums :: View topic - /proc/stat interpretation
http://forums.gentoo.org/viewtopic-t-849981-start-0.html

どうやら、10個目の値は guest_nice というものを示す値のようですね。


ヒントを得たので、kernelのgitリポジトリに guest_nice がいつ追加されたのかを追ってみます。
「guest_nice」でググってみると、kernel_stat.h というファイルに変更が入っていそうなことがわかりました。

gitリポジトリからkernel_stat.hの変更履歴を調べてみたところ、どうやら、下記のコミットで
fs/proc/stat.c というファイルに guest_nice という項目が追加されたようなことがわかりました。
http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=commit;h=ce0e7b28fb75cb003cfc8d0238613aaf1c55e797


というわけで、 /proc/stat で出力されるcpuの値は以下の10個みたいですね。(guest_niceはkernel2.6.33からあるみたい)

  1. user
  2. nice
  3. system
  4. idle
  5. iowait (kernel2.5.41から)
  6. irq (kernel2.6.0-test4から)
  7. softirq (kernel2.6.0-test4から)
  8. steal (kernel2.6.11から)
  9. guest (kernel2.6.24から)
  10. guest_nice (kernel2.6.33から)

kernelがオープンソースって素敵ですね。
デワデワ。