toge's diary

コンピュータ関連の趣味をつらつらと。

getrusage()を使ってみる

ふと自分の作っているプログラムはどのくらいのメモリを使用するのか知りたくなる。
とりあえずLinuxで動けば良かったのでgetrusage()使ってみることに。

struct rusage u;
int sz = getpagesize();

getrusage(RUSAGE_SELF, &u);

// user time
u.ru_utime.tv_sec + u.ru_utime.tv_usec / 1000000.0;
// system time
u.ru_stime.tv_sec + u.ru_stime.tv_usec / 1000000.0;
// メモリ使用量(byte)
u.ru_minflt * sz;
// ページフォールト(byte)
u.ru_majflt * sz;
// スワップ(byte)
u.ru_nswap  * sz; 

メモリの単位はページなので、getpagesize()で1ページあたりのbyte数を取得する必要があります。
うげ、デカいテクスチャとVBOがあるせいか、26Mも使ってるよ。
知らない間に富豪プログラミング、これはまずいな。

結構良い具合に結果が得られるのでid:shibacho:20040805#p4を思い出しながら子プロセスのリソース使用量を計測するプログラムでも作てみようと思う。
シグナル使うのって半年ぶりぐらい。色々忘れてそう。

.................

見事に目論見が外れました。(T_T)
そっか、getrusage(RUSAGE_CHILDREN)は「呼び出したプロセスの子供のうち終了して待ち状態にあるプロセスの使用量」なんですね。

http://www.linux.or.jp/JM/html/LDP_man-pages/man2/getrusage.2.html 参照。

しょうがないのでよりLinuxべったりな方向で。
procpsのソース見て/procから情報取り出していることを確認したので、/procによるLinuxチューニング[前編]を見ながら、情報取得ルーチンを作成中。
なんか徐々にに重い作業になってきたな。(^_^;