Экономия энергии в Linux : Часть 1. Подсистема CPUfreq

Узнайте обо всех компонентах настройки энергетической отдачи для System x с установленной Linux

Эта серия из трёх статей содержит вводную информацию по снижению энергопотребления в вашей системе. В первой части представлены начальные сведения, касающиеся системных компонентов и принципов тонкой настройки подсистемы CPUfreq в Linux, рассмотрены режимы C-state и P-state, рассказано, какие из пяти регуляторов в составе ядра (in-kernel governors) можно задействовать для повышения энергоэффективности вашей системы без ущерба для производительности.

Дженифер Хоппер, инженер по программному обеспечению, IBM

author photo - Jenifer HopperДженифер Хоппер (Jenifer Hopper) — программист IBM Linux Performance Group в Остине, штат Техас. В настоящее время она занимается проблемами высокопроизводительных вычислений и рабочих нагрузок для измерения энергопотребления, а также системным профилированием и анализаторами данных.



28.12.2010

Об этой серии статей

В этой серии статей рассказывается о том, как настроить сервер IBM System x с установленной Linux для получения наибольшей энергоэффективности. Вы узнаете о регуляторах в составе ядра (in-kernel governors) и применении их настроек; также показано влияние настроенных регуляторов на производительность и рабочую нагрузку в системах электронной торговли. Практические иллюстрации даются для сервера System x с установленным дистрибутивом Red Hat Enterprise Linux версии 5.2 (RHEL 5.2), но они будут верными для любого ядра версии 2.6.x и любого процессора, поддерживающего частотное масштабирование.

В первой части кратко описываются компоненты и принципы, на основе которых делается настройка производительности системы, в том числе: подсистема Linux CPUfreq, режимы C-state и P-state и пять регуляторов в составе ядра (in-kernel governors).

Во второй части приводятся подробности общих настроек подсистемы CPUfreq в Linux, пяти регуляторов —performance, powersave, userspace, ondemand и conservative— и их настроек.

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

Экономия энергопотребления — это вопрос, который должны учитывать все, кого касаются проблемы эксплуатационных расходов или охраны окружающей среды. В этой статье мы рассмотрим, как, не снижая производительности, можно изменить рабочую частоту процессора с помощью подсистемы CPUfreq в Linux и регуляторов в составе ядра. Однако настройки энергопотребления ограничены возможностями конкретного аппаратного обеспечения (подробно этот вопрос рассматривается во второй части этой серии статей).

Подсистема CPUfreq в Linux

С выходом ядра версии 2.6.0 появилась возможность динамического масштабирования частоты процессора с помощью подсистемы CPUfreq. Работая на более низких тактовых частотах, процессор потребляет пропорционально меньше энергии и выделяет меньше тепла. Такое динамическое масштабирование представляет позволяет в определённых пределах регулировать производительность для снижения потребления энергии в режиме неполной загрузки.

Для настройки статической или динамической политики потребления энергии системой в структуре CPUfreq используются регуляторы и демоны. Динамические регуляторы, которые будут обсуждаться далее в этой статье, переключают частоту процессора исходя из основе коэффициента его использования для экономии энергии без ущерба для производительности. Эти регуляторы также дают возможность некоторых индивидуальных пользовательских настроек масштабирования частоты. Кроме того, настройки sched_mc_power_savings и sched_smt_power_savings позволяют выполнять объединение потоков для снижения энергопотребления.


Режимы C-state и P-state

Перед началом обсуждения 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
Режимы 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, рассмотрим некоторые её общие настройки и тонкости использования и различные опции интерфейса. Также будут затронуты настройки, касающиеся регуляторов, и использование планировщиков в нуждах администрирования, чтобы помочь читателю выбрать правильные инструменты для своих задач.

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

Ресурсы

Научиться

Получить продукты и технологии

Обсудить

  • Вступайте в сообщество My developerWorks; персональный профиль и индивидуальная домашняя страничка позволяют настроить developerWorks согласно вашим интересам и общаться с другими пользователями developerWorks.(EN)

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux
ArticleID=605280
ArticleTitle=Экономия энергии в Linux : Часть 1. Подсистема CPUfreq
publish-date=12282010