Назад | Перейти на главную страницу

Что такое сегменты разделяемой памяти Linux и страницы?

В Документы ядра 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.

8 МБ / 4096 байт = 2048.

Установите shmall на 2048.

Теперь предположим, что вы знаете, что вам нужен только один сегмент размером 512 КБ (КиБ, а не КБ) для postgres. У вас есть все данные для расчета минимального числа, которое вы должны установить для shmall.

ceil (512 КБ / 4096 байт) = 128

Наименьший размер, который вы должны установить для shmall, - 128 страниц. Ничто не мешает вам установить его выше. Shmall - это просто ограничение, указывающее, что вы не будете использовать больше этого объема памяти для общей памяти, независимо от того, есть ли один сегмент или десять.