私はLinuxでのスワップについての内容を読んだだけです。なぜデフォルト値が60に設定されているのかわかりません。
私によると、交換を減らすためにこのパラメータを10に設定する必要があります。スワップは私のハードドライブにあるので、私のRAMよりはるかに遅いです。
なぜカーネルをこのように構成するのですか?
答え1
カーネル 2.6.28 以降、Linux は以下を使用します。最近使用した項目を分割します。(LRU)ページ交換戦略。ファイルシステムソース(プログラムテキストや共有ライブラリなど)を含むページはファイルキャッシュに属します。ファイルシステムのバックアップがないページは匿名ページと呼ばれ、アプリケーション用に予約されているスタックスペースなどのランタイムデータで構成されます。通常、ファイルキャッシュに属するページはメモリから削除する方が安いです(これらのページは必要に応じてディスクから読み直すことができるからです)。匿名ページはファイルシステムをサポートしていないため、それらを格納するスワップスペースがない限り、プログラムが必要とする限りメモリに残る必要があります。
これが一般的な誤解です。スワップパーティション何らかの方法でシステムの速度が遅くなります。スワップパーティションがないとしても、カーネルがメモリからページを削除しないという意味ではありません。カーネルが削除するページに対する選択肢が少ないという意味にすぎません。使用可能なスワップ量は使用量に影響しません。
Linuxでは、デフォルトでは、カーネルメモリ統計ポリシーがスワップ領域不足に対処できます。過剰なメモリ使用量。欠点は、物理メモリが使い果たされ、カーネルが匿名ページをディスクに交換できない場合、メモリ不足キラー(OOM-killer)メカニズムは、メモリを占有する「不良」プロセスを終了し、他のプロセスのためにメモリを解放します。
これvm.swappiness
オプションは、匿名ページ用にファイルキャッシュページを交換することとのバランスを変更する修飾子です。ファイルキャッシュには、vm.swappiness
修飾子()を引いたランダムな優先順位200が指定されますfile_prio=200-vm.swappiness
。デフォルトでは、匿名ページは60()で始まりますanon_prio=vm.swappiness
。つまり、デフォルトでは匿名ページ(anon_prio=60
、、file_prio=200-60=140
)に優先順位の重みが通常です。この動作はmm/vmscan.c
カーネルソースツリーで定義されています。
が与えられると、vm.swappiness
優先100
順位は同じです(file_prio=200-100=100
、、anon_prio=100
)。これは、匿名ページが原因でファイルキャッシュのページを削除したくない場合は、I / O集中型システムに適しています。
逆に設定するvm.swappiness
と、0
カーネルがファイルキャッシュ内のページの匿名ページを削除するのを防ぎます。これは、プログラムがほとんどのキャッシュを独自に実行する場合(一部のデータベースの場合でも)、便利です。デスクトップシステムでは相互作用性を向上させることができますが、I / Oパフォーマンスが低下する可能性があるという欠点があります。
デフォルト値は、おおよそこの2つの極端の中間に選択される可能性が高いです。すべてのパフォーマンスパラメータと同様に、チューニングは直観だけvm.swappiness
でなく、実際のワークロードと比較できるベンチマークデータに基づいている必要があります。
答え2
問題は、単一のデフォルト値がすべての要件を満たすことができないことです。 swappiness オプションを 10 に設定するのはデスクトップに適した設定である可能性がありますが、サーバーにはデフォルトの 60 が良いでしょう。つまり、デスクトップ、サーバー、アプリケーションの種類などのユースケースに応じて互換性をカスタマイズする必要があります。
また、Linuxカーネルはメモリをディスクキャッシュとして使用します。それ以外の場合、RAMは使用されません。これは効率的でも予想もされません。ディスクデータをキャッシュに保存することは、同じデータが再び必要な場合にメモリからインポートされる可能性が高いことを意味します。そこからデータをインポートすることは、ディスクから再インポートするよりもはるかに高速です。 swappiness オプションは、Linux カーネルがディスクキャッシュを縮小するためにディスクに置き換えることを好むメカニズムです。古いデータをキャッシュから削除する必要がありますか、または一部のプログラムページを置き換える必要がありますか?
この記事トピックについてある程度明らかにすることもできます。特に交流動向を推定する方法。
答え3
上記の回答に詳細を追加します。
仮想マシンがますます使用されているため、Linux ホストはこれらのクラウド環境の 1 つの仮想マシンになる可能性が高くなります。例1と2では、実行中のアプリケーションとそのアプリケーションが消費するRAMの量について良いアイデアを得ました。 3. それほど多くはない
- 例1
ディスクは非常に高価なストレージアレイとして提供され、IOは非常に優れた高性能プライベートクラウド(ほとんどの銀行が購入するために数百万ドルを消費するタイプ)です。このストレージの一部は、SSDディスクとしてサポートされ、スピンドル付きの通常のディスクとしてサポートされているディスクアレイ(RAM)に存在する可能性があります。この場合、VMが表示するディスクはアクセス可能なRAMよりわずかに遅くなる可能性があります。単一の仮想マシンの場合、スワップ領域とメモリの間に大きな違いはありません。 - 例2
は例1と同じですが、単一の仮想マシンの代わりに数百、数千、またはそれ以上の仮想マシンがあります。この場合、サーバー(ハイパーバイザー)RAMは安価で豊富ですが、ストレージRAMは比較的高価であることがわかります。 RAM要件を非常に高価なストレージアレイで提供されるハイパーバイザーRAMとSWAPに分割すると、ストレージアレイのすべてのRAMをすばやく使用し、ブロックはSSDで、最後にスピンドルで提供されることがわかります。突然、すべてが非常にゆっくりと動き始めます。この場合、ハイパーバイザーは大量のRAMをVMに割り当て、すべてのVMの累積効果が影響するため、スワップ性を0(メモリ不足状態を回避するためのスワップのみ)に設定できます。 VMストレージのパフォーマンスを考慮してスワップの可能性を高く設定すると、現在対話していないアプリケーションが(ほとんど)スワップアウトされているため、未使用のRAMが増えるため、パフォーマンスが大幅に向上する可能性があります。 - 例3 SSDを搭載した最新のノートブックまたはデスクトップ。メモリ要件は不明と見なされます。ユーザーが使用するブラウザ、開いているタブの数、文書の編集、RAW画像、ビデオの編集など、すべてのRAMを消費します。スワップ性をより低い値に設定し、他のファイルシステム調整を実行すると、SSDへの書き込み回数が減り、持続時間が長くなります。