仮想メモリとページキャッシュはどのように機能しますか?

仮想メモリとページキャッシュはどのように機能しますか?

知っている:

仮想メモリはユーザ空間とカーネル空間に分けられ、物理メモリにマッピングされます。ユーザープロセスがファイルにアクセスすると、カーネルはプロセスアクセス(ページキャッシュ)を付与する前にファイルをメモリにキャッシュします。

しかし、

ページキャッシュのメモリ空間はカーネル空間によって制限されますか?それとも、ページキャッシュサイズを制限するLinux構成に加えて他に何がありますか?

答え1

ページキャッシュはRAMに記憶される。原則として、物理メモリ全体を占めることができます。ない理由は、メモリが他の目的にも使用されるためです。

「匿名」(スワップ対応)メモリ割り当ては、ページキャッシュのファイルサポート割り当てと競合する。どちらもメモリマネージコードでバランスが取れています。メモリ管理の具体的な動作は非常に複雑です。新しいページ割り当て用の空きRAMがない場合、Linuxは古いスワップバックアップページまたは古いファイルバックアップページを削除するかどうかを選択します。設定値を使用して選択項目のバランスを調整できますvm.swappiness

Linuxでサポートされているアーキテクチャの中には、仮想アドレス空間が不足しています(32ビットまたは31ビットのみ:-)。これは実際にいいえページキャッシュのサイズを制限します。ページキャッシュは、一時的な仮想マッピングの使用をサポートするために明示的に作成されます。主なソースを確認してください:https://www.kernel.org/doc/html/latest/vm/highmem.html

メモリの他の用途は次のとおりです。

  1. 削除できず、キャッシュされていない割り当て。カーネルコードのようなもの。これらの割り当てには、を使用して実行されたコア内の割り当ても含まれます。kmalloc()これは(ほとんど?)「スラブ」割り当てとして表されます。他のタイプもあります。

    避けられないメモリ割り当ての例には、全体的に非常に大きくなる可能性があるカーネルネットワークバッファがあります。

  2. 「透かし」メモリ。これは、ストレス状況でメモリ管理を進めるために予約されています。たとえば、透かしに達し、以前の匿名ページを交換して他の作業用のスペースを作成するためにいくつかのメモリが必要な場合に、これらの予約を使用できると思います。通常、予約スペースはメモリの1〜3%です(大規模システムでは少ない)。 私のシステムの「透かし」メモリ予約はどのくらいですか? 小規模システムでは、この割合は3%まで高くなる可能性があり、これは「透明な巨大ページ」に関連しています。

関連情報