vm.overcommit_ratioの残りのメモリはどこに行きますか?


10

ここで説明するようvm.overcommit_memory2、に設定してメモリのオーバーコミットを無効にすると、デフォルトで、システムはswap +物理メモリの50%の次元までメモリを割り当てることができます

vm.overcommit_ratioパラメータを変更することで比率を変更できます。80%に設定したとすると、物理メモリの80%が使用される可能性があります。

私の質問は:

  • 残りの20%でシステムは何をしますか?
  • そもそもなぜこのパラメータが必要なのですか?
  • 常に100%に設定すべきではないのはなぜですか?

回答:


6

システムは残りの20%で何をしますか?

カーネルは、残りの物理メモリを独自の目的(内部構造、テーブル、バッファ、キャッシュなど)に使用します。メモリのオーバーコミットメント設定は、ユーザーランドアプリケーションの仮想メモリ予約を処理します。カーネルは仮想メモリを使用せず、物理メモリを使用します。

そもそもなぜこのパラメータが必要なのですか?

overcommit_ratioパラメータは、彼らが実際に(または少なくともTRY)メモリにアクセスする際、合理的に将来、すなわち、それらのために利用できるようになります何よりも多くの仮想メモリを確保するために、アプリケーションを防止するために設計、実装の選択です。

overcommit_ratio50%に設定することは、Linuxカーネル開発者によって妥当なデフォルト値と見なされています。これは、カーネルが物理RAMの50%以上を使用する必要がないことを前提としています。あなたの走行距離は変わるかもしれません、それが調整可能な理由です。

常に100%に設定すべきではないのはなぜですか?

これを100%(または「高すぎる」値)に設定しても、カーネルが0%(または少なすぎる)のRAMを使用すると想定できないため、オーバーコミットを確実に無効にすることはできません。

カーネルが要求するすべての物理メモリをとにかく先取りする可能性があるため、アプリケーションのクラッシュを防ぐことはできません。


カーネルがとにかく必要なすべてのメモリを使用できる場合、このパラメーターを公開する(または作成する)意味は何ですか?
Dan Tumaykin 16

それらのパラメータが詳細に説明されている公式文書はありますか?kernel.org/doc/Documentation/vm/overcommit-accountingの他に、カーネルメモリへの参照がそこにありません。
Dan Tumaykin 16

1
「合計アドレススペースコミット」を参照する際に正確に考慮される内容を十分に詳しく説明したドキュメントはまだ見つかりません。「ほとんどの場合、これはプロセスが強制終了されないことを意味します...」というリンクを提供したドキュメントは、一部のメモリが他の場所で使用できることを確認するには十分であり、このメモリの明らかなコンシューマはカーネルです。
jlliagre 2016

2

この比率を100%に設定しても、ファイルを使用するページや、カーネルコード、ネットワークバッファーなどのカーネル内の割り当て用の領域は予約されません。

カーネル内の構造は関係なく割り当てられ、オーバーコミットを引き起こします。それらは一般に個別に制限されます(たとえば、ネットワークバッファーの設定があります)。全体的な制限は50%だとは思いませんが、全体的な制限は、コンテナーをホストする目的で取り組んだものです。

ファイルを使用するページは、通常、ユーザースペースコードを実行する場所なので、そのためのスペースも必要です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.