В Документы ядра Linux сказать:
shmall:
Этот параметр устанавливает общий объем страниц совместно используемой памяти, которые могут использоваться в рамках всей системы. Следовательно, SHMALL всегда должен быть не ниже ceil (shmmax / PAGE_SIZE).
Но я не могу найти определение для страница. shmmax
, со своей стороны, определяет максимальный размер разделяемой памяти сегмент. Поэтому я не понимаю ни этот абзац, ни ceil(shmmax/PAGE_SIZE)
часть.
(Я исследую это, чтобы определить, как настроить мой сервер для postgres.)
Страница: Фиксированная длина непрерывного блока виртуальной памяти.
Сегмент: сегмент - это ваш интерфейс в разделяемой памяти. Сегмент состоит из одной или нескольких страниц. Если вы (или ваш процесс) не создали сегмент, вы не используете разделяемую память.
ceil: он же «потолок». Четко определенная математическая функция, которая возвращает следующее по величине целое число (также известное как округление в большую сторону). См. Википедию: Функции пола и потолка
PAGE_SIZE - это количество байтов, которое ОС использует для разделения своих блоков памяти. Вы можете узнать размер с помощью getconf:
# getconf PAGE_SIZE
PAGE_SIZE 4096
shmmax - это максимальный размер любого отдельного сегмента в байтах (не страницах).
shmall должен быть не меньше ceil (shmmax / PAGE_SIZE), потому что, если бы он был меньше, вы не смогли бы создать сегмент размером shmmax. У вас закончились бы страницы для использования.
Допустим, вы хотите использовать не более 8 МБ (МБ - это база 10, MiB - мебибайты - это база 2, что ваш компьютер фактически использует при вычислении размеров) для общей памяти в системе.
Чтобы найти количество страниц 8MiB, вы просто разделите на PAGE_SIZE.
Установите shmall на 2048.
Теперь предположим, что вы знаете, что вам нужен только один сегмент размером 512 КБ (КиБ, а не КБ) для postgres. У вас есть все данные для расчета минимального числа, которое вы должны установить для shmall.
ceil (512 КБ / 4096 байт) = 128
Наименьший размер, который вы должны установить для shmall, - 128 страниц. Ничто не мешает вам установить его выше. Shmall - это просто ограничение, указывающее, что вы не будете использовать больше этого объема памяти для общей памяти, независимо от того, есть ли один сегмент или десять.