perfstat_memory_total インターフェース

perfstat_memory_total インターフェースは、 libperfstat.h ファイルに定義されている perfstat_memory_total_t 構造体を戻します。

perfstat_memory_total_t 構造から選択されたフィールドには、以下のものが含まれます。
項目 ディスクリプター
結合されたバイト数 合体された呼び出し側区画の論理実メモリーのバイト数
結合済みメモリプールバイト数 呼び出し側区画がプール全体の統計の表示を許可されている場合は、呼び出し側区画のメモリー・プールに合体された論理実メモリーのバイト数。それ以外の場合は、ゼロに設定されます。
仮想合計 (virt_total) 仮想メモリーの量 (4 KB ページの単位)
実際の合計 (real_total) 実メモリーの量 (4 KB ページの単位)
フリー (real_free) 空いている実メモリーの量 (4 KB ページ単位)
固定 (real_pinned) 固定されたメモリーの量 (4 KB ページ単位)
pgins ページインされたページ数
ページアウト ページアウトされたページ数
pgsp_total (pgsp_total) ページング・スペースの合計量 (4 KB ページ単位)
pgsp_free 空きページング・スペースの量 (4 KB ページ単位)
pgsp_rsvd (pgsp_rsvd) 予約済みページング・スペースの量 (4 KB ページ単位)
注: ページの統合は、ハイパーバイザーが重複ページを検出し、すべてのユーザー読み取りを単一コピーに送信し、他の重複物理メモリー・ページを再利用できる透過的な操作です。
その他のいくつかのメモリー関連メトリック (ページインおよびページアウトされたページング・スペースの量、システム・メモリーの量など) も返されます。 完全なリストについては、Files Referencelibperfstat.hヘッダーファイルのperfstat_memory_total_tセクションを参照のこと。
上記のプログラムは、 vmstat の動作をエミュレートし、 perfstat_memory_total インターフェースの使用方法の例も示しています。
#include <stdio.h>
#include <libperfstat.h>

int main(int argc, char* argv[]) {
    perfstat_memory_total_t minfo;
    int rc;
    rc = perfstat_memory_total(NULL, &minfo, sizeof(perfstat_memory_total_t), 1);    
    if (rc != 1) {
        perror("perfstat_memory_total");
        exit(-1);
    }  
    printf("Memory statistics\n");
    printf("-----------------\n");
    printf("real memory size                 : %llu MB\n",
           minfo.real_total*4096/1024/1024);
    printf("reserved paging space            : %llu MB\n",minfo.pgsp_rsvd);
    printf("virtual memory size              : %llu MB\n",
           minfo.virt_total*4096/1024/1024);
    printf("number of free pages             : %llu\n",minfo.real_free);
    printf("number of pinned pages           : %llu\n",minfo.real_pinned);
    printf("number of pages in file cache    : %llu\n",minfo.numperm);
    printf("total paging space pages         : %llu\n",minfo.pgsp_total);
    printf("free paging space pages          : %llu\n", minfo.pgsp_free);
    printf("used paging space                : %3.2f%%\n",
        (float)(minfo.pgsp_total-minfo.pgsp_free)*100.0/
        (float)minfo.pgsp_total);
    perfstat_memory_total(NULL, &minfo, sizeof(perfstat_memory_total_t), 1);
    printf("Memory statistics\n");
    printf("-----------------\n");
    printf("real memory size                 : %llu MB\n",
           minfo.real_total*4096/1024/1024);
    printf("reserved paging space            : %llu MB\n",minfo.pgsp_rsvd);
    printf("virtual memory size              : %llu MB\n",
           minfo.virt_total*4096/1024/1024);
    printf("number of free pages             : %llu\n",minfo.real_free);
    printf("number of pinned pages           : %llu\n",minfo.real_pinned);
    printf("number of pages in file cache    : %llu\n",minfo.numperm);
    printf("total paging space pages         : %llu\n",minfo.pgsp_total);
    printf("free paging space pages          : %llu\n", minfo.pgsp_free);
    printf("used paging space                : %3.2f%%\n",
        (float)(minfo.pgsp_total-minfo.pgsp_free)*100.0/
        (float)minfo.pgsp_total);
    printf("number of paging space page ins  : %llu\n",minfo.pgspins);
    printf("number of paging space page outs : %llu\n",minfo.pgspouts);
    printf("number of page ins               : %llu\n",minfo.pgins);
    printf("number of page outs              : %llu\n",minfo.pgouts);
}
上記のプログラムは、次のような出力を生成します。
Memory statistics
-----------------
real memory size                 : 256 MB
reserved paging space            : 512 MB
virtual memory size              : 768 MB
number of free pages             : 32304
number of pinned pages           : 6546
number of pages in file cache    : 12881
total paging space pages         : 131072
free paging space pages          : 129932
used paging space                : 0.87%
number of paging space page ins  : 0
number of paging space page outs : 0
number of page ins               : 20574
number of page outs              : 92508
上記のプログラムは、 vmstat の 動作をエミュレートし、 perfstat_memory_total の使用方法も示します。