Куди залишилася пам'ять vm.overcommit_ratio?


10

Якщо я відключую перезавантаження комунікацій, встановивши vm.overcommit_memoryна 2, за замовчуванням система дозволить розподілити пам'ять до розміру swap + 50% фізичної пам'яті, як пояснено тут .

Я можу змінити співвідношення, змінивши vm.overcommit_ratioпараметр. Скажімо, я встановив його на 80%, тому може використовуватися 80% фізичної пам'яті.

Моє запитання:

  • що зробить система з рештою 20%?
  • чому цей параметр потрібен в першу чергу?
  • чому я не завжди повинен встановлювати його на 100%?

Відповіді:


6

Що зробить система з рештою 20%?

Ядро використовуватиме решту фізичної пам’яті для власних цілей (внутрішні структури, таблиці, буфери, кеші тощо). Параметр перевиконання пам’яті обробляє резервування віртуальної пам’яті програми userland, ядро ​​використовує не віртуальну пам'ять, а фізичну.

Чому цей параметр потрібен в першу чергу?

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

overcommit_ratioРозробники Linux ядра встановили на 50% прийнятне значення за замовчуванням. Він передбачає, що ядро ​​ніколи не буде потребувати більше 50% фізичної оперативної пам'яті. Ваш пробіг може бути різним, і це є причиною зміни.

Чому я не повинен завжди встановлювати його на 100%?

Якщо встановити його на 100% (або будь-яке "занадто високе" значення), не можна надійно відключити перевиконання, оскільки ви не можете припустити, що ядро ​​буде використовувати 0% (або занадто мало) оперативної пам'яті.

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


Якщо ядро ​​може все-таки забрати всю необхідну йому пам'ять, який сенс піддавати цьому параметру (або навіть створювати його)?
Дан Тумайкін

Чи є офіційний документ, де ці параметри пояснюються докладно? Крім kernel.org/doc/Documentation/vm/overcommit-accounting - там відсутня будь-яка посилання на пам'ять ядра.
Дан Тумайкін

1
Я ще не знайшов документації, яка б пояснила досить детально, що точно враховується при посиланні на "загальний обсяг адресного простору". Той факт, що документ, яким ви надаєте посилання на стан, "у більшості ситуацій це означає, що процес не буде вбито ...", однак достатньо для підтвердження того, що деяка пам'ять може бути використана в іншому місці, і очевидним споживачем цієї пам'яті є ядро.
jlliagre

2

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

Структури в ядрі будуть розподілятися незалежно, викликаючи перевиконання. Зазвичай вони обмежені індивідуально (наприклад, є налаштування мережевих буферів). Я не думаю, що загальний ліміт становить 50%, хоча загальний ліміт - це те, над чим працювали з метою розміщення контейнерів.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.