Linuxがスワップをメモリに再読み込みできるようにする

Linuxがスワップをメモリに再読み込みできるようにする

16GB の物理メモリを大部分使用するアプリケーションを実行すると、Linux カーネルはメモリのページの大部分をスワップします。アプリケーションが完了したら、各タスク(コマンド入力、ワークスペースの切り替え、新しいWebページを開くなど)を完了するのに長い時間がかかります。なぜなら、関連ページをまず交換で再度読まなければならないからです。

各アプリケーションに手動で触れて待つ必要なく、Linuxカーネルにページをスワップから物理メモリにコピーするように指示する方法はありますか?私は多くのアプリケーションを実行しているので、待つのはいつも痛いです。

私はしばしばswapoff -a && swapon -aシステムが再応答するためにこれを使用しますが、これはスワップページをクリアするので、次回スクリプトを実行するときに書き直す必要があります。

カーネルがスワップからすべてのページを読み取るように指示するカーネルインタフェース(おそらくsysfsを使用)はありますか?

編集:実際にすべてのスワップをキャッシュ可能にする方法を探しています。 (DeRobertに感謝!)

[PS serverfault.com/questions/153946/…そしてserverfault.com/questions/100448/…これは関連トピックですが、Linuxカーネルにスワップを消去せずにスワップからメモリにページを再コピーさせる方法に関する問題は扱いません。 ]

ベストアンサー1

役に立つかもしれません/proc/sys/vm/page-cluster(デフォルト:3)。

カーネルドキュメントで(sysctl/vm.txt):

ページクラスタ

ページクラスタは、1回の試行でスワップから読み取られる連続ページ数を制御します。これはページキャッシュ先読みのスワップ対応です。言及された連続性は、仮想/物理アドレスではなく、スワップ空間の連続性を意味します。つまり、互いにスワップされるという意味です。

ログ値です。 0に設定すると「1ページ」を意味し、1に設定すると「2ページ」を意味し、2に設定すると「4ページ」を意味します。 0 はスワップ先読みを完全に無効にします。

デフォルトは3(一度に8ページ)です。ワークロードがスワップ集約的である場合、それを別の値に調整することにはいくつかの利点があります。

値が小さいほど初期エラーの待ち時間は短くなりますが、先読み連続ページの一部である場合は、追加エラーと後続エラーのI / Oレイテンシが犠牲になります。

ドキュメントに制限は記載されていないため、すべてのスワップを非常にすばやく再読み込みできるように、非常に高く設定できます。もちろん、その後は再び通常値に戻してください。

おすすめ記事