Куда уходит оставшаяся память vm.overcommit_ratio?

10

Если я отключить overcommit памяти, установив vm.overcommit_memoryдля 2, по умолчанию система позволит выделять память до размера свопа + 50% физической памяти, как описано здесь .

Я могу изменить соотношение, изменив vm.overcommit_ratioпараметр. Допустим, я установил его на 80%, поэтому можно использовать 80% физической памяти.

Мой вопрос:

  • что будет делать система с оставшимися 20%?
  • почему этот параметр требуется в первую очередь?
  • почему я не должен всегда устанавливать его на 100%?
Дан Тумайкин
источник

Ответы:

6

Что будет делать система с оставшимися 20%?

Ядро будет использовать оставшуюся физическую память для своих собственных целей (внутренние структуры, таблицы, буферы, кэши и т. Д.). Параметр overcommitment памяти обрабатывает резервирование виртуальной памяти пользовательского приложения, ядро ​​использует не виртуальную, а физическую память.

Почему этот параметр требуется в первую очередь?

overcommit_ratioПараметр является выбором реализации предназначена для предотвращения приложений резервировать больше виртуальную память , чем будет разумно быть доступны для них в будущем, то есть , когда они на самом деле доступ к памяти (или по крайней мере попытаться).

Установка overcommit_ratioна 50% считается разумным значением по умолчанию разработчиками ядра Linux. Предполагается, что ядру никогда не потребуется использовать более 50% физической памяти. Ваш пробег может варьироваться, причина, по которой он настраивается.

Почему я не всегда должен устанавливать его на 100%?

Установка его на 100% (или любое «слишком высокое» значение) не может надежно отключить чрезмерную загрузку, поскольку вы не можете предполагать, что ядро ​​будет использовать 0% (или слишком мало) ОЗУ.

Это не предотвратит сбой приложений, поскольку ядро ​​может в любом случае выгружать всю физическую память, которая ему требуется.

jlliagre
источник
Если ядро ​​в любом случае может взять всю необходимую память, какой смысл выставлять этот параметр (или даже создавать)?
Дан Тумайкин
Есть ли официальный документ, в котором эти параметры подробно объясняются? Помимо kernel.org/doc/Documentation/vm/overcommit-accounting - там отсутствует какая-либо ссылка на память ядра.
Дан Тумайкин
1
Я еще не нашел документацию, объясняющую достаточно подробно, что именно учитывается при обращении к «фиксации общего адресного пространства». Тот факт, что документ, который вы предоставляете, ссылается на состояния «в большинстве ситуаций это означает, что процесс не будет убит ...», тем не менее достаточен для подтверждения того, что некоторая память может использоваться в другом месте, и очевидным потребителем этой памяти является ядро.
jlliagre
2

Установка соотношения в 100% не зарезервирует никакого пространства для страниц с файловой поддержкой или для выделения в ядре, например кода ядра, сетевых буферов и т. Д.

Внутриядерные структуры будут размещаться независимо, вызывая чрезмерную загрузку. Они обычно ограничены индивидуально (например, есть настройка для сетевых буферов). Я не думаю, что общий лимит составляет 50%, хотя общий лимит - это то, над чем работали для размещения контейнеров.

Страницы с файловой поддержкой - это то место, откуда вы обычно запускаете код пользовательского пространства, поэтому для этого вам также нужно место.

sourcejedi
источник