Load Average を取得
Load averageはhost_load_info構造体のaverun[]というメンバーに格納される。avenrunには5,15,60秒間でのload averageが格納されている。
#include <mach/host_info.h> #define CPU_STATE_USER 0 #define CPU_STATE_SYSTEM 1 #define CPU_STATE_IDLE 2 struct host_load_info { integer_t avenrun[3]; integer_t mach_factor[3]; }; typedef struct host_load_info* host_load_info_t;
この構造体を用いて有効な値を取得する時には次のhost_info関数を使う
#include <mach/host_info.h> kern_return_t host_info (host_t host, host_flavor_t flavor, host_info_t host_info, mach_msg_type_number_t host_info_count);
hostは情報を得たいhostをさしてるhost_t構造体。flavorは取得する情報の種類を表す。Load averageを取得するときはHOST_LOAD_INFOと指定。
正常に動作したときはhost_infoに値が格納される。尚、この値はLOAD_SCALEという大きさでスケールされている。host_info_countは入力時にはhost_infoの確保しているメモリの大きさ、正常に動作したときは返り値としてのhost_infoの大きさが格納されている。
また、プログラムを実行するマシンに対応したhost_t構造体を得るときは次の関数を使う。
#include <mach/host_info.h> host_name_port_t mach_host_self( void );
以下はサンプルコード。
/* load.c 60秒間で平均を取ったload averageを標準出力に表示する。 */ #include <mach/host_info.h> /* LOAD_SCALE が定義されている */ #include <mach/processor_info.h> #include <stdio.h> int main(int argc, char *argv[]) { struct host_load_info hl; mach_msg_type_number_t count = HOST_LOAD_INFO_COUNT; kern_return_t error = host_statistics(mach_host_self(),HOST_LOAD_INFO,(host_info_t)&hl,&count); double res = (double)(hl.avenrun[2])/(double)(LOAD_SCALE); printf("%lf\n",res); return 0; }