Настройки CPU для production
Проблема
Энергосберегающие режимы процессора (такие как Intel SpeedStep, AMD Cool'n'Quiet, C-states, P-states) могут негативно влиять на производительность YDB по нескольким причинам:
- Нестабильная частота процессора — YDB ожидает стабильной производительности CPU для предсказуемого выполнения операций.
- Проблемы с affinity ядер — при изменении частоты отдельных ядер нарушается балансировка нагрузки между потоками.
- Задержки переключения режимов — переходы между энергосберегающими состояниями вводят дополнительные задержки.
- Непредсказуемая производительность — операции могут выполняться с разной скоростью в зависимости от текущего режима процессора.
Симптомы проблемы:
- Нестабильное время выполнения запросов.
- Необъяснимые просадки производительности.
- Проблемы с балансировкой нагрузки между узлами кластера.
- Непредсказуемое поведение при высокой нагрузке.
Решение
Рекомендуемые настройки BIOS/UEFI
Для серверов YDB рекомендуется настроить следующие параметры BIOS/UEFI:
- CPU Power Management — перевести в режим «Performance» или «Max Performance».
- Intel Turbo Boost — рекомендуется включить для максимальной производительности.
- C-states — отключить или ограничить до C1/C1E.
- P-states — использовать фиксированную максимальную частоту.
- Intel SpeedStep / AMD Cool'n'Quiet — отключить.
- 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-сред с высокой нагрузкой рекомендуется строго следовать приведённым рекомендациям.