Linuxは、他のタスクを実行する前に(たとえば、スワップ前など)、キャッシュされたext4ログ書き込みから無駄な「バッファ」が回収されることをどのように保証しますか?

Linuxは、他のタスクを実行する前に(たとえば、スワップ前など)、キャッシュされたext4ログ書き込みから無駄な「バッファ」が回収されることをどのように保証しますか?

/proc/meminfo私のラップトップは通常、free -w -h約256 MBのメモリ(「バッファ」として計算)を使用して約8 GBのRAMで動作します。

メモリ使用量に興味があります。時には、あまりにも多く使用して問題が発生することがあります。 〜256MB「バッファ」の使用量は気になりませんが、気になります。

私はどのソフトウェアがそれを使用しているかを調べ、その使用法は(ほぼ完全に?)不要なようです8-)。 2つのext4ファイルシステムがマウントされており、各ログサイズは128MBです。 〜256 MBの「バッファ」使用量は、デフォルトでext4ログにキャッシュされたすべての書き込みです。

各ファイルシステムに対してログファイル全体をキャッシュする必要はないと思います。 (ほとんどの場合、少数のジャーナルにのみ「リアルタイムデータ」があります!私は使用しませんdata=journalled。)私は「バッファ」の不要な特定の使用に興味があります。私は他の用途があるかもしれないことを知っており、それらのいくつかはもっと必要になるかもしれません。たとえば、ログの一部をキャッシュするのが便利かもしれません。する現在リアルタイムデータを保存しています。

調査の結果、小規模システムでは、「バッファ」が物理RAMの30%を占めることがわかりました。

私の質問は、メモリが要求されたときにLinuxがこれらの不要な「バッファ」を大量に削除するようにする方法です。どのページキャッシュを含む他の用途に使用しますか?あなたの信仰の根拠となる証拠を引用してください。

私は歴史的な違いに特に興味がなく、「現在の」システムの動作にのみ興味があります。興味があれば、私のラップトップは現在Fedora 28、カーネルバージョン4.18.16-200.fc28.x86_64を実行しています。 (またはより小さいシステムでは、Debian 9、カーネルバージョン4.9.0-8-marvellを実行しています)。

Linuxページキャッシュの詳細

Cached私は「バッファ」の動作よりもページキャッシュの概念に慣れています。/proc/meminfofree -w -h

私は最近このトピックをもう一度読みました。オペレーティングシステムのファイルキャッシュにLinuxカーネルでどのページ置換アルゴリズムが使用されていますか?

キャッシュされていないファイルをコピーすると、読み取りや書き込みなど、キャッシュされていないファイルページへのアクセスは「非アクティブ」LRUリストにキャッシュされます。ページキャッシュからメモリを回復するとき、カーネルは最近使用された「非アクティブ」ページから始めることを好みます。古いものにもかかわらず、何度も訪れたページである「アクティブ」ページよりもこれらのページを好む。

特に、これにより、実行中のすべてのプログラムを置き換えることなく、ランダムに大容量ファイルのコピーを実行できます。重要なページは複数回アクセスされるため、実行中のプログラムのすべての重要なメモリページは「アクティブ」リストにあります。

これはLinuxメモリ管理の複雑さの最初の近似です。私はこの複雑さの専門家ではないので、ここで「いいね」のようなあいまいな言葉を使っています。

理想的には、ページキャッシュを回収する前に、不要な「バッファ」を先に回収したいと思います。 (ページキャッシュの一部として「バッファ」を計算する場合は、キャッシュされた通常のファイルよりも不要な「バッファ」をリサイクルしたいことを理解する必要があります。)

だから気になります。 「非アクティブ」ページがキャッシュされる前に、不要な「バッファ」がリサイクルされますか?それとも、「アクティブ」ページがキャッシュされる前にリサイクルされる傾向があると言えますか?それとも、ページキャッシュと比較する前に、より詳細な説明をする必要がありますか?

答え1

これは、一般的に明確な好みがあるのではなく、訪問回数が通常少ないために発生します。メモリサブシステムは、プロセスアドレス空間内のディスクブロック、物理メモリ、および仮想アドレスを互いにマッピングする。バッファまたはキャッシュページとプロセス割り当ての唯一の違いは、プロセスマッピングがあるかどうかです。

メモリ不足があるたびに、システムはディスクに最新のコピーを持つメモリページから始まり、最も長い間アクセスされたメモリページを削除し、ディスクマップがあり書き込み可能なメモリページに移動します。最後に、新しいディスクマップを作成するためにスワップスペースの割り当てを開始します。

このシステムでは、メモリが不足する前に事前にスワップマップを作成することをお勧めします。システムがアイドル状態のときにしばらくアクセスしなかったページをディスクにコピーするだけでなく、メモリにも保存できます。

ただし、これはスレーブプロセスでページにアクセスして削除タイマーをリセットできるマッピングを除いて、デフォルトではディスクブロックのキャッシュされたページと同じです。プロセスがスリープ状態にあり、実行する操作がない場合は、アクティブに使用されているキャッシュされたページよりもこのページを削除する方が良い選択肢が多いです。

多くのキャッシュは1〜2回だけアクセスされるため、ほとんどの場合、特別な状態を必要とせずに削除するのに最適な候補です。

関連情報