Linux

Настройка huge pages в Linux: полное руководство по конфигурации

Этот гайд охватывает все аспекты настройки huge pages в Linux: от понимания концепции до практической конфигурации и проверки. Вы научитесь оптимизировать память для тяжелых приложений.

Обновлено 15 февраля 2026 г.
15-30 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 20.04 LTSUbuntu 22.04 LTSCentOS 7CentOS 8 Stream

Введение / Зачем это нужно

Huge pages (большие страницы памяти) — это механизм Linux, позволяющий использовать страницы памяти размером 2 МБ или 1 ГБ вместо стандартных 4 КБ. Это снижает нагрузку на TLB (Translation Lookaside Buffer) и уменьшает количество page faults, что особенно полезно для приложений с высоким потреблением памяти, таких как базы данных (Oracle, MySQL), системы виртуализации (KVM) и высокопроизводительные вычисления. В этом гайде вы узнаете, как настроить как стандартные huge pages, так и transparent huge pages (THP) в Linux для оптимизации производительности.

Требования / Подготовка

Перед началом убедитесь, что:

  • У вас есть доступ к системе Linux с правами суперпользователя (root или через sudo).
  • Вы знакомы с базовыми командами терминала и редактированием файлов.
  • Установлены утилиты: grep, sysctl, grub2-mkconfig (для GRUB2) или update-grub (для Ubuntu/Debian).
  • Ваше приложение поддерживает huge pages (например, Oracle Database требует явной настройки use_large_pages=TRUE).
  • Система имеет достаточно свободной памяти для резервирования huge pages (каждая 2 МБ страница резервируется при загрузке).

Шаг 1: Проверка текущей конфигурации huge pages

Сначала определите, какие huge pages уже настроены. Выполните:

grep -i huge /proc/meminfo

Обратите внимание на поля:

  • HugePages_Total: общее количество резервированных huge pages.
  • HugePages_Free: количество свободных huge pages.
  • Hugepagesize: размер одной huge page (обычно 2048 kB для 2 МБ).

Для transparent huge pages (THP) проверьте:

cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag

Вывод будет выглядеть как:

[always] madvise never

где текущий режим выделен в квадратных скобках. always — THP всегда используются, madvise — только по запросу приложения, never — отключены.

Шаг 2: Определение требуемого количества huge pages

Рассчитайте, сколько huge pages нужно для вашего приложения. Например, если приложению требуется 16 ГБ памяти, и размер huge page 2 МБ:

Количество = (16 * 1024 МБ) / 2 МБ = 8192 страниц.

Учтите, что huge pages резервируются в физической памяти и недоступны для других процессов. Выделяйте с запасом, но не слишком много, чтобы не истощить память. Для приложений, которые используют не всё одновременно, можно выделить меньше.

Шаг 3: Настройка стандартных huge pages через sysctl

Для временной настройки (действует до перезагрузки) используйте sysctl:

sudo sysctl vm.nr_hugepages=8192

Чтобы сделать настройку постоянной, отредактируйте /etc/sysctl.conf:

vm.nr_hugepages=8192

Примените изменения:

sudo sysctl -p

Однако, sysctl применяет настройку после загрузки системы, и huge pages будут выделены только если в памяти достаточно непрерывных свободных блоков. Для гарантированного резервирования при загрузке лучше использовать параметр ядра в GRUB.

Шаг 4: Настройка через GRUB (рекомендуется)

Редактируйте конфигурацию GRUB:

sudo nano /etc/default/grub

Найдите строку, начинающуюся с GRUB_CMDLINE_LINUX, и добавьте hugepages=8192. Например:

GRUB_CMDLINE_LINUX="quiet splash hugepages=8192"

Если нужно использовать huge pages размером 1 ГБ (требуется поддержка ядра и конфигурация), добавьте также hugepagesz=1G:

GRUB_CMDLINE_LINUX="quiet splash hugepages=8192 hugepagesz=1G"

После изменения обновите конфигурацию GRUB:

Для Ubuntu/Debian:

sudo update-grub

Для RHEL/CentOS:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

Затем перезагрузите систему, чтобы huge pages были зарезервированы при загрузке.

⚠️ Важно: Убедитесь, что выделенное количество huge pages не превышает доступной физической памяти. Рекомендуется выделять не более 50% от общей памяти, чтобы оставить место для ОС и других процессов.

Шаг 5: Настройка transparent huge pages (THP)

Transparent huge pages управляются ядром автоматически, но вы можете изменить поведение. Для отключения THP или установки в режим madvise (рекомендуется для многих приложений) выполните:

Временно (до перезагрузки):

echo madvise | sudo tee /sys/kernel/mm/transparent_hugepage/enabled

Для постоянной настройки создайте systemd-сервис. Создайте файл /etc/systemd/system/disable-thp.service:

[Unit]
Description=Disable Transparent Huge Pages
After=network.target

[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo madvise > /sys/kernel/mm/transparent_hugepage/enabled"

[Install]
WantedBy=multi-user.target

Включите и запустите сервис:

sudo systemctl daemon-reload
sudo systemctl enable disable-thp.service
sudo systemctl start disable-thp.service

Альтернативно, можно добавить в /etc/rc.local, но systemd предпочтительнее.

💡 Совет: Режим madvise часто является оптимальным для THP, так как он позволяет приложению явно запрашивать huge pages через madvise(MADV_HUGEPAGE), избегая случайных латенси от автоматического управления.

Шаг 6: Перезагрузка системы

После настройки через GRUB или для применения изменений в THP перезагрузите систему:

sudo reboot

После перезагрузки проверьте конфигурацию, как описано в Шаге 1.

Проверка результата

После перезагрузки убедитесь, что huge pages настроены правильно:

  1. Проверьте стандартные huge pages:
    grep -i huge /proc/meminfo
    

    HugePages_Total должно соответствовать заданному значению, а HugePages_Free — быть близким к нему (если huge pages не используются приложениями).
  2. Проверьте THP:
    cat /sys/kernel/mm/transparent_hugepage/enabled
    

    Должно отображать выбранный режим (например, madvise).
  3. Для конкретных приложений:
    • Oracle Database: запрос SELECT * FROM V$SGASTAT WHERE NAME LIKE '%Huge%'; должен показывать использование huge pages.
    • MySQL (InnoDB): в SHOW ENGINE INNODB STATUS ищите "Huge pages" или проверьте /proc/<pid>/smaps на наличие "huge" вхождения.

Если значения соответствуют ожидаемым, настройка успешна.

Возможные проблемы

  • Система не загружается после добавления hugepages в GRUB: Это может произойти, если выделено слишком много huge pages и памяти не хватает при загрузке. Загрузитесь в recovery mode или с помощью Live CD, отредактируйте /etc/default/grub и уменьшите значение hugepages, затем обновите GRUB.
  • Huge pages не резервируются после перезагрузки: Убедитесь, что параметр hugepages указан правильно в GRUB и что ядро поддерживает huge pages (проверьте grep CONFIG_HUGETLBFS /boot/config-$(uname -r)). Также проверьте, достаточно ли свободной памяти при загрузке.
  • Приложение не использует huge pages: Для Oracle убедитесь, что в spfile установлен use_large_pages=TRUE и SGA размером соответствует huge pages. Для других приложений проверьте документацию по настройке huge pages.
  • Transparent huge pages вызывают латенси или падения производительности: Некоторые приложения работают лучше с THP отключенным. Экспериментируйте с режимами always, madvise, never. Режим madvise часто является компромиссом.
  • Ошибки при записи в /sys/kernel/mm/transparent_hugepage/enabled: Убедитесь, что вы выполняете команду от root и что файл существует (на очень старых ядрах THP может отсутствовать). В таком случае обновите ядро.

Если проблемы persist, проверьте логи ядра (dmesg | grep huge) на наличие ошибок.

Часто задаваемые вопросы

Что такое huge pages и зачем они нужны?
Как проверить, включены ли huge pages в моей системе?
Можно ли настраивать huge pages без перезагрузки?
Какие размеры huge pages поддерживаются?

Полезное

Проверка текущей конфигурации huge pages
Определение требуемого количества huge pages
Настройка стандартных huge pages через sysctl
Настройка через GRUB для постоянного резервирования
Управление transparent huge pages
Перезагрузка системы