net-snmpの動作を調べる(未完)
ほぼ勘で作業している事をあらかじめ明記しておく。
更に言えば、答えにたどり着けていない・・・。
そして、文法を理解するのに時間が超かかる・・・。
関連ファイルの検索
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の動作を調べるのは難しいと思った。空き時間があったらやる事にする。