Содержание


Экономия энергии в Linux

Часть 2. Общая настройка и настройка регуляторов

Что можно настроить и как эти настройки влияют на энергопотребление

Comments

Серия контента:

Этот контент является частью # из серии # статей: Экономия энергии в Linux

Следите за выходом новых статей этой серии.

Этот контент является частью серии:Экономия энергии в Linux

Следите за выходом новых статей этой серии.

Общие настройки CPUfreq

Начать использовать подсистему CPUfreq в Linux несложно. Давайте подробнее рассмотрим её настройки и некоторые функции интерфейса. Начнём с некоторых общих настроек, а именно:

  • Интерфейс /sys
  • Файл настроек cpuspeed
  • Утилиты cpufreq-utils

Использование интерфейса /sys

Файловая система /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/
[root@systemx cpu]# ls
cpu0 cpu1 cpu2 cpu3 cpu4 cpu5 cpu6 cpu7 sched_mc_power_savings

Внутри каталога каждого процесса находится каталог 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

Теперь мы приступаем к обсуждению настроек для конкретных регуляторов. При задействованном регуляторе userspace в каталоге cpufreq будет присутствовать файл scaling_setspeed , доступный на запись для root. Этот регулятор даёт пользователю или программе в пользовательском пространстве возможность изменять тактовую частоту процессора. С помощью команды echo пользователь может внести нужное значение частоты в этот файл или же представить возможность установить эту частоту какому-нибудь демону в пользовательском пространстве. Как говорилось ранее, во время обсуждения файлов настроек, вносить настройку в файл scaling_setspeed необходимо для каждого из процессоров.

С регулятором userspace взаимодействуют несколько демонов, которые могут настраивать частоту процессора. Вот некоторые из них:

  • cpudyn (CPU dynamic frequency control): этот демон меняет частоту в соответствии с загрузкой процессора, а также, для ещё большей экономии энергии, может переводить диски в режим ожидания (standby) при отсутствии дисковой активности.
  • cpufreqd: это демон можно настроить на реагирование на уровень заряда батареи, тип питания (от сети или от батареи), температуру, запущенные программы, уровень использования процессора и на другие факторы.
  • cpuspeed: этот демон изменяет частоту в соответствии с требованиями процессора, изменением источника питания, температурой и другими данными.
  • powernowd: этот демон регулятора изменяет частоту процессора в соответствии с загрузкой процессора; у него четыре режима поведения, выбираемых пользователем.

Регулятор Ondemand

При задействованном регуляторе 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

При использовании регулятора 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

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

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.

Далее

В третьей части мы обсудим воздействие каждого из регуляторов на различные режимы рабочей нагрузки на примере двух популярных схем рабочей нагрузки.


Ресурсы для скачивания


Похожие темы


Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux
ArticleID=605281
ArticleTitle=Экономия энергии в Linux: Часть 2. Общая настройка и настройка регуляторов
publish-date=12282010