net-snmpの動作を調べる(未完)

ほぼ勘で作業している事をあらかじめ明記しておく。
更に言えば、答えにたどり着けていない・・・。
そして、文法を理解するのに時間が超かかる・・・。

関連ファイルの検索

  1. straceでsnmpdの動作を確認
    • /proc/statと/proc/vmstatを開いているのを確認
  2. net-snmp-5.3.1のソースコードをDLしてくる
    • アーカイブを展開してディレクトリ内を/proc/statと/proc/vmstatで検索
    • /proc/vmstatはなんかコメントアウトっぽかった(straceでは出てくるのに)ので、/proc/statに引っ掛かったものを調べる → agent/mibgroup/hardware/cpu/cpu_linux.c

net-snmp-5.3.1/agent/mibgroup/hardware/cpu/cpu_linux.cの確認

関係ありそうな部分発見

    b = strstr(buff, "cpu ");
    if (b) {
        if (!has_cpu_26 ||
            sscanf(b, "cpu  %llu %llu %llu %llu %llu %llu %llu", &cusell,
                   &cicell, &csysll, &cidell, &ciowll, &cirqll, &csoftll) != 7)
 {
            has_cpu_26 = 0;
            sscanf(b, "cpu  %llu %llu %llu %llu", &cusell, &cicell, &csysll,
                   &cidell);

        } else {
            cpu->wait_ticks   = (unsigned long)ciowll;
            cpu->intrpt_ticks = (unsigned long)cirqll;
            cpu->sirq_ticks   = (unsigned long)csoftll;
        }
        cpu->user_ticks = (unsigned long)cusell;
        cpu->nice_ticks = (unsigned long)cicell;
        cpu->sys_ticks  = (unsigned long)csysll;
        cpu->idle_ticks = (unsigned long)cidell;

今度は、idle_ticksを探す。

# grep -r "idle_ticks" ./
./agent/mibgroup/ucd-snmp/vmstat.c

./agent/mibgroup/ucd-snmp/vmstat.cの中を確認する。

関係ありそうな部分

    dridl = cpu->idle_ticks;

    ddiv2 = ddiv + cpu->wait_ticks
                 + cpu->intrpt_ticks
                 + cpu->sirq_ticks;
    if (cpu->history) {
        duse  -= (cpu->history[0].user_hist + cpu->history[0].nice_hist);
        dsys  -=  cpu->history[0].sys_hist;
        didl  -=  cpu->history[0].idle_hist;
        ddiv2 -=  cpu->history[0].total_hist;
    }

(中略)

    case cpuidle:
        return (ddiv2 ? 100 * didl / ddiv2 : 0);

現状

よくわからない。vmstat.cにも似たような記述があるので、どっちがあたりなのかなーとか。今の自分の力量だと、これ以上net-snmpの動作を調べるのは難しいと思った。空き時間があったらやる事にする。