Увеличиваем производительность процессоров в Linux

Большинство дистрибутивов Linux, в частности ubuntu, Debian, archlinux – собирают ядро с поддержкой модуля cpufreq, который снижает частоту процессора до минимально допустимой в угоду снижения энергопотребления.

Это значит что в любой момент времени процессор сбрасывает частоты, что может негативно сказаться на рендринге, либо играх.\

▶Выглядит это вот так:

[svetozar@Jarvis ~]$ cat /proc/cpuinfo | grep MHz
cpu MHz : 1408.428
cpu MHz : 3666.192
cpu MHz : 4000.953
cpu MHz : 1371.611
cpu MHz : 3250.362
cpu MHz : 4189.559
cpu MHz : 3866.385
cpu MHz : 4317.367
[svetozar@Jarvis ~]$ cat /proc/cpuinfo | grep MHz
cpu MHz : 800.053
cpu MHz : 800.051
cpu MHz : 800.067
cpu MHz : 800.006
cpu MHz : 800.012
cpu MHz : 800.004
cpu MHz : 800.034
cpu MHz : 799.976
[svetozar@Jarvis ~]$ cat /proc/cpuinfo | grep MHz
cpu MHz : 800.020
cpu MHz : 800.029
cpu MHz : 800.028
cpu MHz : 800.023
cpu MHz : 800.044
cpu MHz : 800.017
cpu MHz : 800.020
cpu MHz : 800.023

Вдруг, посреди работы, или потной катки, у нас падает производительность. Это не есть хорошо. Основная проблема в том, что cpufreq выставлен в режим powersave. Проверить это можно командой:

cat /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
powersave

Мы можем безболезненно выставить режим perfomance и убрать нежелательные сбросы частот процессора.

Как заставить процессор не сбрасывать частоту в linux?

Данный простой bash-скрипт отключает все режимы энергосбережения процессора и заставляет его работать на максимальной рабочей частоте (разгона не происходит):

#!/bin/sh
for cf in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor;
do
echo performance > $cf;
#echo powersave > $cf;
done

Нет, все равно, сброс будет, но не такой жесткий.
Для запуска скрипта в системе создадим в /opt/ файл antidropcpu.sh (с содержимом выше), дадим права на запуск и запустим от пользователя – root

cd /opt
touch antidropcpu.sh
chmod +x antidropcpu.sh

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

sudo ./antidropcpu.sh

Производительность процессора увеличится немедленно. Действие будет выполнено сразу для всех доступных ядер CPU.
Проверить также можно командой:

cat /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
perfomance

Ну и посмотрев частоты процессора можно будет заменить какая у них частота:

[svetozar@Jarvis ~]$ cat /proc/cpuinfo | grep MHz
cpu MHz : 4290.454
cpu MHz : 4023.150
cpu MHz : 4360.156
cpu MHz : 4323.625
cpu MHz : 4314.861
cpu MHz : 4354.561
cpu MHz : 4290.469
cpu MHz : 4425.866

▶Важно: После рестарта рабочей машины система cpufreq все равно будет работать в режиме powersave. Так что лучше наш скрипт прописать в автозапуск.

▶ Почему powersave по умолчанию?
Линукс не знает куда его ставят и поэтому всегда экономно распоряжается ресурсами.

▶ Когда и где актуально использование увеличение производительности через cpufreq?
Да везде, если у Вас старый ноут, или 2-х ядерный Сeleron(как у меня на работе), убрав сбросы частот вы получите не плохой прирост производительности. Да, он будет заметен глазу даже на Celeron. Что уж говорить, когда у вас I7-7700k или 6-ти ядерный, 12-ти поточный xeon .

От Светозар

Senior Engineer в MTS PJST. Люблю компьютерные железки, линукс, автомобили и отдых на свежем воздухе. Мой TG канал: @svetozar_kolesnikov

6 комментарий для “Как увеличить производительность процессоров в Linux?”
  1. У вас в статье ошибка. Вместо chmod +x antdropcpu.sh, надо написать chmod +x antidropcpu.sh. Букву i забыли!

  2. Это всё хорошо, но только проц может перегрется.

  3. а чем вам штатный демон для этих нужд не устраивает ?
    cpufrequtils

Комментарии закрыты.