Fedora 24でメモリ情報を確認するために2つのコマンドを実行しましたが、スワップキャッシュサイズに関して2つの異なる結果が得られました。
最初のコマンドは次のとおりです。
[root@localhost ~]# vmstat -s
4029004 K total memory
1043700 K used memory
742144 K active memory
321916 K inactive memory
2372500 K free memory
63628 K buffer memory
549176 K swap cache
4063228 K total swap
0 K used swap
4063228 K free swap
......
2番目のコマンドは次のとおりです。
[root@localhost ~]# cat /proc/meminfo
MemTotal: 4029004 kB
MemFree: 2369712 kB
MemAvailable: 2690460 kB
Buffers: 63720 kB
Cached: 437460 kB
SwapCached: 0 kB
......
注:vmstat -s
話して549176 K swap cache
、cat /proc/meminfo
話してくださいSwapCached: 0 kB
。
私の質問は次のとおりです
- どういう意味ですか
swap cache
? - どういう意味ですか
SwapCached
? - 彼らは同じですか?そうでなければ、それらの違いは何ですか?
答え1
2つのコマンドと2つのファイルがあります。
]# free -V; vmstat -V
free from procps-ng 3.3.15
vmstat from procps-ng 3.3.15
プロックファイル:meminfo
とvmstat
Free マンページでは meminfo フィールドについて説明します。これらのフィールドのいくつかは間接的に計算されます。
vmstat
/proc/vmstat フィールドを追加するだけです。
/proc/vmstat
より体系的で長い構造を持っています。神秘的なあなたの行です。ページキャッシュ話す
nr_anon_pages 212687
nr_mapped 70247
nr_file_pages 887005
nr_dirty 64
これらの文字列は、説明を含むmmzone.hの列挙リストと比較して非常に弱くなります。
NR_ANON_MAPPED, /* Mapped anonymous pages */
NR_FILE_MAPPED, /* pagecache pages mapped into pagetables. only modified from process context */
NR_FILE_PAGES,
NR_FILE_DIRTY,
(最初はANONとFILES、ACTIVEとINACTIVEの4行の組み合わせです)
したがって、2番目のものはコマンドではなく、コマンドが依存するprocファイルの内容です。
fs/proc/meminfo.c
:
cached = global_node_page_state(NR_FILE_PAGES) -
total_swapcache_pages() - i.bufferram;
if (cached < 0)
cached = 0;
これは、独自の「キャッシュ」カウンタがなく、完全性チェックを受ける必要があることを示します。デフォルトでは、いくつかの修正を含むアクティブまたは非アクティブのすべての「ファイルページ」です。
i.buffers
「バフ/キャッシュ」フィールドに再度追加されます。free
このセクション(/proc/meminfoの内容)は、値がどのように一緒に収集されるかを示しています。i
sysinfo 構造です。キャッシュされているかどうかは、以前に計算されます。 page[] 配列は /proc/vmstat とよく似ており、この領域のページ呼び出しによってロックされます。
show_val_kb(m, "MemTotal: ", i.totalram);
show_val_kb(m, "MemFree: ", i.freeram);
show_val_kb(m, "MemAvailable: ", available);
show_val_kb(m, "Buffers: ", i.bufferram);
show_val_kb(m, "Cached: ", cached);
show_val_kb(m, "SwapCached: ", total_swapcache_pages());
show_val_kb(m, "Active: ", pages[LRU_ACTIVE_ANON] +
pages[LRU_ACTIVE_FILE]);
show_val_kb(m, "Inactive: ", pages[LRU_INACTIVE_ANON] +
pages[LRU_INACTIVE_FILE]);
show_val_kb(m, "Active(anon): ", pages[LRU_ACTIVE_ANON]);
show_val_kb(m, "Inactive(anon): ", pages[LRU_INACTIVE_ANON]);
show_val_kb(m, "Active(file): ", pages[LRU_ACTIVE_FILE]);
show_val_kb(m, "Inactive(file): ", pages[LRU_INACTIVE_FILE]);
show_val_kb(m, "Unevictable: ", pages[LRU_UNEVICTABLE]);
show_val_kb(m, "Mlocked: ", global_zone_page_state(NR_MLOCK));
キャッシュ交換無料通話キャッシュ:
隠れ家:使用メモリページキャッシュとタブレット(/proc/meminfo にキャッシュされ、SReclaimable あり)
(単純化、上記参照):
cached = NR_FILE_PAGES - total_swapcache_pages()
...SwapCachedと興味深い関係があります。名前があまり混乱していないといいと思います。
何キャッシュ交換ディスク上のファイルの場合キャッシュ交換スイッチングデバイスのANONページに適用されます。 (これが言葉になることを願っています/完全に間違っていないことを願っています)
答え2
vmstat
フィールドにはcache
フィールド合計の合計があります。cat /proc/meminfo
Cached
Slab
- これは、ほぼファイルキャッシュ、inodeキャッシュ、ディレクトリキャッシュ、追加のオブジェクトキャッシュを意味します。
swap cache
同じフィールドがから呼び出されますvmstat -s
。- この地域では何もない、zero、nilは交換に関連しています。これは無効な名前であり、常に発生します。
cat /proc/vmstat
フィールドでこの値を計算するには、次を使用します。
swap cache = nr_file_page + nr_slab_reclaimable + nr_slab_unreclaimable - meminfo_SwapCached
この観点から見ると、/proc/meminfo
このフィールドはSwapCached
ディスクキャッシュやスラブキャッシュとは関係ありません。これはクリーンメモリページに残っているスワップ量です。
ファイルキャッシュとスワップを混在させるように見える唯一のカウンタは、スワップを他のnr_file_page
「キャッシュされた」ファイルのように扱います。この用語は他のカウンター/ツールと完全に互換性がありません。