Как управлять частотой процессора | Ubuntu

0
13

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

Однако, недавно я заметил, что у неё есть один недостаток: «ondemand» воспринимает нагрузку на процессор, вызванную операциями ввода-вывода, как «idle». Что это значит Это значит, что при загрузке процессора операциями ввода-вывода частота процессора зачастую остаётся на пониженном уровне, что создаёт проблемы, если ваша система страдает от печально известного линуксового бага с iowait.

Бороться с таким поведением «ondemand» можно двумя способами.

Первый вариант — отключить энергосберегающий режим процессора. Например, исправив скрипт, который его включает. Он скрывается под вполне логичным именем «ondemand» и располагается в /etc/init.d. Если исправить в этом файле строку

echo -n ondemand > $CPUFREQ

на

echo -n performance> $CPUFREQ

, то процессор будет постоянно работать на максимальной частоте.

Второй вариант — включить для «ondemand» режим, в котором он не будет игнорировать iowait. Это управляется параметром в /sys/devices/system/cpu/cpufreq/ondemand/io_is_busy. Для этого я написал маленький init-скрипт:

#! /bin/sh
### BEGIN INIT INFO
# Provides: io-is-busy
# Required-Start: $ondemand
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: makes «ondemand» frequency governor to respect iowait load
### END INIT INFO

case «$1″ in
start)
start-stop-daemon -start -background -exec /etc/init.d/io-is-busy — background
;;
background)
sleep 65 # waiting till ondemand finish its’ work
echo 1 > /sys/devices/system/cpu/cpufreq/ondemand/io_is_busy
;;
restart|reload|force-reload)
echo «Error: argument ‘$1′ not supported» >&2
exit 3
;;
stop)
echo 0 > /sys/devices/system/cpu/cpufreq/ondemand/io_is_busy
;;
*)
echo «Usage: $0 start|stop» >&2
exit 3
;;
esac

После этого скрипт сохраняется в файл /etc/init.d/io-is-busy, делается исполняемым и прописывается в системе командой sudo update-rc.d io-is-busy defaults 99 99.

Всё. Теперь при повышении загрузки процессора операциями ввода-вывода, частота автоматически поднимается до максимальной, как мне и хотелось.