質問: カーネルを微調整して完全にスワップアウトするにはどうすればよいですか? 次のスワップポリシーを展開したいと思います。 デフォルトでは、メモリ内のすべてのページもスワップスペースにある必要があります。 メモリ内のページが変更された場合(つまり、ダーティ)、ページはできるだけ早く書き出される必要がありますが、他のプロセスよりも優先度は低くなります。 特定の構成可能な透かしに達した場合(たとえば、ページの80%がダーティである場合)、優先度は他のプロセスと同じになります。 この種のスワップポリシーはlinuxカーネルで可能ですか?もしそうなら、これを達成するためにカーネル設定をどのように設定しますか?編集:明らかに、これの理由は、スワップアウトする必要のあるページの数を減らすためです。ダーティページのみをディスクに書き込む必要があり、これは時間の経過とともにバックグラウンドで発生します。したがって、ページミスが発生した場合(つまり、ページがメモリ内にない場合)、メモリからディスクにページを書き込む必要はなく、ディスクからメモリにのみ書き込む必要があります。したがって、スワップインとスワップアウトの両方が同時にディスクにアクセスしようとするため、i/oボトルネックの可能性が減少しました。
回答: /proc/sys/vm/swappinessの値を設定して、メモリに保持されているデータのセグメントに対するスワップされたデータのセグメントの比率を制御できます。値0は、すべてのコストでスワッピングを完全に回避します。これは、次のいずれかを使用して実行できます。 echo 0 > /proc/sys/vm/swappiness sysctl -w vm.swappiness=0 その設定を/etc/sysctl.confに保存する 一般的に、ほんの少しのスワップを使用することは悪いことではありません。空きメモリは、ディスクから読み取ったデータをキャッシュするために使用でき、システムは、アプリケーションによる大量のメモリの突然の必要性を事前に計画できます。ただし、スワップされるプログラムが多すぎると、プログラムの切り替えごとにディスク関連のアクティビティが多く発生し、すべてが実際に遅くなります。何かを使用する前に、それをメモリにロードし直す必要があります。データの到着にかなり長い時間がかかるため、ディスクの読み取りはメモリアクセスに比べてひどく遅いです。システムは、他の読み取り/書き込み要求の間に読み取りをスケジュールする必要があり、ドライブは適切なシリンダーを見つけようとし始め、最後にゆっくりとデータの配信を開始します。したがって、あなたの論理には欠陥があると思います。一般に、突然の成長に備えて十分なスペースを確保しながら、プログラムをメモリ内で実行し続けたいと考えています。バックアップでもパフォーマンスの向上でもないため、スワップを頻繁に使用して「ディスクに書き込む」ことはしないでください。古いコンピュータはメモリが少なく、結果としてスワッピングの問題に悩まされていました。多くのプログラムが一度に開かれると、システムの速度が低下し、スワップファイルへのディスクの読み取りと書き込みが聞こえました。