知っている:
仮想メモリはユーザ空間とカーネル空間に分けられ、物理メモリにマッピングされます。ユーザープロセスがファイルにアクセスすると、カーネルはプロセスアクセス(ページキャッシュ)を付与する前にファイルをメモリにキャッシュします。
しかし、
ページキャッシュのメモリ空間はカーネル空間によって制限されますか?それとも、ページキャッシュサイズを制限するLinux構成に加えて他に何がありますか?
答え1
ページキャッシュはRAMに記憶される。原則として、物理メモリ全体を占めることができます。ない理由は、メモリが他の目的にも使用されるためです。
「匿名」(スワップ対応)メモリ割り当ては、ページキャッシュのファイルサポート割り当てと競合する。どちらもメモリマネージコードでバランスが取れています。メモリ管理の具体的な動作は非常に複雑です。新しいページ割り当て用の空きRAMがない場合、Linuxは古いスワップバックアップページまたは古いファイルバックアップページを削除するかどうかを選択します。設定値を使用して選択項目のバランスを調整できますvm.swappiness
。
Linuxでサポートされているアーキテクチャの中には、仮想アドレス空間が不足しています(32ビットまたは31ビットのみ:-)。これは実際にいいえページキャッシュのサイズを制限します。ページキャッシュは、一時的な仮想マッピングの使用をサポートするために明示的に作成されます。主なソースを確認してください:https://www.kernel.org/doc/html/latest/vm/highmem.html
メモリの他の用途は次のとおりです。
削除できず、キャッシュされていない割り当て。カーネルコードのようなもの。これらの割り当てには、を使用して実行されたコア内の割り当ても含まれます。
kmalloc()
これは(ほとんど?)「スラブ」割り当てとして表されます。他のタイプもあります。避けられないメモリ割り当ての例には、全体的に非常に大きくなる可能性があるカーネルネットワークバッファがあります。
「透かし」メモリ。これは、ストレス状況でメモリ管理を進めるために予約されています。たとえば、透かしに達し、以前の匿名ページを交換して他の作業用のスペースを作成するためにいくつかのメモリが必要な場合に、これらの予約を使用できると思います。通常、予約スペースはメモリの1〜3%です(大規模システムでは少ない)。 私のシステムの「透かし」メモリ予約はどのくらいですか? 小規模システムでは、この割合は3%まで高くなる可能性があり、これは「透明な巨大ページ」に関連しています。