フルスワップを達成するためにカーネルを調整する方法は?

フルスワップを達成するためにカーネルを調整する方法は?

私は次の交換戦略を展開したいと思います。

  • デフォルトでは、メモリ内のすべてのページはスワップ領域にも存在する必要があります。
  • メモリ内のページが変更されると(つまり、汚れた場合)、そのページはできるだけ早く書き込まれる必要がありますが、他のプロセスよりも優先順位が低くなります。
  • 設定可能な透かしに達すると(ページの80%がダーティであると仮定)、優先順位は他のプロセスと同じです。

このスワップ戦略はLinuxカーネルで実行可能ですか?それでは、これを達成するためにカーネル設定をどのように指定できますか?

編集する:

明らかに、その理由は、置き換える必要があるページ数を減らすことです。ダーティページのみをディスクに書き込む必要があり、これは時間の経過とともにバックグラウンドで発生します。したがって、ページの損失が発生した場合(つまり、ページがメモリにない場合)、ページをメモリからディスクに書き込む必要はなく、ディスクからメモリに書き込む必要があります。これにより、スワップインとスワップアウトが同時にディスクにアクセスしようとするため、I / Oボトルネックが発生する可能性が低くなります。

答え1

/proc/sys/vm/swappinessメモリに残っているデータセグメントと交換されるデータセグメントの割合を制御するために設定できる値。値がゼロの場合、何を書き込んでも完全に置き換えることを防ぎます。

これは、次のいずれかの方法を使用して実行できます。

  • echo 0 > /proc/sys/vm/swappiness
  • sysctl -w vm.swappiness=0
  • この設定を次の場所に保存してください。/etc/sysctl.conf

一般的に言えば、少しのスワップを使うのは悪いことではありません。空きメモリはディスクから読み出されたデータをキャッシュするために使用でき、システムは突然大量のメモリを必要とするアプリケーションに対して事前に計画することができます。

しかし、あまりにも多くのプログラムを交換すると、各プログラムの切り替え中にディスク関連のアクティビティが増え、すべての操作が実際に遅くなる可能性があります。何かを使用するには、まずメモリにリロードする必要があります。

データの到着にはずっと時間がかかるため、ディスクの読み取りはメモリアクセスに比べて非常に遅くなります。システムは異なる読み取り/書き込み要求間で読み取りをスケジュールする必要があり、ドライブは正しいシリンダーを見つけ始め、最終的にゆっくりとデータ転送を開始します。

だから私はあなたの論理に欠陥があると思います。通常、突然の増加に備えて十分なスペースを残しながら、プログラムをメモリ内で実行し続けたいと思います。バックアップでもパフォーマンスも向上しないため、「ディスクへの書き込み」にスワップを頻繁に使用しないでください。

古いコンピュータにはメモリが少ないため、スワッピングの問題が発生する可能性があります。同時に多くのプログラムが開いていると、システムが遅くなり、ディスクがスワップファイルを読み書きする音が聞こえます。

答え2

システムが交換されても、あなたに問題があるという意味ではありません。一部のアプリケーションは、システムのパフォーマンスに影響を与えずにスワップを最大限に活用するように微調整されています。ほとんどのリレーショナルデータベースシステムは、次のように調整されます。 IE:OracleとCache、おそらく最大の2つのシステムです。

休止状態を使用する場合は、スワップ領域を使用してRAMを保存します。システムが再起動すると、スワップ領域のすべてのエントリがRAMに追加されます。これにより、スタンバイモードのようにバッテリーを消費せずにシステムの電源を切ることができ、電源を切る前に中断した場所に戻ります。したがって、バッテリーは長持ちします。

スワッピングは、システムの高性能を維持するためにより多くのアクティブRAMを確保するので、良いことになります。アクティブ RAM がいっぱいになり、スワップ領域がいっぱいになっていて、さらに多くのスペースが必要な場合にのみ問題が発生します。それまでの交換はあなたを助けるためのものであり、あなたに害を及ぼすものではありません。

答え3

vdboorの回答に追加して欲しいものを達成するにはswappiness。ユーザーは/proc/sys/vm/*ファイルまたは永続設定を介して実行時にこれらのエントリにアクセスできます/etc/sysctl.conf(これをsysctl適用するには、起動シーケンスにinitスクリプトを追加する必要があるかもしれません)。

これらの設定については、Linuxカーネルのドキュメントで詳しく説明されています。以下にあります<your_kernel_sources_path>/Documentation/sysctl/vm.txt。一部のオンラインマニュアルを確認することもできます。このような

関連情報