カーネルと同じページマージがコンテナ間でページキャッシュを共有できますか?

カーネルと同じページマージがコンテナ間でページキャッシュを共有できますか?

KSMを使用すると、特にRAMにキャッシュされている共通のオペレーティングシステム/アプリケーションファイルを含む、仮想マシンで同じメモリページをマージできます。

KSMを使用してコンテナのメモリ要件を同様に減らすことはできますか?

答え1

いいえ。

KSMは匿名(個人)ページのみをマージし、ページキャッシュ(ファイル)ページはマージしません。

仮想マシンでのみ機能します。みんなVMのメモリは、ホストプロセスにプライベートページとして保存されます。たとえば、ホストのqemuプロセスです。

(逆に、例えば、Dockerユーザーは、同じ画像間でページを共有したり、共通の祖先を持って使用したりできます。overlayfsベースのストレージドライバ)。


さらに、現在のKSMインターフェイスには、madvise(... MADV_MERGEABLE)潜在的に共有可能なすべてのスコープが必要です。コンテナ内のすべてのプロセスは、マップを作成するときにこの呼び出しを実行する必要があります。明らかに、このインターフェースは使用を含むがこれらに限定されない様々な特殊目的プロセスに適用するのがより容易であるqemu

関連情報