回答:
実際、あなたが説明したことは、バルーニングと「同じページのマージ」を混同します。区別を明確にするために、2つについて詳しく説明します。
メモリーバルーニング
これは、ゲスト仮想マシンに割り当てられたメモリの一部を別のゲストまたはホスト自体(キャッシュなど)が引き続き使用できるようにするためのトリックです。以下の方法で行われます。
ゲストカーネルにはドライバーが注入され、ゲストメモリの使用状況を監視し、未使用のメモリの一部を「盗み」ます(ゲストメモリ空間でそれを割り当て、このゲストがその範囲にアクセスできないようにします)。
次に、ホストカーネルに、実際にこれらのメモリページをコアから削除できること、ゲストで使用されないことを通知します(ゲストがメモリのプレッシャーを経験するまで、その時点でバルーンが収縮し、使用されます)再びこれらの範囲)。
最終的に、カーネルはまったく同じメモリを別のゲストに割り当てることができ、ゲストが大量の空きメモリで実行されている場合、メモリ全体の使用効率が大幅に向上します。
同じページのマージ
この手法は、何らかの理由でコピーオンライトで「準読み取り専用」としてまだマークされていない同一のメモリページを識別し、そのようにマークします。
現在、OSレベルでは、これらの種類のトリックの必要性は限られています。単純に、ほとんどの場合、同一のメモリページがある場合、それらはほとんどがアプリケーションコード、ライブラリなどであるため、すでに読み取り専用です(場合によってはCoWなしでも)。これらはメモリマップを通じてネイティブに開かれ、したがってカーネルは保持できますそれらのコピーはコアに1つだけです(存在する場合は、完全にページアウトし、必要に応じてプライマリストアからページインできるようにします)。
仮想化OSレベルでは、同じ原則が各ゲストサブシステム内に適切に適用されます。ただし、ホストカーネルは、2人のゲストがほとんど同じコードを実行しているかどうかわからないため、同じメモリを共有しています。ゲストはそれを調整するために通信しません。
システム全体で同一のメモリページをスキャンできる場合があります-ほとんどの場合、各ページ内ではなく、ゲストOS 全体で同一です-ゲストカーネルは、メモリをその範囲内に整然と保持するまともなジョブを作成します。したがって、1つのホストカーネルが50以上のゲストを処理する一般的なVM環境では、メモリの節約はかなり大きくなります。
両方同時に
バルーニングと同一ページのマージは非常にうまく共存でき、同一のシステムでかなりのメモリオーバーコミットを達成できます。
質問に答えるために、Same-Page-MergingはOSレベルで有効にできる場合があります。解釈されるページ共有に関係するため、同じバッキングファイルがなくても同一になる可能性があります。
Chromiumの例-プロセスバイナリ自体は、読み取り専用のスタートアップマップを介して既に重複排除されています-それらはまったく同じメモリスペースを共有しています。ページキャッシュ(タブのコンテンツ)は通常、ディスクキャッシュの管理方法によりプロセス間で共有されます(読み取り専用コピーオンライト)-VMの異なるプロセス間で同じオンディスクファイルをシミュレートして開くことができます-最適な感覚。
利点は、異なるJavascriptエンジンの共有状態で最も明白になりますが、それらがまったく同じメモリレイアウトで割り当てられ、メモリページ全体が同一であることを保証するかどうかはわかりません。
これは、モバイルシステムでは異なります。たとえば、AndroidはKSMを広く採用して、異なるアプリケーション間で同一のコードを重複排除します。
どちらの場合でも、Linux(Kernel SamePage Merging)で自分で有効にすることができます。ドライバーはさまざまな統計をエクスポートします。この回答を読んだ後、目的に合っているかどうかを解釈し、独自の決定を下すことができるはずです。