Настройки CPU для production

Проблема

Энергосберегающие режимы процессора (такие как Intel SpeedStep, AMD Cool'n'Quiet, C-states, P-states) могут негативно влиять на производительность YDB по нескольким причинам:

  1. Нестабильная частота процессора — YDB ожидает стабильной производительности CPU для предсказуемого выполнения операций.
  2. Проблемы с affinity ядер — при изменении частоты отдельных ядер нарушается балансировка нагрузки между потоками.
  3. Задержки переключения режимов — переходы между энергосберегающими состояниями вводят дополнительные задержки.
  4. Непредсказуемая производительность — операции могут выполняться с разной скоростью в зависимости от текущего режима процессора.

Симптомы проблемы:

  • Нестабильное время выполнения запросов.
  • Необъяснимые просадки производительности.
  • Проблемы с балансировкой нагрузки между узлами кластера.
  • Непредсказуемое поведение при высокой нагрузке.

Решение

Рекомендуемые настройки BIOS/UEFI

Для серверов YDB рекомендуется настроить следующие параметры BIOS/UEFI:

  1. CPU Power Management — перевести в режим «Performance» или «Max Performance».
  2. Intel Turbo Boost — рекомендуется включить для максимальной производительности.
  3. C-states — отключить или ограничить до C1/C1E.
  4. P-states — использовать фиксированную максимальную частоту.
  5. Intel SpeedStep / AMD Cool'n'Quiet — отключить.
  6. Package C-State Limit — установить в C0 или C1.

Настройки операционной системы

Для Linux-систем при ручном развёртывании (при использовании Ansible-роли это настраивается автоматически) выполните следующие команды с правами администратора:

# Установить governor в режим performance для всех ядер
echo 'performance' | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor >/dev/null

# Установить минимальную частоту равной максимальной
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq | \
sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_min_freq >/dev/null

# Отключить энергосбережение для PCIe
echo 'performance' | sudo tee /sys/module/pcie_aspm/parameters/policy >/dev/null

Проверка текущих настроек

Для проверки текущего состояния можно использовать следующие команды. После применения настроек первая команда должна выводить performance для каждого ядра.

# Проверить текущий governor
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

# Проверить доступные частоты
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies

# Проверить C-states
cat /sys/devices/system/cpu/cpu0/cpuidle/state*/name

Обоснование

YDB как высокопроизводительная распределённая СУБД требует стабильной и предсказуемой производительности процессора. Энергосберегающие режимы, разработанные для клиентских устройств, не подходят для серверных рабочих нагрузок, где важна постоянная доступность и минимальная задержка.

Стабильная частота процессора обеспечивает:

  • Предсказуемое время выполнения операций.
  • Корректную работу механизмов балансировки нагрузки.
  • Стабильную производительность под высокой нагрузкой.
  • Минимальные задержки при обработке транзакций.

Исключения

В некоторых сценариях можно рассмотреть компромиссные решения:

  • Тестовые среды — где энергоэффективность важнее производительности.
  • Резервные узлы — не участвующие в активной обработке.
  • Среды с низкой нагрузкой — где экономия энергии имеет приоритет.

Однако для production-сред с высокой нагрузкой рекомендуется строго следовать приведённым рекомендациям.