vmstatの「スワップキャッシュ」対/proc/meminfoの「SwapCached」

vmstatの「スワップキャッシュ」対/proc/meminfoの「SwapCached」

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 cachecat /proc/meminfo話してくださいSwapCached: 0 kB

私の質問は次のとおりです

  1. どういう意味ですかswap cache
  2. どういう意味ですかSwapCached
  3. 彼らは同じですか?そうでなければ、それらの違いは何ですか?

答え1

2つのコマンドと2つのファイルがあります。

]# free -V; vmstat -V
free    from procps-ng 3.3.15
vmstat  from procps-ng 3.3.15

プロックファイル:meminfovmstat

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の内容)は、値がどのように一緒に収集されるかを示しています。isysinfo 構造です。キャッシュされているかどうかは、以前に計算されます。 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/meminfoCachedSlab

  • これは、ほぼファイルキャッシュ、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「キャッシュされた」ファイルのように扱います。この用語は他のカウンター/ツールと完全に互換性がありません。

関連情報