Изменение CPU Scaling Governor в Linux

Благодаря «Scaling Governor», можно выбрать оптимальную схему управления частотой процессора, что влияет на потребление электроэнергии и производительность.

На высоко нагруженных серверах доступа у знакомых были случаи зависания сервера при «ondemand», хотя у меня таких случаев не было, но все же рекомендую изменить на «performance».
На ноутбуках и слабо нагруженных серверах можно оставить «ondemand» для экономии электроэнергии.

На серверах HPE в BIOS обязательно нужно включить Collaborative Power Control (CPC) иначе из операционной системы нельзя будет управлять производительностью процессора и не будет этих файлов:

find / -name scaling_governor
find / -name scaling_max_freq

Посмотрим текущее значение всех ядер процессора:

cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
ls /sys/devices/system/cpu/

В моем случает, для всех восьми ядер отобразилось значение по умолчанию — «ondemand».

Посмотрим возможные схемы:

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors

Переключимся на root пользователя:

sudo -i

И укажем для всех ядер «performance»:

echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo performance > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
echo performance > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor
echo performance > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor
echo performance > /sys/devices/system/cpu/cpu4/cpufreq/scaling_governor
echo performance > /sys/devices/system/cpu/cpu5/cpufreq/scaling_governor
echo performance > /sys/devices/system/cpu/cpu6/cpufreq/scaling_governor
echo performance > /sys/devices/system/cpu/cpu7/cpufreq/scaling_governor

Либо так:

apt install cpufrequtils
for i in 0 1 2 3 4 5 6 7 8 9 10 11; do cpufreq-set -c $i -g performance; done

Проверим:

cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
egrep '(MHz)' /proc/cpuinfo

Если предыдущие способы не помогли, то для Intel CPU можно также указать «intel_idle.max_cstate» в grub:

nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="... intel_idle.max_cstate=1"
update-grub
reboot
dmesg -T | grep intel_idle

Либо можно полностью отключить энергосберегающие функции CPU и PCIe:

intel_idle.max_cstate=0 processor.max_cstate=1 pcie_aspm=off quiet mitigations=off

В крайнем случае с idle=poll:

intel_idle.max_cstate=0 processor.max_cstate=1 pcie_aspm=off quiet mitigations=off idle=poll

Замечу, что если указать idle=poll, то в BIOS или iLo например, может отображаться что CPU используется на 100%, хотя это не так.

Также отключим уже ненужную службу энергосбережения:

systemctl is-enabled ondemand
systemctl disable ondemand

Смотрите также мои статьи:
Управление мощностью ядер процессора в Linux
PCI Express ASPM

Оставьте комментарий

Добавить комментарий