なぜでの議論の"swappinessに関する法律"のような情報の一つの場所です。

StackOverflow https://stackoverflow.com/questions/147125

質問

って読み上Linuxの"swappiness"tuneableをコントロールする方法を積極的にカーネルには入れ替え用メモリーディスクかに使用されていません。場合はGoogleの期間、たくさんのページのように この 議論の一長一短がある。このように、引数は以下のようになります。

ごswappinessが低い、不活性応用までをひとり占めすべてのシステムメモリーのその他のプログラムがいます。

ごswappinessが高すぎる場合、復帰するとその活用が大きな遅延状態の読み込み後のディスク。

この引数になるのは意味のあることでしょう。している場合は不活性なアプリの利用トンのメモリが記載されていないのはなぜカーネルのページメモリをディスクに残他のコピーをデータメモリ?このように両方の長:もし他のアプリケーションのニーズがメモリですぐに請求項の物理RAMおよび書き込みを開始するので、他のコピーではディスクで入れ替わり時の状を申請する人気レストランがあり遅くまで賑ます。時にはオリジナルアプリを起、そのページをRAMとして使用可能ではなくても、引きに向かっています。

または私を見落とさないよう?

役に立ちましたか?

解決

これによると、 1 はまさにLinux

私はまだこれの多くを理解しようとしているので、信頼できるリンクはありがたいです。

他のヒント

  

大量のメモリを使用している非アクティブなアプリケーションがある場合、カーネルがメモリをディスクにページングし、そのデータの別のコピーをメモリ内に残さないのはなぜですか?

やったとしましょう。ページをディスクに書き込みましたが、メモリに残しました。しばらくして別のプロセスがメモリを必要とするため、最初のプロセスからページをキックアウトしたいです。

ページがディスクに書き出されてから最初のプロセスがページを変更したかどうかを確実に知る必要があります。ある場合は、再度書き出す必要があります。これを追跡する方法は、プロセスを最初にディスクに書き込んだときに、ページへのプロセスの書き込み許可を取り消すことです。プロセスがページへの書き込みを再度試みると、ページフォールトが発生します。カーネルは、書き込み許可を復元してアプリケーションの続行を許可する前に、プロセスがページをダーティにした(したがって、再度書き出す必要がある)ことに注意できます。

そこには問題があります。特にマルチプロセッサマシンでは、ページから書き込み権限を奪うことは実際にはいくらか費用がかかります。すべてのCPUがページ変換のキャッシュをパージして、書き込み許可を確実に削除することが重要です。

プロセスがページに書き込みを行う場合、ページフォールトの取得はさらに高価になります。私は、これらのページの重要な数がその障害を取り、それを私たちがそれをメモリに残すことによって探していた利益に食い込むことになると思います。

だからやる価値はありますか?正直わかりません。私は、ページをメモリに残しておくのが勝つほど明白ではない理由を説明しようとしています。

(*)この全体は、プロセスがfork()するときに使用されるCopy-On-Writeと呼ばれるメカニズムに非常に似ています。子プロセスはほんの数命令を実行してexec()を呼び出す可能性が高いため、すべての親ページをコピーするのはばかげています。代わりに、書き込み許可は取り消され、子は単に実行を許可されます。 Copy-On-Writeは、ページフォールトがほとんど実行されないため、勝ちです。ほとんどの場合、子はすぐにexec()を呼び出します。

場合でもページアプリのメモリへのディスクに保つことができメモリーは、私が決めるべき申請する"無効"は、そのswapinessます。ページングディスクの段階IOとによってお使いいをいたしました。また別の変数はこの方程式が、それは、Linux用の残りのメモリとしてディスクバッファ/います。

VMが最初に行うことは、ページをクリーンにし、それらをクリーンリストに移動することです。
匿名メモリ(実際のファイルバッキングストアがないもの、匿名で、背後にファイルシステムvnodeストレージがないセグメント)を/ proc // mapsで確認できる場合、VMが最初に行うことは" dirty"ページと「クリーン」次に、ページのコンテンツを書き出すことによってスワップします。 VMに完全に空きメモリが不足し、使用する新しい空きページを許可する機能が心配されると、VMは「クリーン」ページのリストを調べ、それらがどのくらい最近使用されたか、どのようなメモリに基づいているかを確認できますそれらはそれらのページをフリーリストに移動します。

メモリページが空きリストに配置されると、以前のコンテンツに関連付けられなくなります。プログラムが以前にページが提供していたメモリ位置への参照に沿って来た場合、プログラムは重大な障害を起こし、(おそらく完全に異なる)ページが空きリストから取得され、データがディスクからページに読み込まれます。これが完了すると、ページは変更されていないため、実際にはまだ「クリーン」のままです。 VMがスワップでそのページをRAMの別のページに使用することを選択した場合、ページは再び「ダーティ」になります。または、アプリがそのページに書き込んだ場合は「ダーティ」になります。そして、プロセスが再び始まります。

また、ビジネス/トランザクション/オンライン/レイテンシーに敏感な環境のサーバーアプリケーションにとって、スワップピンネスは非常に恐ろしいものです。多くのブラウザやGUIを実行していない16GBのRAMボックスがある場合、通常、すべてのアプリをほぼメモリに固定する必要があります。私のRAMの大部分は8-10GBのJavaヒープであり、これはディスクにページングすることは決してありません。利用できるのは、mingettyなどのプロセスです(ただし、これらのアプリのglibcページもあります)他のアプリで共有され、実際に使用されるため、これらの役に立たないプロセスのRSSサイズでさえ、ほとんどが共有された使用済みページです)。通常、実際にスワップのためにクリーンアップされた16GBのうち、10MBしか表示されません。サーバーのスワップピネス値が非常に低いか、スワップピネスがゼロであることが推奨されます-未使用のページはRAM全体のごく一部であり、バッファキャッシュ用の比較的少量のRAMがアプリケーションページのスワップとレイテンシヒットのリスクを取り戻そうとする必要があります実行中のアプリ。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top