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 Referenceの libperfstat.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 の使用方法も示します。