cgroup の memory.stat ファイルにリストされているページ キャッシュの使用状況

cgroup の memory.stat ファイルにリストされているページ キャッシュの使用状況

cgroup の memory.stat ファイルには、その cgroup のページ キャッシュ使用量 (cache フィールドと total_cache フィールド) がリストされます。ページ キャッシュ使用量はどのように算出されるのでしょうか?

たとえば、ファイル a.txt は cgroup A と B の両方で開かれます。A と B は両方とも a.txt の独自のキャッシュを保持していますか? それとも、a.txt のキャッシュは A と B で共有されていますか? 共有されている場合、memory.stat の A と B の両方のページ キャッシュ使用量は同じ量 (合計量) だけ増加しますか?

また、memory.stat にバッファ キャッシュまたはスワップ キャッシュのフィールドが含まれていないのはなぜですか?

ディストリビューションは Linux Mint 18.2 です。

答え1

これについては、https://www.kernel.org/doc/Documentation/cgroup-v1/memory.txt...

2.3 共有ページの計算

共有ページは、ファースト タッチ アプローチに基づいて計算されます。ページに最初にタッチした cgroup が、そのページに対して計算されます。このアプローチの背後にある原則は、共有ページを積極的に使用する cgroup は、最終的にそのページに対して課金されるということです (そのページを持ち込んだ cgroup から課金が解除されると、これはメモリ不足時に発生します)。

その他の質問については...

Linux 2.4以降では、バッファがキャッシュに追加されました(https://stackoverflow.com/a/14671569)。そのため、memory.stat には buffer 用の個別のフィールドはありません。

swap を memory.stat にリストするには、カーネルを CONFIG_MEMCG_SWAP_ENABLED でコンパイルする必要がある可能性があります。

関連情報