スワップがなぜそんなに遅いのですか? [コピー]

スワップがなぜそんなに遅いのですか? [コピー]

私のスワップ/ハードウェア/ドライバに何か奇妙なことが起こっているようです。

swapoffスワップサイズを大きくしてlvresizeもう一度増やそうとしますswapon

これを実行すると、swapoff /dev/swapdevコマンドは約3.5 GBのスワップページをメモリに移動するのに8分19秒かかりました。

実行する前に、使用可能なRAMがスワップ使用量より大きいことを確認し、swapoff実行中は同じままです。

SSD HDDを搭載したIntel Core i5ノートブックがあります。以前はプロセッサ使用率が10%未満でしたswapoffが、チェックインしてみるとswapoffCPU使用率が70%を超えました。

日記には興味深い内容はまったくありませんでした。

ディスクからメモリへの3.5Gのオフロードにおよそ予想される時間は次のとおりです。

$ time dd if=/dev/urandom of=/tmp/del bs=1M count=3500
3500+0 records in
3500+0 records out
3670016000 bytes (3.7 GB, 3.4 GiB) copied, 23.7288 s, 155 MB/s

real    0m24.789s
user    0m0.000s
sys     0m22.743s

私は走っているLinux svelte 4.9.53-1-MANJARO #1 SMP PREEMPT Thu Oct 5 15:11:15 UTC 2017 x86_64 GNU/Linux

この注文はなぜこんなに時間がかかるのですか?これはより大きな問題の一部かもしれませんが、奇妙に見えることが最初に指摘できることです。

ベストアンサー1

あなたはスワップオフが実際に何をしているのか理解していません。

実行中のマシンでスワップされているスワップスペースを終了するのは非常に複雑です。 3.5Gはおそらく8分ほどとても速く、期待通りに動作しています。

swapoff を実行すると、単にコードをディスクからメモリに移動する以上の作業が行われます。

一度スワップをしていると…まあ…スワップをしているということは、OSにメモリが不足しているという意味です。 +スワップデバイス用のディスクI / Oがあり、ディスクI / Oがあることを意味します。他のファイルシステムでは、+おそらくウォッチドッグまたはsystemd自動再起動が含まれていると、OOM(Out of Memory Killer)の実行が開始され、OOMプロセスが再起動されます。

システムが交換中の場合、これは交換がシステムをアクティブに保つ唯一の方法であることを意味します。

スワップスペースを殺すと、システムはもはやスワップスペースを使用できなくなるため、OSは高速スワップで最適化されたRAWディスクを通過するのではなく、通常のファイルシステムのコードをロードし、メモリが使い果たされるとコードを削除する必要があります。コードを読むには、すべてのコードが通常のファイルシステムから出てくる必要があり、ディレクトリナビゲーションを実行する必要があります。これは、スワップ空間からリソースを取得するよりもはるかに集約的です。

交換中のシステムで交換を実行すると、通常、プロセスに数時間かかり、システムがクラッシュする状況が発生します。

何らかの理由でスワップデバイスを破棄する必要がある場合は、最初にセカンダリファイルシステムベースのスワップスペースを作成し、この新しいスワップスペースに対してスワップを実行してから、古いスワップデバイスでスワップオフを実行することをお勧めします。

このアプローチを取ると、システムは永遠に生き残るでしょう。

おすすめ記事