Начать использовать подсистему CPUfreq в Linux несложно. Давайте подробнее рассмотрим её настройки и некоторые функции интерфейса. Начнём с некоторых общих настроек, а именно:
- Интерфейс /sys
- Файл настроек cpuspeed
- Утилиты cpufreq-utils
Файловая система /sys, начиная с подкаталога /sys/devices/system/cpu/, предоставляет пользовательский интерфейс для CPUfreq. Некоторые из этих файлов доступны на запись (для root), другие — только для чтения.
Взглянем сначала на /sys/devices/system/cpu/. Здесь располагаются каталоги для каждого из логических процессоров, настраиваемый параметр
sched_mc_power_savings и (в случае, если он есть в вашей системе) настраиваемый параметр
sched_smt_power_savings, который мы обсудим позже.
Листинг 1. Просматриваем содержимое /sys/devices/system/cpu/
[root@systemx ~]# cd /sys/devices/system/cpu/ |
Внутри каталога каждого процесса находится каталог cpufreq, содержащий интерфейс CPUfreq:
Листинг 2. Просматриваем каталог cpufreq
[root@systemx cpu]# cd cpu0/cpufreq/
[root@systemx cpufreq]# ls -l
total 0
-r--r--r-- 1 root root 4096 Oct 31 14:53 affected_cpus
-r-------- 1 root root 4096 Oct 31 14:53 cpuinfo_cur_freq
-r--r--r-- 1 root root 4096 Oct 31 14:53 cpuinfo_max_freq
-r--r--r-- 1 root root 4096 Oct 31 14:53 cpuinfo_min_freq
-r--r--r-- 1 root root 4096 Oct 31 14:53 scaling_available_frequencies
-r--r--r-- 1 root root 4096 Oct 31 14:53 scaling_available_governors
-r--r--r-- 1 root root 4096 Oct 31 14:53 scaling_cur_freq
-r--r--r-- 1 root root 4096 Oct 31 14:53 scaling_driver
-rw-r--r-- 1 root root 0 Nov 5 11:44 scaling_governor
-rw-r--r-- 1 root root 4096 Oct 31 14:53 scaling_max_freq
-rw-r--r-- 1 root root 4096 Oct 31 14:53 scaling_min_freq
|
Если в системе настроены регуляторы conservative или ondemand, здесь также будет каталог с названием, соответствующим настроенному регулятору. Позже мы обсудим, как поменять регулятор.
Эти файлы есть у каждого из регуляторов. Мы поговорим о том, что означает каждая из настроек и как изменить некоторые из них; затем обсудим некоторые из настроек регуляторов в рамках этого интерфейса. Обратите внимание на то, что настройки в каталоге cpufreq будут разными для каждого процессора, поэтому, чтобы получить общую политику для всех процессоров, нужно изменять настройку каждого процессора, как это будет описано в следующих разделах статьи.
Настройка affected_cpus показывает, на какие процессоры влияет изменение частоты. Дело в том, что некоторые процессоры зависят от частоты других процессоров в силу аппаратного или программного взаимодействия (или и того и другого) и должны поэтому изменять частоту одновременно. Например, можно встретить такую настройку:
Листинг 3. Узнаем, на какие процессоры влияет изменение тактовой частоты
[root@systemx ~]# cd /sys/devices/system/cpu [root@systemx cpu]# grep . cpu*/cpufreq/affected_cpus cpu0/cpufreq/affected_cpus:0 1 cpu1/cpufreq/affected_cpus:0 1 cpu2/cpufreq/affected_cpus:2 3 cpu3/cpufreq/affected_cpus:2 3 |
Далее, настройка cpuinfo_cur_freq показывает текущую рабочую частоту процессора. В файле
scaling_cur_freq указаны текущие масштабируемые частоты, используемые регуляторами.
Листинг 4. Узнаём значения частоты
[root@systemx cpufreq]# cat cpuinfo_cur_freq 2997000 [root@systemx cpufreq]# cat scaling_cur_freq 2997000 |
Значения частот в этом файле указаны в кГц.
Далее идут файлы, в которых хранится информация о доступных частотах процессора. В файлах cpuinfo_max_freq и
cpuinfo_min_freq записаны максимальная и минимальная частоты, доступные в этой системе; файл
scaling_available_frequencies содержит значения всех доступных частот.
Листинг 5. Узнаём максимальную, минимальную и все доступные частоты
[root@systemx cpufreq]# cat cpuinfo_max_freq 2997000 [root@systemx cpufreq]# cat cpuinfo_min_freq 1998000 [root@systemx cpufreq]# cat scaling_available_frequencies 2997000 2664000 2331000 1998000 |
В файле scaling_available_governors перечислены все доступные регуляторы. Если их меньше пяти, проверьте их наличие в конфигурационном файле ядра, а также проверьте, загружаете ли вы модули регуляторов, как было описано в первой части этой серии статей.
Листинг 6. Проверяем доступные регуляторы
[root@systemx cpufreq]# cat scaling_available_governors ondemand powersave conservative userspace performance |
Из файла scaling_driver можно узнать, какой из драйверов cpufreq используется в системе. Наиболее типичные драйверы —
acpi, speedstep-smi,
speedstep-centrino,
powernor_k8,
powernow_k7,
longhaul и т.д. Чтобы сменить драйвер, необходимо сначала выгрузить текущий, затем загрузить другой. Также проверьте, заработает ли желаемый драйвер с вашим процессором, прежде чем пытаться его использовать.
Листинг 7. Узнаём текущий драйвер cpufreq
[root@systemx cpufreq]# cat scaling_driver centrino |
Остальные файлы в этом каталоге доступны на запись для root и дают пользователю возможность изменять некоторые настройки cpufreq. Эти файлы — единственное, что может изменять пользователь для управления работой регуляторов powersave и performance. У других регуляторов есть дополнительные настройки, которые мы обсудим в следующем разделе.
В файле scaling_governor содержится информация о том, какой именно регулятор активен. Чтобы его сменить, занесите название желаемого регулятора в файл с помощью команды
echo. Заметьте, что эту процедуру нужно проделать для каждого процессора в целях поддержания единой политики. Например:
Листинг 8 Проверяем активность регулятора и изменяем текущий регулятор
[root@systemx ~]# cd /sys/devices/system/cpu/ [root@systemx cpu]# ls cpu0 cpu1 cpu2 cpu3 cpu4 cpu5 cpu6 cpu7 sched_mc_power_savings [root@systemx cpu]# cat cpu0/cpufreq/scaling_governor performance [root@systemx cpu]# echo conservative > cpu0/cpufreq/scaling_governor [root@systemx cpu]# cat cpu0/cpufreq/scaling_governor conservative |
В файлах scaling_max_freq и
scaling_min_freq указаны максимальная и минимальная частота, доступные регулятору. Пользователь может изменить диапазон доступных тактовых частот, внеся доступное значение в эти файлы при помощи команды
echo. Заметьте, что это знание должно быть одним из значений, указанных в файле
scaling_available_frequencies, поскольку только эти значения доступны системе. И опять не забудьте, что эту процедуру нужно проделать отдельно для каждого процессора. Например:
Листинг 9. Изменение тактовых частот, доступных регулятору
[root@systemx ~]# cd /sys/devices/system/cpu/ [root@systemx cpu]# cat cpu0/cpufreq/scaling_available_frequencies 2997000 2664000 2331000 1998000 [root@systemx cpu]# cat cpu0/cpufreq/scaling_max_freq 2997000 [root@systemx cpu]# cat cpu0/cpufreq/scaling_min_freq 1998000 [root@systemx cpu]# echo 2331000 > cpu0/cpufreq/scaling_min_freq [root@systemx cpu]# cat cpu0/cpufreq/scaling_min_freq 2331000 |
Использование файла настроек cpuspeed
Кроме прямого внесения значений с помощью команды echo, как было показано выше, пользователь может прибегнуть к настройкам в файле cpuspeed. Эти настройки применяются для изменения драйвера, регулятора, максимального и минимального значения скорости, порогов использования процессора и настройки
ignore_nice_load. В RHEL 5.2 утилита cpuspeed присутствует по умолчанию, но в других дистрибутивах её может и не быть. В таком случае её можно
скачать с сайта carlthompson.net;
инструкции по установке находятся в файле README. Чтобы использовать версию cpuspeed из RHEL 5.2, просто отредактируйте файл /etc/sysconfig/cpuspeed, вписав нужные значение переменных, и введите команду
/etc/init.d/cpuspeed restart
чтобы изменения вступили в силу. Помните, что для того, чтобы начать использовать какой-нибудь из регуляторов, необходимо загрузить соответствующий модуль, если только он не был встроен в ядро.
Использование утилит cpufreq-utils
В состав RHEL 5.2, а также некоторых других дистрибутивов входит пакет cpufreq-utils, предоставляющий другой пользовательский интерфейс для подсистемы CPUfreq. В других дистрибутивах этот пакет тоже скорее всего должен присутствовать. После установки rpm-пакета cpufreq-utils в системе появятся две утилиты: cpufreq-info и cpufreq-set.
Утилита cpufreq-info выводит информацию о процессорах и настройках CPUfreq для них, таких как текущая частота, её пределы, используемый драйвер CPUfreq, текущая политика, текущий регулятор и список affected-cpus.
Утилита cpufreq-set даёт пользователю возможность изменять доступный диапазон тактовых частот для каждого процессора, активный регулятор и текущую рабочую частоту для регулятора userspace. Подробности смотрите в man-руководствах cpufreq-info и cpufreq-set.
Обсудим теперь доступные пользователю настройки регуляторов.
Регуляторы powersave и performance
Эти регуляторы статически устанавливают тактовую частоту процессора на минимальное и на максимальное значение соответственно. Пользователь может изменить только те настройки, которые обсуждались в предыдущем разделе.
Теперь мы приступаем к обсуждению настроек для конкретных регуляторов. При задействованном регуляторе userspace в каталоге cpufreq будет присутствовать файл
scaling_setspeed , доступный на запись для root. Этот регулятор даёт пользователю или программе в пользовательском пространстве возможность изменять тактовую частоту процессора. С помощью команды echo пользователь может внести нужное значение частоты в этот файл или же представить возможность установить эту частоту какому-нибудь демону в пользовательском пространстве. Как говорилось ранее, во время обсуждения файлов настроек, вносить настройку в файл
scaling_setspeed необходимо для каждого из процессоров.
С регулятором userspace взаимодействуют несколько демонов, которые могут настраивать частоту процессора. Вот некоторые из них:
cpudyn(CPU dynamic frequency control): этот демон меняет частоту в соответствии с загрузкой процессора, а также, для ещё большей экономии энергии, может переводить диски в режим ожидания (standby) при отсутствии дисковой активности.cpufreqd: это демон можно настроить на реагирование на уровень заряда батареи, тип питания (от сети или от батареи), температуру, запущенные программы, уровень использования процессора и на другие факторы.cpuspeed: этот демон изменяет частоту в соответствии с требованиями процессора, изменением источника питания, температурой и другими данными.powernowd: этот демон регулятора изменяет частоту процессора в соответствии с загрузкой процессора; у него четыре режима поведения, выбираемых пользователем.
При задействованном регуляторе ondemand в каталоге cpufreq присутствует каталог ondemand. В этом каталоге имеется множество регулируемых настроек. Все файлы, доступные на запись для root, можно изменить, вписав новое значение с помощью команды
echo, как показывалось ранее. Заметьте, что любые изменения в настройках регулятора ondemand будут применяться на общесистемном уровне, поэтому нет необходимости изменять настройки для каждого процессора.
Листинг 10. Проверяем изменяемые настройки для ondemand
[root@systemx ~]# cd /sys/devices/system/cpu/cpu0/cpufreq/ondemand/ [root@systemx ondemand]# ls -l total 0 -rw-r--r-- 1 root root 4096 Nov 19 10:30 ignore_nice_load -rw-r--r-- 1 root root 4096 Nov 19 10:30 powersave_bias -rw-r--r-- 1 root root 4096 Nov 19 10:30 sampling_rate -r--r--r-- 1 root root 4096 Nov 19 10:30 sampling_rate_max -r--r--r-- 1 root root 4096 Nov 19 10:30 sampling_rate_min -rw-r--r-- 1 root root 4096 Nov 19 10:30 up_threshold |
В файл ignore_nice_load вписывается значение 0 или 1 (по умолчанию 0). При установленном параметре "1" любой процесс с установленными значением "nice" не будет учитываться при расчёте общего использования процессора. При параметре "0" учитываются все процессы. Эта настройка может пригодиться, если у вас есть программа, требовательная к процессорным ресурсам, но продолжительность ее работы не имеет значения. Если применить настройку "nice" к процессу, он не будет влиять на изменения частоты.
Далее, настройки файла powersave_bias были введены для того, чтобы слегка изменять поведение регулятора ondemand в целях большей экономии энергии путём снижения определённой частоты на указанный процент в ситуациях, когда пользователю не очень важна производительность. Эта настройка может иметь значение от 1 до 1000, что дает от 0.1% до 100% снижения частоты.
sampling_rate, измеряемая в микросекундах, определяет, насколько часто регулятор будет проверять использование процессора для определения нужной частоты. Эта настройка принимает значение в промежутке от
sampling_rate_min до
sampling_rate_max.
Наконец, настройка up_threshold даёт пользователю возможность изменять пороговое значение максимального использования процессора, влекущее за собой изменение частоты процессора. Значение по умолчанию — 80. Это означает, что через определённые промежутки, указанные в настройке
sampling_rate, ядро проверяет процент использования процессора, и при 80% регулятор повышает частоту до максимально возможной.
При использовании регулятора conservative в каталоге cpufreq появляется подкаталог conservative. В этом подкаталоге имеется множество настроек. Все файлы, доступные на запись для root, можно изменять, вписывая в них новое значение с помощью команды
echo, как было показано ранее. Заметьте, что любые изменения в настройках регулятора conservative будут применяться на общесистемном уровне, поэтому нет необходимости изменять настройки для каждого процессора.
Листинг 11. Настройки, доступные для регулятора conservative
[root@systemx ~]# cd /sys/devices/system/cpu/cpu0/cpufreq/conservative/ [root@systemx conservative]# ls -l total 0 -rw-r--r-- 1 root root 4096 Nov 19 11:31 down_threshold -rw-r--r-- 1 root root 4096 Nov 19 11:31 freq_step -rw-r--r-- 1 root root 4096 Nov 19 11:31 ignore_nice_load -rw-r--r-- 1 root root 4096 Nov 19 11:31 sampling_down_factor -rw-r--r-- 1 root root 4096 Nov 19 11:31 sampling_rate -r--r--r-- 1 root root 4096 Nov 19 11:31 sampling_rate_max -r--r--r-- 1 root root 4096 Nov 19 11:31 sampling_rate_min -rw-r--r-- 1 root root 4096 Nov 19 11:31 up_threshold |
Настройки ignore_nice_load,
sampling_rate,
sampling_rate_max,
sampling_rate_min и
up_threshold аналогичны настройкам, уже описанным для регулятора ondemand.
Регулятор conservative также даёт пользователю возможность настроить значение
down_threshold. К примеру, по умолчанию это значение настроено на 20. Это означает, что через определённые промежутки, указанные в настройке sampling_rate, ядро проверяет процент использования процессора, и если это значение ниже 20%, регулятор будет снижать частоту.
Настройка freq_step изменяет размер шага (в ту или иную сторону), на который регулятор изменяет частоту процессора. По умолчанию это значение равно 5, то есть регулятор будет изменять частоту на 5 процентов от максимальной или минимальной каждый раз, когда он принимает решения об изменении частоты. В случае, если значение равно 100, регулятор будет действовать точно так же, как и регулятор ondemand.
Наконец, sampling_down_factor работает как множитель к значению sampling_rate для снижения частоты опроса процессора. Например, если значение sampling_rate равно 10000, а значение
sampling_down_factor — 2, то ядро будет проверять процент использования процессора каждые 20000 микросекунд.
Изменяемые настройки планировщика
Рассмотрим теперь две изменяемые настройки планировщика: —
sched_mc_power_savings— для планирования процессов ядраsched_smt_power_savings— для планирования процессов в гиперпотоках ядра
sched_mc_power_savings — это изменяемая настройка планировщика, расположенная в каталоге /sys/devices/system/cpu/. Если вы хотите использовать эту настройку, то не забудьте выбрать y для опции CONFIG_SCHED_MC в конфигурационном файле ядра, как описано в разделе настройки
первой части этой статьи.
Листинг 12. Узнаём расположение sched_mc_power_savings
[root@systemx ~]# cd /sys/devices/system/cpu/ [root@systemx cpu]# ls -l total 0 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu0 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu1 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu2 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu3 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu4 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu5 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu6 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu7 -rwxrwxr-x 1 root root 4096 Nov 19 09:54 sched_mc_power_savings |
Значение в файле sched_mc_power_savings может быть равно 0 или 1; значение по умолчанию — 0. При установленном параметре "1" планировщик попытается загрузить работой наименьшее возможное количество ядер, чтобы остальные оставались свободны. Другими словами, если каждый процессор немного загружен,
sched_mc_power_savings старается сконцентрировать эту работу на минимально возможном количестве процессоров. Это в свою очередь даёт возможность чуть дольше "передохнуть" некоторым процессорам, что экономит энергию, особенно если процессор поддерживает какие-либо режимы глубокого сна, например, режимы C, которые потребляют в простое крайне малое количество энергии. Итоговая экономия может зависеть от многих факторов, включая то, какое количество процессоров доступно в системе и какой из регуляторов работает. При установленном значении "0" планировщик не действует.
sched_smt_power_savings — это ещё одна изменяемая настройка, которая также находится в каталоге /sys/devices/system/cpu/; однако она доступна только в системах, поддерживающих технологию HyperThreading. Если вы хотите использовать эту изменяемую настройку, не забудьте в конфигурационном файле ядра выбрать y для опции
CONFIG_SCHED_SMT, как обсуждалось в разделе настроек в первой части.
Листинг 13. Находим sched_smt_power_savings
[root@systemx ~]# cd /sys/devices/system/cpu/ [root@systemx cpu]# ls -l total 0 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu0 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu1 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu2 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu3 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu4 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu5 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu6 drwxr-xr-x 5 root root 0 Nov 12 17:45 cpu7 -rwxrwxr-x 1 root root 4096 Nov 19 09:54 sched_mc_power_savings -rwxrwxr-x 1 root root 4096 Nov 19 09:54 sched_smt_power_savings |
По аналогии с настройкой sched_mc_power_savings, в файл
sched_smt_power_savings можно вписать значение 0 или 1; значение по умолчанию — 0. При значении 1 планировщик старается распределить процессы так, чтобы загружено было по возможности только несколько гиперпотоков в ядре, чтобы другие оставались свободны и в свою очередь экономили энергию с помощью режимов ожидания C.
В третьей части мы обсудим воздействие каждого из регуляторов на различные режимы рабочей нагрузки на примере двух популярных схем рабочей нагрузки.
Научиться
- Оригинал статьи
Reduce Linux power consumption, Part 2: General and governor-specific settings (EN).
- Дополнительные материалы по вопросу энергопотребления:(EN)
- "How to make use of Dynamic Frequency Scaling": учебное пособие
- "Enhanced Intel SpeedStep Technology and Demand-Based Switching on Linux": учебное пособие
- "Making power policy just work": планировщики потребления энергии
- "CPU frequency scaling in Linux": статья
- "Linux CPUfreq Governors": документация по функциям масштабирования частоты процессора и напряжения в ядре Linux
- "Power Management Guide": из документации дистрибутива Gentoo (внимание! Инструкции для ноутбуков, применяйте на серверах только в том случае, если вы точно знаете, что делаете)
- "How to use CPU frequency scaling (cpufreq)": учебное пособие
- CPU Frequency Scaling: статья из slackwiki
- "Scheduler tunables for multi-socket systems": учебное пособие
- Информация по подсистеме CPUfreq с сайта kernel.org
- Демоны, которые совместно с регулятором userspace настраивают частоту процессора:
- cpudyn: "CPU dynamic frequency control", "динамическое управление". Этот демон изменяет частоту в соответствии с загрузкой процессора; также есть возможность переводить диски в режим ожидания.
- cpufreqd: демон, который можно настроить на реагирование на уровень заряда батареи, режим питания, температуру, запущенные программы, уровень загрузки процессора и т.д.
- cpuspeed: демон, изменяющий частоту в соответствии с запросами процессора, изменения режима питания, температуры etc.
- powernowd: демон, изменяющий частоту в соответствии с уровнем загрузки процессора; имеет четыре режима поведения.
- Список аппаратного оборудования, поддерживающего подсистему CPUfreq
- "Kernel Rebuild
Guide": руководство в помощь по пересборке и перезагрузке ядра за авторством Кван Лоу (Kwan Lowe)
- Технические мероприятия и Web-трансляции developerWorks: будьте в курсе новостей. (EN)
Получить продукты и технологии
-
Скачайте версию cpuspeed с сайта carlthompson.net
.
-
Используйте в вашем следующем проекте разработки для Linux
ознакомительные версии ПО IBM, которые можно скачать непосредственно с developerWorks. (EN)
Обсудить
- Примите участие в обсуждении материала на форуме.
-
Вступайте в
сообщество My developerWorks; персональный профиль и индивидуальная домашняя страничка позволяют настроить developerWorks в соответствии с вашими интересами и общаться с другими пользователями developerWorks.(EN)
