Что означает эвристика в Overcommit_memory = 0?

Вы правы, существует общепринятое соглашение, согласно которому обратная косая черта используется для экранирования символов, либо указанный символ имеет особое значение, и вы хотите, чтобы он был буквальным:

# echo 'It\'s a string!'

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

Другой случай - противоположный, когда вам нужен «нормальный» символ, чтобы иметь какое-то особое значение:

# grep '\s/tmp' /etc/fstab

В приведенном выше примере обратная косая черта указывает grep, что s имеет особое значение и не является буквальным s (это пробел RegEx: пробел, табуляция, новая строка, возврат каретки, вертикальная табуляция)

Другими словами, когда у символа есть 2 возможных значения, вы избегаете его, чтобы быть второстепенным значением.

Изменить:

Для вашего первого примера:

rpm-qa rpmname\*

Здесь * имеет особое значение (все, что начинается с 'rpmname'), но чтобы оболочка не пыталась его расширить, вы избегаете его, поэтому команда rpm получает литерал * и может обрабатывать его соответствующим образом.

Это происходит столько раз, сколько строк будет интерпретироваться, и может возникнуть настоящая проблема, когда строка передается несколькими командами.

1
13.07.2017, 12:06
1 ответ

Параметр overcommit_memoryучитывается в трех местах подсистемы управления памятью -.

  1. Основной из них является__vm_enough_memoryв mm/util.c, который определяет, достаточно ли памяти для продолжения выделения памяти (обратите внимание, что это вспомогательная функция, которая не обязательно вызывается ). Если overcommit_memoryравно 1, эта функция всегда завершается успешно. Если это 2, он проверяет фактическую доступную память. Если он равен 0, он использует знаменитую эвристику, о которой вы упоминаете; это происходит следующим образом:

    • подсчитать количество свободных страниц
    • добавить количество файлов -сохраненных страниц (их можно восстановить)
    • удалить страницы, используемые для общей памяти
    • добавить страницы подкачки
    • добавить восстанавливаемые страницы
    • учетная запись для зарезервированных страниц
    • оставить часть памяти для root (, если выделение не выполняется процессом cap_sys_admin)

    Полученная сумма используется в качестве порога для выделения памяти.

  2. mmapтакже проверяет, что параметр:MAP_NORESERVEсоблюдается, если разрешена избыточная фиксация (режимы 0 и 1 ), и приводит к выделению памяти без резервного свопа(VM_NORESERVE). В данном конкретном случае режим 0 фактически эквивалентен режиму 1; это то, что «вызовы mmap(2)с MAP_NORESERVEне проверяются» относится к :это означает, что вызовыMAP_NORESERVEmmapвсегда будут успешными, а выделение более -приведет к OOM -убийственному степпингу постфактум или нарушение сегмента при попытке записи.

  3. shmemведет себя аналогично mmap.

Исчерпание адресного пространства должно приводить к сбоям выделения, а не к уничтожению OOM -, поскольку выделение фактически не может продолжаться.

5
27.01.2020, 23:18

Теги

Похожие вопросы