Linuxは、大規模なIO操作を実行すると積極的にスワップします。

Linuxは、大規模なIO操作を実行すると積極的にスワップします。

外部ドライバや内部ディスクから大容量ファイルをコピーするなど、大規模なIO操作を実行すると、Debian 10デスクトップシステムで奇妙な問題が発生しました。

次の簡単な状況にまとめることができます。

sudo dd if=/dev/sdb of=/dev/null

/ dev / sdbドライブのすべての内容(たとえば、接続されているUSBドライブと/ dev / sda内部ドライブ)を読み取るためにこのコマンドを実行すると、たとえばhtopがシステムを積極的に交換していることがわかります。多くのものの記憶。その結果、操作が完了するまでシステムが完全に応答しなくなり(しばらくして)、システムは自分のデスクトップアプリケーションを再交換します。

これを確認するために、swapoff/swaponを使用してスワップ領域全体を消去し、約5GBのメモリを使用しました。

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

操作中にioバッファ(青色)の数が増え続けます。 ここに画像の説明を入力してください。

...

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

上記のコマンドを実行すると、システムは次のように表示されます。

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

スワップおよび書き込みストレージのサイズを減らすために、いくつかのシステムパラメータをテストしました。

/proc/sys/vm/swapiness = 1
/proc/sys/vm/dirty_ratio = 10

しかし、これは実際に問題を変えません。

興味深いことに、スワップを完全に無効にすると、パフォーマンスの問題やメモリ不足は発生しません。カーネルは使用可能なメモリのみを使用し、アプリケーションがバッファサイズを減らし、より多くのメモリを割り当てることができます。

同様の問題が発生し、解決策を知っている人はいますか?この問題は私の両方のコンピュータで発生し、解決策がわかりません。

ベストアンサー1

dd if=/dev/sda1 of=/dev/null iflag=nocache &

freeその後、バックグラウンド期間中に「バフ/キャッシュ」が停止している間に「アイドル」がどのように回復されるかを確認できます(「使用可能」は残ります)。dd

それ以外の場合は、iflag=nocache説明したのと同じ効果が表示されます。 "free" memがよく使われます。スワップが有効ではなく、fg「重要」になる前にCtrl-Cを有効にします。

SOに関するコメントでは、バッファリングはスワッピングよりも「悪い」と主張しています。私はこれが本当だと思いますが、良い説明をすることはできません... OS自体がメモリに大きなオブジェクトを保持する価値があるかどうかを知る方法がないことを除いて言葉です。ユーザーでさえ、コマンドを繰り返すかどうかは常にわかりません。

旗の劇的な効果は、nocacheそれが実際に重要であることを示しています。


cp私はファイルシステムではこれが起こらないと思います。それともそうでしょうか?

おすすめ記事