[libc] getrusage

manをなんとなく眺めていたらgetrusage関数なるものがあった。 getrusageは、資源の使用量を測るための関数らしい. manにサンプルコードが載ってなかったので、とりあえずどんなものか調べるためのた、サンプルコードを作ってみた。

#include <sys/time.h>
#include <sys/resource.h>


int main()
{

        struct rusage *usage; 
        getrusage(RUSAGE_SELF, usage); /* RUSAGE_SELF か RUSAGE_CHILDRENかを指定する*/


        printf("ru_maxrss = %d \n", usage->ru_maxrss);

        printf("ru_nswap = %d \n", usage->ru_nswap);
        return 0;

}

/* rusageは以下のように定義されている */
struct rusage {
    struct timeval ru_utime; /* 使用されたユーザー時間 */
    struct timeval ru_stime; /* 使用されたシステム時間 */
    long   ru_maxrss;        /* RAM 上に存在する仮想ページのサイズ
                               (resident set size) の最大値 */
    long   ru_ixrss;         /* 共有メモリの合計サイズ */
    long   ru_idrss;         /* 非共有データの合計サイズ */
    long   ru_isrss;         /* 非共有スタックの合計サイズ */
    long   ru_minflt;        /* 利用されたページ */
    long   ru_majflt;        /* ページフォールト */
    long   ru_nswap;         /* スワップ */
    long   ru_inblock;       /* ブロック入力操作 */
    long   ru_oublock;       /* ブロック出力操作 */
    long   ru_msgsnd;        /* 送信されたメッセージ */
    long   ru_msgrcv;        /* 受信されたメッセージ */
    long   ru_nsignals;      /* 受信されたシグナル */
    long   ru_nvcsw;         /* 意図したコンテキスト切り替え */
    long   ru_nivcsw;        /* 意図しないコンテキスト切り替え */
};

出力はこんな感じ

ru_maxrss = 4
ru_nswap = 1

とりあえずリソース調査の際にはこの関数を使うとよさげ. どんな時に使うのかはよく分からないけど、共有メモリとか使ってる時にデバッグとかとして使うと予想