気まぐれでちょっとだけ読んでみるなど

ん~C言語読めない(ぉぃ

 あとはてなブログの書き方がわからんw

 

 

知らんかった。

 

https://github.com/zabbix/zabbix/blob/66626de6ba09a7bab4ea15a728309e3971676eb3/configure.ac#L987

にあるように、/proc/statがあれば、 そいつを読み込んでパースしてるっぽい。で、man で/proc/statのとこをみると

 

/proc/statカーネル/システムの統計。 アーキテクチャーによって異なる。 共通エントリーには以下のものが含まれる。

cpu 3357 0 4313 1362393
各種状態で消費された時間の合計値。 時間は USER_HZ を単位として計測される (ほとんどのアーキテクチャーでは USER_HZ は 1/100 秒で、 正しい値は sysconf(_SC_CLK_TCK) を使って取得できる)。
user
(1) ユーザーモードで消費した時間。
nice
(2) 低い優先度 (nice) のユーザーモードで消費した時間。
system
(3) システムモードで消費した時間。
idle
(4) タスク待ち (idle task) で消費した時間。 この値は擬似ファイル /proc/uptime の 2 番目のエントリーの値を USER_HZ 倍した値になるはずである。
iowait (Linux 2.5.41 以降)
(5) I/O の完了待ちの時間。
irq (Linux 2.6.0-test4 以降)
(6) 割り込みの処理に使った時間。
softirq (Linux 2.6.0-test4 以降)
(7) ソフト割り込みの処理に使った時間。
steal (Linux 2.6.11 以降)
(8) 盗まれた時間 (stolen time)。仮想化環境での動作時に他のオペレーティングシステムにより消費された時間である。
guest (Linux 2.6.24 以降)
(9) Linux カーネルの制御下のゲストオペレーティングシステムの仮想 CPU の 実行に消費された時間。
guest_nice (Linux 2.6.33 以降)
(10) nice が適用されたゲスト (Linux カーネルの制御下のゲストオペレーティングシステムの仮想 CPU) の 実行に消費された時間。

Man page of PROC


となる。
sysinfo.hをみると

#define ZBX_CPU_STATE_USER	0
#define ZBX_CPU_STATE_SYSTEM	1
#define ZBX_CPU_STATE_NICE	2
#define ZBX_CPU_STATE_IDLE	3
#define ZBX_CPU_STATE_INTERRUPT	4
#define ZBX_CPU_STATE_IOWAIT	5
#define ZBX_CPU_STATE_SOFTIRQ	6
#define ZBX_CPU_STATE_STEAL	7
#define ZBX_CPU_STATE_GCPU	8
#define ZBX_CPU_STATE_GNICE	9
#define ZBX_CPU_STATE_COUNT	10

zabbix/sysinfo.h at 86e41ec878b740666af51e0c04adb5b1541e3a4e · zabbix/zabbix · GitHub


となっててniceとsystemの順序が/proc/statの順序と違うような...

 

sscanfしてるあたりでなんかつじつま合わせしてるっぽい...

zabbix/cpustat.c at master · zabbix/zabbix · GitHub


ちなみにSolarisだと
/* CPU instance numbers on Solaris can be non-contiguous, we don't know them yet */
とか書いてあった。最近触ってないなぁ...