/proc/sys/vm/page-cluster
をアップすると役立つかもしれません (デフォルト:3)。
カーネルのドキュメントから (sysctl/vm.txt
):
ページクラスター
page-cluster は、連続するページが 1 回の試行でスワップから読み取られるページ数を制御します。これは、ページ キャッシュ先読みへのスワップ カウンター部分です。前述の連続性は、仮想/物理アドレスに関してではなく、スワップ空間で連続しています。つまり、それらが一緒にスワップアウトされたことを意味します。
これは対数値です。0 に設定すると「1 ページ」、1 に設定すると「2 ページ」、2 に設定すると「4 ページ」などになります。0 を設定すると先読みが完全に無効になります。
デフォルト値は 3 (一度に 8 ページ) です。ワークロードがスワップ集約型である場合、これを別の値に調整すると、いくつかの小さな利点が得られる可能性があります。
値が小さいほど、最初の障害の待ち時間が短くなりますが、同時に追加の障害と次の障害の I/O 遅延が発生し、それらが連続するページの先読みによってもたらされた場合に発生します。
ドキュメントには制限が記載されていないため、これを非常に高く設定して、すべてのスワップをすぐに読み戻すことができます。そしてもちろん、後で正気の値に戻します。
魔法のように「システムを再び応答させる」ことはできないようです。ペナルティが発生するか、スワップ領域からメモリにページを読み戻すか、後で発生するかのいずれかですが、いずれにせよ発生します。確かに、 swapoff -a && swapon -a
のようなことをすると もっと感じるかもしれません 一部のページを強制的にメモリにコピーして戻すため、痛みが軽減されるのではなく、そうでなければ二度と必要とされず、最終的に読み取られることなくドロップされるためです (考えてみてください:ヒープの多くがスワップアウトされている間にアプリケーションを終了すると、それらのページはメモリに読み戻されることなく完全に破棄されます)。
ただし、これによりページがスワップからクリアされるため、次にスクリプトを実行するときに再度書き込む必要があります。
まあ、スワップからメインメモリにコピーバックされるほとんどすべてのページは、とにかく変更されようとしているので、将来再びスワップするために元に戻す必要がある場合は、とにかくスワップに新たに書き込む必要があります.スワップは主にヒープ メモリであり、読み取り専用ページ (通常はファイルに基づく) ではないことに注意してください。
あなたの swapoff -a && swapon -a
だと思います トリックは、あなたが思いつくものと同じくらい優れています.
最も関心のあるプログラムを cgroup に追加し、swappiness を調整して、次回アプリケーションを実行するときに、追加したプログラムがスワップの候補になる可能性が低くなるようにしてください。
一部のページはスワップアウトされる可能性がありますが、パフォーマンスの問題を回避できる可能性があります。その大部分はおそらく、多くのプログラムのページがスワップ状態にあり、ページを RAM にスワップするためにプログラムが継続的に一時停止する必要がある場合の「停止と開始」の動作ですが、4k のインクリメントのみです。
または、実行中のアプリケーションを cgroup に追加し、そのアプリケーションが最もスワップ ファイルを使用する傾向があるように swappiness を調整することもできます。アプリケーションの速度は低下しますが、システムの残りの部分は節約できます。