システムに空き容量があるにもかかわらず、Linuxが大容量ファイルをどこかにコピーするときにスワップ領域に書き込むのはなぜですか?

システムに空き容量があるにもかかわらず、Linuxが大容量ファイルをどこかにコピーするときにスワップ領域に書き込むのはなぜですか?

一部のストレージデバイス(システムのHDD、SSD、またはサムドライブ)にファイルをコピーすると、少量のデータ(20〜30 MB)がスワップスペースに書き込まれ、数が増えることがわかりました。はい、システムにもRAMを使用できます。

スワップスペースに書き込むと、デバイスの速度が非常に遅くなる可能性があります。暴行は当然の事件でした。

コピーする前にスワップをオフにすると、ファイルがうまくコピーされます。

スクリーンショットは次のとおりです。

ここに画像の説明を入力してください。

大容量ファイルを/dev/sda2にコピーしています。利用可能なRAMがありますが、一部のデータは常にスワップ用に書き込まれます。この動作は、私が所有して使用する時間があるすべてのデバイスで同じです。

以下を使って交換性を変更してみました。

sysctl vm.swappiness=n # n for a value from 0..100

swappinessを0に設定し、swappinessを100に設定します。行動は変わりません。すべてのシステムモニターに十分な空きRAMがあることが示されます。それでもスワップ領域にデータを書き込みます。

答え1

通常、動作はアプリケーションによって異なり、コピーアプリケーションがコピーしているファイルを読み取る方法についてカーネルに正しい指示を与えるかどうかによって異なります。

お客様の場合は、ファイルのサイズがメモリ全体より少し大きいため、GUI のファイル マネージャがファイルを塊にmmapコピーするのではなく、ファイルの完全なコピーを要求できます。

cpターミナルウィンドウでコピーしてみてください。このcp コマンドはカーネルに指示を厳しく提供し、システムに最適なものとして検出されたブロックにファイルをコピーします。それでもキャッシュがメモリを満たしていることがわかりますが、メモリ圧力の急増によるものではなく、単に多くのバイトの場合にはスワッピングがトリガーされてはなりません。

答え2

起こり得ることは、メモリがディスクキャッシュに使用されていることです。表示されるモニターにディスクキャッシュは表示されません。その後、カーネルはキャッシュを削除するのではなく、非アクティブメモリを交換することを決定できます。

パフォーマンスに問題がある(ただし潜在的な問題ではない)場合は、ディスクキャッシュに書き込むことなくシステムに作業(ファイルのコピーなど)を実行するように指示する方法があります。これにより、書き込み速度が遅くなることはありませんが、将来のファイル読み取り速度が遅くなります(たとえば、ファイルをコピーしてから読み込む場合など)。

関連情報