vmstatのソースコードリーディング2

/proc/statの出所を探す.
1. /proc/statはfs/proc/stat.cのproc_stat_init関数で生成されている.
proc_create("stat", 0, NULL, &proc_stat_operations);
(statカーネルモジュールでは, fileのopen, raed, llseek, releaseをそれぞれ定義している)
2. /proc/statの情報はfs/proc/stat.cのshow_stat関数で書かれている.
3. 以下のように,各値が参照されている.

  • usr: kstat_cpu(i).cpustat.user
  • nice: kstat_cpu(i).cpustat.nice
  • system: kstat_cpu(i).cpustat.system
  • idle: kstat_cpu(i).cpustat.idle, cputime64_add(idle, arch_idle_time(i))
  • iowait: kstat_cpu(i).cpustat.iowait
  • irq: kstat_cpu(i).cpustat.irq
  • softirq: kstat_cpu(i).cpustat.softirq
  • steal: kstat_cpu(i).cpustat.steal
  • guest: kstat_cpu(i).cpustat.guest
  • guest_nice: kstat_cpu(i).cpustat.guest_nice
  • ctxt: nr_context_switches()
  • btime: jif
  • processes: total_forks
  • procs_running: nr_running()
  • procs_blocked: nr_iowait()

※ for_each_possible_cpu(i), for_each_online_cpu(i),
4. /proc/stat への出力はseq_printf関数で行われる.

次は, 各値, 特にkstat_cpu(i).cpustat.userの様な構造体に値を格納している場所を探す.