Экономия энергопотребления — это вопрос, который должны учитывать все, кого касаются проблемы эксплуатационных расходов или охраны окружающей среды. В этой статье мы рассмотрим, как, не снижая производительности, можно изменить рабочую частоту процессора с помощью подсистемы CPUfreq в Linux и регуляторов в составе ядра. Однако настройки энергопотребления ограничены возможностями конкретного аппаратного обеспечения (подробно этот вопрос рассматривается во второй части этой серии статей).
С выходом ядра версии 2.6.0 появилась возможность динамического масштабирования частоты процессора с помощью подсистемы CPUfreq. Работая на более низких тактовых частотах, процессор потребляет пропорционально меньше энергии и выделяет меньше тепла. Такое динамическое масштабирование представляет позволяет в определённых пределах регулировать производительность для снижения потребления энергии в режиме неполной загрузки.
Для настройки статической или динамической политики потребления энергии системой в структуре CPUfreq используются регуляторы и демоны. Динамические регуляторы, которые будут обсуждаться далее в этой статье, переключают частоту процессора исходя из основе коэффициента его использования для экономии энергии без ущерба для производительности. Эти регуляторы также дают возможность некоторых индивидуальных пользовательских настроек масштабирования частоты. Кроме того, настройки sched_mc_power_savings и
sched_smt_power_savings позволяют выполнять объединение потоков для снижения энергопотребления.
Перед началом обсуждения CPUfreq рассмотрим режимы C-state и P-state.
Режимы C-state: почти полное бездействие
Режимы C-state, за исключением режима C0 , когда процессор находится в работающем состоянии, — это режимы бездействия, когда процессор перестаёт подавать тактовые импульсы отдельным своим компонентам и отключает их для экономии энергии. Чем выше уровень режима C-state, тем больше компонентов он охватывает (остановка тактирования ядра процессора, прекращение подачи прерываний и т.д.) и тем больше экономия. Во время простоя системы эти режимы помогают сэкономить энергию.
Режим C1E (известный также как расширенный C1, Enhanced C1 или расширенный режим C1, C1 Enhanced Mode) также помогает экономить энергию при бездействии системы. C1E экономит больше энергии, чем традиционный режим C1 (который только останавливает тактовый сигнал), так как дополнительно снижает напряжение и частоту. В действительности C1E позволяет снизить напряжение и частоту быстрее, чем любой из регуляторов CPUfreq.
Не у всех процессоров есть эти возможности, но для того, чтобы использовать режимы C и C1E и получить значительную экономию энергии при простое, необходимо включить опции
CPU C State и C1E
(или им подобные) в BIOS. Некоторые системы поддерживают режимы глубокого сна C3 и даже C6.
Помните, чем выше уровень режима C-state, тем больше экономия энергии.
Режимы P-state: рабочее состояние
Режимы P-state — это рабочие состояния, задающие тактовую частоту и напряжение питания процессора. Чем больше номер режима, тем ниже частота и напряжение питания процессора. Регуляторы CPUfreq используют режимы P-state для изменения тактовой частоты и понижения потребления энергии.
Чтобы использовать в системе режимы P-state и регуляторы CPUfreq, необходимо включить опцию
Processor Performance States (или ей подобную) в BIOS. На рисунке1 – простая диаграмма режимов C-state и P-state.
Рисунок1: режимы C-state и P-state
Обязательные требования для работы CPUfreq
Чтобы использовать подсистему CPUfreq, необходимы условия, описанные в этом разделе. В RHEL 5.2 подсистема CPUfreq включена по умолчанию (как правило, она включена по умолчанию также и в других дистрибутивах). Чтобы быстро это проверить, посмотрите на файловую систему /sys. Если вы увидите каталог cpufreq в пути /sys/devices/system/cpu/cpu*/cpufreq/, то подсистема CPUfreq в вашей системе сейчас включена. Если каталог отсутствует, то для того, чтобы он появился, следуйте инструкциям, данным ниже.
Сначала нужно убедиться, что процессор поддерживает масштабирование частоты. Ниже в разделе Ресурсы приводится ссылка на список аппаратных платформ, поддерживающих подсистему CPUfreq.
Далее посмотрите на конфигурационный файл ядра. Все необходимые настройки, как правило, отмечены по умолчанию в ядре RHEL 5.2, но для того, чтобы получить желаемое состояние при старте системы, некоторые из этих настроек можно изменить. В разделе CPU Frequency scaling конфигурационного файла ядра располагаются следующие опции:
CONFIG_CPU_FREQ
Чтобы использовать масштабирование тактовой частоты, эта опция должна иметь значение y.
CONFIG_CPU_FREQ_GOV_PERFORMANCE, CONFIG_CPU_FREQ_GOV_POWERSAVE,
CONFIG_CPU_FREQ_GOV_USERSPACE, CONFIG_CPU_FREQ_GOV_ONDEMAND,
CONFIG_CPU_FREQ_GOV_CONSERVATIVE
Эти опции относятся к каждому из доступных регуляторов CPUfreq. Чтобы использовать нужный регулятор, установите в конфигурации значение y или
m. При значении
y регулятор будет встроен в ядро, при использовании m модуль ядра нужно будет загружать при каждой загрузке системы с помощью одной из нижеследующих команд:
modprobe cpufreq_performance
modprobe cpufreq_powersave
modprobe cpufreq_userspace
modprobe cpufreq_ondemand
modprobe cpufreq_conservative
Кроме того, в случае использовании m модули можно загружать при старте системы, указав их в файле /etc/rc.local. Также заметьте, что включить по умолчанию регулятор userspace или performance можно, установив для
CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE
или для
CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE значение
y.
Для использования sched_mc_power_savings и
sched_smt_power_savings, которые описаны ниже, опции
CONFIG_SCHED_MC
и CONFIG_SCHED_SMT в разделе
Processor type and features конфигурационного файла ядра также должны иметь значение y.
Чтобы изменения в конфигурации вступили в силу, нужно пересобрать и загрузить ядро. Возможно, вы знаете, как это делается, но если какие-то детали вам неизвестны, обратитесь к любому из многочисленных источников документации по сборке ядра Linux (кое-что приведено в разделе Ресурсы).
В подсистеме CPUfreq доступны для использования пять регуляторов. Они устанавливают тактовую частоту процессора согласно определённым критериям; некоторые из них динамически изменяют частоту при изменении входных данных от системы или пользователя. В этой статье рассматривается дистрибутив RHEL 5.2 на основе ядра 2.6.18, в котором все эти регуляторы доступны. Давайте познакомимся с ними; в частях 2 и 3 серии эти регуляторы описываются более подробно.
Регулятор performance (производительность): самая высокая частота
Регулятор производительности статично настраивает процессор на наивысшую возможную частоту. Диапазон частот, доступных этому регулятору, также можно настроить. Как ясно из его названия, предназначение этого регулятора — получить максимум производительности системы, закрепив тактовую частоту ядра процессора на самом высоком возможном уровне. По умолчанию этот регулятор не предоставляет возможностей экономии энергии, хотя в нем можно изменить частоту, которую он выбираетустанавливает.
Регулятор powersave (энергосбережение): самая низкая частота
Регулятор powersave, в противоположность предыдущему, статически настраивает процессор на самую низкую из доступных частот. В нем также можно настроить диапазон доступных частот. Назначение его – постоянная работа на самой низкой из возможных частот. Очевидно, что в этом случае на производительность влияет тот факт, что система никогда не будет использовать более высокую частоту, независимо от степени занятости процессора(ов).
На практике этот регулятор часто не дает экономии энергии, поскольку самая большая экономия достигается за счет использования режимов C-state. Использование регулятора powersave увеличивает время работы процесса, поскольку он будет использовать наименьшую частоту; в результате система дольше не перейдет в состояние простоя и потому не получит экономию от вхождения в режим C-state.
Регулятор Userspace: ручная настройка частоты пользователем
Далее идёт регулятор userspace, дающий возможность вручную настраивать, выбирать и выставлять частоту. Этот регулятор также работает совместно с демонами частоты процессора, запущенными в пользовательском пространстве для регулирования частоты (мы поговорим про демоны и приведём для них примеры во второй части). Этот регулятор полезен для установки индивидуальной политики энергорегулирования, для которой нет готовых настроек и которая недоступна в других регуляторах. Также этот регулятор можно использовать для экспериментов с политиками.
Заметьте, что сам по себе регулятор userspace не производит динамического изменения частоты; скорее, он даёт возможность пользователю или программе в пользовательском пространстве динамически выбирать частоту процессора.
Регулятор Ondemand: изменение частоты по уровню загрузки процессора
Впервые появившийся в ядре версии 2.6.10 регулятор ondemand стал первым регулятором в составе ядра, предназначенным для динамического изменения частоты процессора в зависимости от загрузки самого процессора. Регулятор ondemand проверяет уровень использования процессора, и если определённый порог превышен, регулятор выставляет наиболее высокую частоту из доступных. В случае, если процент использования ниже порога, регулятор понижает частоту до следующей возможной отметки.
Возможна настройка доступного диапазона частот, отметки, на которой регулятор проверяет использование процессора в системе и порога коэффициента использования.
Регулятор conservative: более плавный вариант ondemand
Регулятор conservative впервые появился в ядре версии 2.6.12, он базируется на регуляторе ondemand. Он тоже динамически настраивает частоты в зависимости от загрузки процессора, однако ведёт себя немного по-другому и даёт возможность увеличивать мощность постепенно. Регулятор conservative проверяет процент использования процессора и в случае, если значение выходит за нижний или верхний порог, постепенно повышает или понижает частоту до следующей возможной, вместо того чтобы сразу установить наивысшую частоту, как это делает регулятор ondemand.
Возможна настройка доступного диапазона частот, отметки, с которой регулятор проверяет использование процессора в системе, пороги коэффициентов использования и размер шага частоты.
Во второй части мы углубимся в настройку и использование подсистемы Linux CPUfreq, рассмотрим некоторые её общие настройки и тонкости использования и различные опции интерфейса. Также будут затронуты настройки, касающиеся регуляторов, и использование планировщиков в нуждах администрирования, чтобы помочь читателю выбрать правильные инструменты для своих задач.
В третьей части на примере двух распространённых схем рабочей нагрузки мы рассмотрим, как работает каждый из регуляторов при разных уровнях рабочей нагрузки.
Научиться
- Оригинал статьи
Reduce Linux power consumption, Part 1: The CPUfreq subsystem (EN).
-
Список аппаратного оборудования, поддерживающего подсистему CPUfreq.(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": статья про планировщики потребления энергии
- The article "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
-
"Kernel Rebuild
Guide": руководство по пересборке и перезагрузке ядра, написанное Кван Лоу (Kwan Lowe) (EN)
-
Технические мероприятия и Web-трансляции developerWorks: будьте в курсе новостей. (EN)
Получить продукты и технологии
-
Используйте в вашем следующем проекте разработки для Linux
ознакомительные версии ПО IBM,
которые можно скачать непосредственно с developerWorks. (EN)
Обсудить
-
Вступайте в
сообщество My developerWorks; персональный профиль и индивидуальная домашняя страничка позволяют настроить developerWorks согласно вашим интересам и общаться с другими пользователями developerWorks.(EN)
