(Вы можете скачать PDF-версию этой статьи во вложении.)
Содержание
Предисловие. Что, почему и откуда? 1
Глава 1: Введение. 2
Глава 2: P-состояния, Снижение энергопотребления без ущерба для производительности. 3
Глава 3: С-состояния ядер. Подробности. 5
Глава 4: Пакетные C-состояния. Подробности. 8
Глава 5: Интуитивное описание состояний электропитания с помощью человечков и лампочек. 12
Заключение. 15
Приложение: C-Состояния, P-Состояния, а где же T-Состояния?. 16
Справочные материалы. 18
Примечания. 18
В этой статье объединена серия публикаций, посвященных состояниям управления электропитанием. Эта серия входит в еще более крупный набор блогов по самым разным темам, связанным с управлением электропитанием, включая состояния управления электропитанием (эта серия), состояния электропитания в режимах «Турбо» и в режиме hyper-threading, настройку и политики управления электропитанием. Содержание этих публикаций будет полезно для всех, хотя здесь описывается только сопроцессор Intel® Xeon Phi™. Исключение составляет лишь серия по настройке, которая по своей природе в большей степени зависит от платформы; она посвящена сопроцессору Intel® Xeon Phi™ и набору программ Intel® Manycore Platform Software Stack (MPSS). В дополнение к этому набору блогов по управлению электропитанием обратите внимание на еще две вспомогательных подборки: серию по измерению производительности[i], и еще один набор более ранних публикаций на различные темы, например о том, откуда берется C*V2*f.
Статья, которую вы сейчас читаете, была изначально опубликована в следующей серии из весьма непоследовательно названных блогов:
Кроме того, есть еще одна статья в приложении:
На портале Intel® Developer Zone вы найдете отдельные блоги, перечисленные в еще одной статье: Список полезных статей, блогов и ссылок по электропитанию и управлению электропитанием.
Итак, устраивайтесь поудобнее и постарайтесь получить удовольствие от ознакомления с захватывающей темой управления электропитанием.
Какие именно состояния электропитания существуют для сопроцессора Intel Xeon Phi? Что происходит в каждом из этих состояний? Было бы интересно знать. Если вы интересуетесь высокопроизводительными вычислениями, то и вам эти знания пригодятся.
Но это не будет глубокий, исчерпывающее подробный и крайне технический научный труд, посвященный управлению электропитанием. Если вам нужен именно такой материал, предлагаю прочесть руководство разработчиков программного обеспечения (SDG) по сопроцессору Intel Xeon Phi[ii].Но предупреждаю: когда в разделе руководства разработчиков, посвященном управлению электропитанием, заходит речь о создателях программного обеспечения (т. е. о программистах), явно или неявно, подразумеваемся не мы с вами. Целевая аудитория этого руководства — разработчики операционных систем и драйверов. Кстати, в прошлой жизни я был одним из таких разработчиков. Одна из целей этой серии блогов — рассмотрение управления электропитанием с точки зрения разработчика приложений, т. е. меня или вас, а не с точки зрения создателя операционных систем или драйверов.
Кроме того, я не стану рассказывать о том, что такое С-, Р- и РС-состояния. Если вам требуется ознакомиться с этими понятиями перед чтением нашей серии блоков, рекомендую (без ложной скромности) мою прежнюю серию блогов, посвященную именно этой теме. См. http://software.intel.com/en-us/user/266847/track. Непросто выделить нужные публикации по управлению электропитанием из всех прочих моих публикаций в форумах и видеороликов, поэтому я перечислил наиболее важные публикации в примечании[iii].
Если кратко, бывают Р-состояния пакета, С-состояния ядер (иногда их называют СС-состояния) и С-состояния пакета (РС-состояния). Также сопроцессор может работать в режиме "Turbo"3. Р-состояний ядер не бывает.
Хост и сопроцессор совместно отвечают за управление электропитанием сопроцессора. В некоторых операциях по управлению электропитанием сопроцессор действует автономно. В других случаях хост принимает ответственность на себя и сам управляет электропитанием, а иногда даже переопределяет действия сопроцессора.
В дальнейшей серии я расскажу о пакетных Р-состояниях (включая режим "Turbo"[iv]), C-состояниях ядер и пакетных РС-состояниях. Я также расскажу о том, как вы, будучи разработчиком приложений, можете управлять электропитанием сопроцессора..
И еще одно замечание. Я не гарантирую, что все выпуски сопроцессоров Intel Xeon Phi (т. е. типы сопроцессоров) поддерживают все эти функции управления электропитанием.
С самого начала могу заявить, что Р-состояния не повлияют на производительность приложения. Тем не менее они важны для приложения по другим соображениям. Поскольку большинство читателей этого блога ничего не принимают на веру, относятся ко всей воспринимаемой информации критически и скептически (будучи инженерами и учеными), я подкреплю это мое заявление доказательствами.
Р-состояния представляют собой пары значений напряжения и частоты, определяющие скорость работы сопроцессора и потребляемую им мощность. Чем ниже рабочее напряжение процессора, тем меньше электроэнергии он потребляет. (В одной из более ранних публикаций я пояснял это на очень высоком техническом уровне.) Поскольку вместе с напряжением снижается и частота, при этом уменьшается скорость вычислений. Так и вижу, как у вас зреет вопрос: «Да разве могут возникнуть ситуации в приложениях для высокопроизводительных вычислений, когда мне потребуется включить Р-состояния и снизить производительность приложения?» Применение Р-состояний менее важно в области высокопроизводительных вычислений, чем в средах с менее интенсивной нагрузкой, таких как клиентские компьютеры и серверы данных. Но даже в среде сопроцессоров и высокопроизводительных вычислений длительные состояния бездействия довольно часто возникают в промежутках между крупными вычислительными задачами. Например, если вы используете модель разгрузки, сопроцессор с высокой вероятностью не будет использоваться в периодах между разгрузками. Кроме того, нативное приложение, выполняющееся на сопроцессоре, зачастую будет по разным причинам находиться в состоянии бездействия, например ожидать следующей порции данных для обработки.
Программа управления электропитанием сопроцессора поддерживает Р-состояния от Р0 до Pn. Количество Р-состояний, поддерживаемых каждым выпуском (типом) сопроцессора, может различаться, но всегда составляет не менее двух. Кроме того, некоторые типы поддерживают Р-состояния «Турбо». Программа управления электропитанием сопроцессора обрабатывает переходы из одного Р-состояния в другое. Программа управления электропитанием хоста в этом практически не участвует.
Возникает закономерный вопрос: как это все повлияет на производительность? Мы же все-таки работаем в среде высокопроизводительных вычислений. Ответ прост: никакого практического влияния на производительность вычислений нет. Не сомневаюсь, что сейчас у вас возникло уже несколько вопросов:
(a) “Минутку! Как это возможно? Если сопроцессор снижает скорость работы процессора, уменьшая его частоту, как это может не повлиять на производительность моего приложения?”
(b) “Мне просто нужно, чтобы приложение работало как можно быстрее. Зачем вообще мне заботиться о сокращении потребления электроэнергии?”
Сначала рассмотрим вариант Б. Я понимаю, что электропитание не является наиболее приоритетным вопросом для вас, как для разработчика приложений. Но все равно оно косвенно влияет на производительность приложения. Повышенное потребление электроэнергии связано с такими вещами, как более высокие затраты на помещение, повышенный расход электричества на охлаждение и кондиционирование воздуха, необходимость большей площади помещения и т. п. Просто об этом должны заботиться не мы (программисты), а наши коллеги — администраторы, системные архитекторы, управляющие помещениями и так далее.
Говоря по правде, вам тоже следует думать об этом. Это влияет на ваше приложение с весьма важной стороны, хоть это и не всегда очевидно. Если в вычислительном центре удастся снизить расход электроэнергии без потери производительности, это означает, что в этом же пространстве можно установить больше процессоров, не превышая при этом отведенную норму электропитания. То есть, образно говоря, вы «получаете больше за те же деньги». А это очень хорошо для вас как для программиста или ученого. Снижение требуемой потребляемой мощности означает, что в меньшем пространстве можно разместить больше процессоров. Это, в свою очередь, означает, что вы как разработчик приложений или ученый можете заниматься не только более масштабными задачами (в системе больше ядер), но и обрабатывать эти задачи быстрее (ниже задержки передачи данных между ядрами).
Вернемся к Р-состояниям. Р-состояния теоретически повлияют на производительность, но не так, чтобы это сказалось на работе высокопроизводительных приложений. Как это возможно? Дело в переходах между Р-состояниями. Также следует помнить об использовании процессора. Программное обеспечение управления электропитанием периодически отслеживает использование процессора. Если использование ниже определенного порога, Р-состояние увеличивается, то есть процессор переходит в следующее состояние энергоэффективности. Ключевое слово в предыдущем предложении — «использование». Как вы думаете, каково будет использование процессора при выполнении ресурсоемкой задачи, связанной с высокопроизводительными вычислениями? В идеале оно должно быть как можно ближе к 100 %. А в каком Р-состоянии будет выполняться ваше приложение при таком использовании процессора? Это Р0, самое быстрое Р-состояние (если не считать режим «Турбо»). Следовательно, Р-состояния с самым высоким уровнем экономии электричества не повлияют на ваше приложения: ситуация, в которой процессор, поддерживающий ваше хорошо настроенное высокопроизводительное приложение, мог бы войти в одной из таких состояний, просто не возникнет.
Итак, все высокопроизводительные части приложения всегда будут использовать процессоры почти на 100 %. Использование, близкое к 100 %, практически всегда гарантирует самое быстрое Р-состояние, то есть Р0. Следовательно, Р-состояния не влияют на производительность приложений.
Как заставить мое приложение работать в одном из этих режимов «Турбо»? Этого делать нельзя, потому что это слишком опасно. Очень легко сделать незначительную ошибку, которая повлечет перегрев и повреждение сопроцессора. Если процессор поддерживает «Турбо», предоставьте управление этим режимом операционной системе.
БАЗОВЫЕ СВЕДЕНИЯ: КРАТКО О СОСТОЯНИЯХ БЕЗДЕЙСТВИЯ
Вот краткое описание С-состояний. С-состояния — это состояния экономии электроэнергии при бездействии (в отличие от Р-состояний, представляющих собой состояния экономии электроэнергии при работе). В Р-состоянии процессор продолжает выполнять инструкции, а в С-состоянии (кроме состояния С0) процессор бездействует, никакие инструкции не выполняются. Можно привести такую аналогию: бездействующий процессор подобен дому, в котором горит весь свет, но никого нет. Потребление всей этой электроэнергии не служит никаким полезным целям, разве что приносит некоторую прибыль электрической компании. Как лучше поступить? Если дома никого нет, то есть дом бездействует, зачем же оставлять свет включенным? То же самое применимо и к процессору. Если им никто не пользуется, зачем подавать питание на неиспользуемые элементы и расходовать электричество? Можно отключить их и сэкономить.
С0 является «нулевым» состоянием электропитания: в этом состоянии ядро фактически работает, не бездействует.
РАЗНИЦА МЕЖДУ СОСТОЯНИЯМИ БЕЗДЕЙСТВИЯ ЯДЕР И ПАКЕТА
Сопроцессор содержит до 60 (или даже больше) ядер в одном пакете. Состояния бездействия ядер (C-состояния) действуют для каждого ядра: одно из этих 60 ядер может быть в состоянии C0, т. е. ядро работает и не бездействует, тогда как соседнее ядро может находиться в состоянии глубокой экономии электроэнергии C6. PC-состояния — это состояния бездействия всего пакета, то есть состояния экономии электроэнергии для всех 60 ядер и поддерживающих электронных компонентов на кристалле. Как можно догадаться, чтобы перевести пакет в состояние PC-6, все ядра должны находиться в состоянии С6. Почему? Поскольку пакет обладает функциональностью, поддерживающей все ядра, «отключение» определенных электронных компонентов пакета влияет на все ядра.
![]()
|
Рисунок 1. Перевод ядра в состояние С1 |
КАКИЕ СУЩЕСТВУЮТ СОСТОЯНИЯ БЕЗДЕЙСТВИЯ ЯДЕР?
У каждого ядра может быть два состояния бездействия, С1 и С6 (не считая С0).
Переход от С0 к С1. Посмотрите на рис. 1 Состояние С1 наступает, когда все 4 аппаратных потока, поддерживаемых ядром, выполняют инструкцию HALT. Давайте посмотрим на каждый аппаратный поток с точки зрения операционной системы: 4 аппаратных потока рассматриваются как 4 отдельных ЦП (от ЦП 0 до ЦП 3). Этап 1. Первые три ЦП, принадлежащие данному ядру, выполняют инструкцию HALT. Этап 2. Последний ЦП (ЦП 0) пытается выполнить инструкцию HALT. Этап 3. Он прерывается для процедуры сбора данных резидентности бездействия. Эта процедура, как вы догадались, собирает данные резидентности бездействия и сохраняет их в структуре данных, доступной для ОС. Затем ЦП 0 выполняет инструкцию HALT. Этап 4. На этом этапе все ЦП останавливаются, а ядро переходит в состояние C1. В состоянии ядра C1 (и его ЦП) снижается его тактовая частота[v].
![]()
|
Рисунок 2. Следует ли переходить в С6: достаточно ли далеко следующее прерывание? |
![]()
|
Рисунок 3. Следует ли переходить в С6: достаточно ли велико предполагаемое время бездействия? |
После входа ядра в состояние C1 на сцену выходит программа управления электропитанием сопроцессора. Ей нужно определить, целесообразно ли дальнейшее отключение ядра и перевод его в состояние С6. В состоянии ядра C6 остальные части ядра отключаются, их потребляемая мощность ограничивается. Помните, что программа управления электропитанием сопроцессора выполняется на ядре ОС (обычно это ядро 0), поэтому отключения других ядер на него не влияют.
Решения какого типа должна принимать программа управления электропитанием сопроцессора? Существует два основных решения, описанных в предыдущей главе. Вопрос 1. Будет ли (возможно) достигнута экономия электроэнергии? Вопрос 2. Сможет ли задержка, требуемая для перезапуска, отрицательно повлиять на производительность процессора или применений, выполняемых на этом процессоре? Эти решения соответствуют двум основным сценариям и показаны на рисунках 2 и 3. В сценарии 1 программа управления электропитанием сопроцессора определяет, насколько далеко следующее запланированное или предполагаемое прерывание. Если прерывание должно произойти достаточно скоро, не имеет смысла отключать ядро, поскольку увеличивается длительность задержки, необходимой для возврата ядра в состояние С0. Как и в жизни, процессор ничего не получает бесплатно. За переход в более глубокое С-состояние процессор расплачивается повышением задержек, связанных с возвратом ядра/пакета в рабочее состояние. В сценарии 2 программа управления электропитанием сопроцессора изучает историю деятельности ядра (то есть его аппаратных потоков) и определяет по чередованию периодов работы (состояние С0) и бездействия (С1), даст ли какую-либо экономию переход в состояние С6.
При ответе «да» на оба этих вопроса ядро переходит в состояние С6.
После входа в состояние ядра C6 процессор принимает решение о том, может ли он перейти в одно из состояний бездействия пакета. Этому вопросу будет посвящена следующая публикация в моем блоге.
ЗАМЕЧАНИЕ О ТЕРМИНОЛОГИИ.
Если вы прочтете SDG (руководство разработчика программного обеспечения по сопроцессорам Intel Xeon Phi), то вы обнаружите там множество не всегда понятных названий и сокращений. Вот как это все расшифровывается:
Пакетный Auto C3[vi] - также называется Auto-C3, AutoC3, PC3, C3, Auto-PC3 и Package C3.
Пакетный Deep-C3 - также называется PC3, DeepC3, DeeperC3, Deep PC3 и Package C3 (я не повторяюсь, это вам показалось).
Пакетный C6 - также называется PC6, C6 и Package C6.
БАЗОВЫЕ СВЕДЕНИЯ: ЧТО ТАКОЕ «ВНЕЯДЕРНЫЕ КОМПОНЕНТЫ»?
Перед более подробным рассмотрением С-состояний пакета сначала несколько слов о компонентах современных процессоров Intel®. Всю электронную «начинку» процессора очень удобно разделить на две части: то, что образует ядра (конвейер, вычислительные блоки, регистры, кеш и т. д.) и все остальное (вспомогательные элементы). Оказывается, что это «все остальное» можно снова разделить на вспомогательные элементы, не связанные напрямую с производительностью (например, интерфейс с PCI Express), и на элементы, связанные с производительностью (например, шины, соединяющие ядра). В Intel для вот этих вспомогательных элементов, напрямую влияющих на производительность оптимизированных приложений, придумали обозначение «внеядерные компоненты».
![]() |
Рисунок 4. Типы электронных компонентов сопроцессора |
Вернемся к нашим С-состояниям.
ЗАЧЕМ НУЖНЫ C-СОСТОЯНИЯ ПАКЕТА?
Помимо ограничения тактов каждого ядра, какие еще методики можно использовать для дополнительной экономии электроэнергии? Вот простейший и даже банальный пример того, что можно сделать: отключить питание всего процессора. При этом потребление электроэнергии будет равно нулю, хотя и недостатки такого «выдергивания из розетки» также очевидны. Лучше избирательно отключать более глобальные компоненты процессора таким образом, чтобы можно было относительно быстро вернуть процессор в полностью функциональное состояние (С0).
Именно для этого и используются пакетные С-состояния: для последовательного отключения дополнительных компонентов с целью дальнейшей экономии электроэнергии. Поскольку мы уже отключили все компоненты пакета, связанные с ядрами, оставшиеся компоненты являются общими и необходимыми для всех ядер, поэтому их совокупность мы и называем пакетом.
КАКИЕ СУЩЕСТВУЮТ СОСТОЯНИЯ БЕЗДЕЙСТВИЯ ПАКЕТА?
Уважаемые читатели, существуют три пакетных С-состояния: Auto-C3, Deep-C3 и (пакетный) C6. Напоминаю, что это все пакетные С-состояния, то есть все аппаратные потоки/ЦП во всех ядрах находятся в состоянии HALT. Я догадываюсь, о чем вы думаете: «Если все ядра сопроцессора находятся в состоянии HALT, как может работать программное обеспечение управления электропитанием?» Хороший вопрос. Но ответ, если подумать, вполне очевиден. Если программное обеспечение управления электропитанием не может выполняться на сопроцессоре, то где может? Разумеется, на хосте.
![]() |
Рисунок 5. Области ответственности сопроцессора и хоста при управлении электропитанием |
За управление электропитанием сопроцессора Intel® Xeon Phi™ отвечают два компонента: программа управления электропитанием, выполняющаяся на сопроцессоре и компонент управления электропитанием драйвера сопроцессора MPSS, выполняющийся на хосте. См. рис. 1. Сопроцессор управляет переходом в различные С-состояния ядра и выходом из них. Разумеется, когда программа управления электропитанием не может выполняться на сопроцессоре, например при состояниях пакета Deep-C3 или C6, управление берет на себя хост. Управление пакетным состоянием Auto-C3 осуществляет и хост, и сопроцессор.
ЧТО ОТКЛЮЧАЕТСЯ В С-СОСТОЯНИЯХ ПАКЕТА?
Я собирался переделать эту таблицу, но в ней все настолько ясно, что я ее просто скопировал. Это таблица 3-2 из руководства разработчиков программного обеспечения (SDG) по сопроцессору Intel® Xeon Phi™.
Состояние бездействия пакета | Состояние ядра | Состояние внеядерных компонентов | TSC/LAPIC | C3WakeupTimer | Трафик PCI Express* |
PC3 | Сохраняется | Сохраняется | Приостановка | После окончания срока действия пакет выходит из состояния РС3 | Пакет выходит из состояния РС3 |
Deep C3 | Сохраняется | Сохраняется | Приостановка | Не влияет | Истекает время ожидания |
PC6 | Утрачивается | Утрачивается | Сброс | Не влияет | Истекает время ожидания |
Немного подробнее:
Пакетный Auto-C3: ограничение частоты кольца и внеядерных компонентов
Пакетный Deep-C3: снижение напряжения VccP
Пакетный C6: отключение напряжения VccP (т. е. отключение питания ядер, кольца и внеядерных компонентов)
TSC и LAPIC — это тактовые генераторы, которые останавливаются при отключении внеядерных компонентов. Их следует правильным образом задать при повторной активации пакета. PC3 — это то же самое, что состояние пакета Auto-C3.
КАК ОПРЕДЕЛЯЮТСЯ ПЕРЕХОДЫ С-СОСТОЯНИЙ БЕЗДЕЙСТВИЯ ПАКЕТА?
В Auto-C3 пакета: первое состояние пакета, Auto-C3, можно рассматривать как промежуточное. Программа управления электропитанием сопроцессора может инициировать переход в это состояние. Программа управления электропитанием MPSS может переопределить этот запрос при определенных условиях, например если хост «знает», что внеядерная часть сопроцессора по-прежнему работает.
Мы также увидим, что состояние пакета Auto-C3 — единственное, которое может быть инициировано программой управления электропитанием сопроцессора. Поначалу это кажется немного несправедливым, но, если вдуматься, причина очевидна. В начале перехода в состояние пакета Auto-C3 процедура управления электропитанием сопроцессора запущена и может инициировать переход в первое состояние пакета. (Чтобы быть совсем точным, ядро, на котором выполняется программа управления электропитанием, может быстро перейти в состояние С0.)
Ниже состояния Auto-C3 сопроцессор не выполняет код. Переход в более глубокие С-состояния контролируется программой управления электропитанием хоста. Причина не только в том, что к этому моменту собственная программа управления электропитанием сопроцессора уже приостановлена, но и в том, что хост располагает более глобальной информацией о происходящем, например данными о работе внеядерных компонентов после ограничения работы всех ядер, и о трафике в шине PCI Express.
В пакетном Deep-C3 программа управления электропитанием хоста анализирует историю резидентности бездействия, прерывания (например, трафик PCI* Express) и временные затраты на пробуждение сопроцессора из состояния пакета Deep-C3, чтобы принять решение о том, следует ли переводить процессор из состояния пакета Auto-C3 в состояние пакета Deep-C3.
В пакетномC6 так же, как и в пакетном Deep-C3, но глубже.
ИНТУИТИВНАЯ ИЛЛЮСТРАЦИЯ ЯДРА И ЕГО АППАРАТНЫХ ПОТОКОВ
Это четвертая публикация в серии записей об управлении электропитанием для сопроцессоров Xeon Phi.
Для тех из вас, кто прочел мой блог с интуитивным введением в сопроцессор Intel Xeon Phi, Сопроцессор Intel Xeon Phi: что это такое и какое мне до этого дело? Часть 3. Если отвлечься от избитой аналогии с зайцам и черепахами,я как-то упомянул «опытных программистов, старательно работающих на своих корпоративных работодателей». Давайте немного расширим эту концепцию. На рис. 6 у нас есть один опытный программист. Он символизирует один аппаратный поток сопроцессора ЦП.
![http://software.intel.com/sites/default/files/powerBlog_states_pt3_FigA_high_tech_worker_3.png]()
|
Рисунок 6. Опытный программист, то есть аппаратный поток Intel® Xeon Phi™ |
В ядре — 4 аппаратных потока. Посмотрите на рисунок 7. Все настолько очевидно, что я не стану утруждать себя написанием, а вас — чтением многостраничного пояснения. Также изображена и лампочка. Лампочка представляет инфраструктуру, поддерживающую ядро, такую как тактовые контуры и цепи питания.
![http://software.intel.com/sites/default/files/powerBlog_states_pt3_FigB_high_tech_workers_0.png]()
|
Рисунок 7. Опытные программисты в комнате, т. е. ядро сопроцессора Intel® Xeon Phi™ |
УПРАВЛЕНИЕ ЭЛЕКТРОПИТАНИЕМ: ЯДРА C0 И C1
Какое отношение все это имеет к управлению электропитанием? Иногда отдельные либеральные студенты гуманитарных направлений заявляют, что инженеры лишены воображения и вообще зануды. Но мы-то с вами знаем, что даже если некоторое занудство нам порой не чуждо, то в отсутствии воображения нас обвинить нельзя. Помня об этом, представьте себе, что на каждом из этих столов стоят компьютеры и настольные лампы.
Ядро в режиме C0: кода хотя бы один опытный программист напряженно работает (т. е. хотя бы один аппаратный поток ядра ЦП выполняет инструкции)
ЦП выполняет инструкцию HALT: когда один из наших опытных программистов заканчивает работу, он выключает свою настольную лампу, выключает компьютер и уходит (т. е. один из аппаратных потоков выполняет инструкцию HALT).
После входа в состояние ядра C1: когда все четыре опытных программиста заканчивают работу, они все выполняют инструкции HALT. Последний из них гасит за собой свет в помещении. (Т. е. снижение тактовой частоты ядра.)
УПРАВЛЕНИЕ ЭЛЕКТРОПИТАНИЕМ: СОСТОЯНИЕ ЯДРА C6
После входа в состояние ядра C6: да, я понимаю, что это очевидно, но мне нравится разговаривать с самим собой. С течением времени все уходят на обед. Поскольку в офисе никого нет, можно отключить еще больше электроприборов (т. е. снижение потребляемой мощности). Впрочем, помните, что работники вернутся после обеда, поэтому нужно иметь возможность быстро включить все выключенное.
![http://software.intel.com/sites/default/files/powerBlog_states_pt3_FigC_building_of_high_tech_workers_1.png]()
|
Рисунок 8. Здание, полное опытных программистов, т. е. сопроцессор Intel® Xeon Phi™ |
УПРАВЛЕНИЕ ЭЛЕКТРОПИТАНИЕМ: СОСТОЯНИЯ ПАКЕТА AUTO-C3, DEEP-C3 И C6
Да, эта аналогия могла вам уже поднадоесть, но мне она нравится, так что продолжаем.
Давайте пройдем немного дальше. Представьте здание, в котором очень много комнат, больше 60. Посмотрите на рисунок 8. Да, я знаю, что у нас в Кремниевой долине опытные программисты работают в великолепных и просторных комнатах, а не в тесных общих офисах. К сожалению, на этом моя аналогия останавливается, потому что мне нужен именно обычный офис.
Вход в состояние пакета Auto-C3: все ушли с этажа, поэтому датчик движения автоматически выключает освещение на этаже. (Т. е. программное обеспечение управления сопроцессором снижает рабочую частоту внеядерных компонентов и прочих вспомогательных элементов кристалла.
Вход в состояние пакета Deep-C3: сейчас выходные, поэтому во всем здании (т. е. в модуле управления электропитанием драйвера сопроцессора MPSS) отключено кондиционирование воздуха и выключена телефонная связь. (Т. е. хост снижает напряжение VccP сопроцессора и заставляет его игнорировать прерывания)
Вход в состояние пакета C6: новогодние каникулы: офис закрыт, все сотрудники добровольно или вынужденно отдыхают, поэтому техническая служба офиса отключила электричество, кондиционирование воздуха, телефоны, серверы, лифты, туалеты и пр. (т. е. хост выключил питание сопроцессора и отключил отслеживание трафика PCI Express*).
УПРАВЛЕНИЕ ЭЛЕКТРОПИТАНИЕМ: ЧЕМ ДАЛЬШЕ, ТЕМ ЧУДЕСНЕЕ
Увлекшись этой нашей аналогией, я решил было расширить ее до комплексов офисных зданий (узел, содержащий несколько сопроцессоров), международных инженерных дивизионов (кластеры, в которых каждый узел содержит несколько сопроцессоров) и до привлечения внешних партнеров (распределенная обработка в глобальной сети). Впрочем, здравый смысл победил, поэтому я отказался от этого замысла.
Мы обсудили различные типы состояний управления электропитанием. Это достаточно широкая проблема, но мы сосредоточились на определенной платформе — сопроцессоре Intel® Xeon Phi™. Большинство современных процессоров, будь то процессоры корпорации Intel, корпорации AMD* или встроенные решения, обладают такими состояниями в той или иной разновидности.
Процессоры Intel® поддерживают два типа состояний управления электропитанием: P-состояния (работа) и C-состояния (бездействие). С-состояния, в свою очередь, делятся еще на две категории: состояния ядер и состояния пакета. Р-состояния — это состояния работы (С0) процессора; снижение потребляемой мощности в этих состояниях достигается путем снижения напряжения и частоты процессора. С-состояния — это состояния бездействия; они отключают части процессора, когда ядра простаивают. Существует два типа С-состояний. C-состояния ядер отключают части отдельных ядер/ЦП. Поскольку современные процессоры содержат несколько ядер, С-состояния пакетов отключают электронные элементы, поддерживающие все эти ядра.
Чистый эффект этих состояний заключается в значительном снижении энергопотребления современных процессоров Intel®. Такая экономия электроэнергии может быть весьма значительной, в некоторых случаях потребление электроэнергии снижается на порядок.
Важность экономии потребляемой мощности невозможно переоценить для любых систем, от смартфонов до высокопроизводительных кластеров. Например, снижение потребляемой мощности и энергопотребления отдельных процессоров в кластере для высокопроизводительных вычислений дает возможность установить в этой системе больше процессоров. При этом повышается плотность процессоров, ускоряется обмен информацией между узлами, становится возможным создать гораздо более мощную систему, способную решать более крупные и сложные задачи. На противоположном краю — портативные устройства с пассивным охлаждением, такие как смартфоны и планшеты. В них снижение потребляемой мощности позволяет дольше работать от аккумулятора без подзарядки и исключает проблемы, связанные с охлаждением. Это позволяет устанавливать в такие устройства более мощные процессоры, что, в свою очередь, расширяет возможности этих устройств.
Несколько дней назад мне встретился интересный вопрос: «Важно ли понимать Т-состояния?» Сначала я удивился: «Что еще за Т-состояния?»
Впрочем, изучив материал, я обнаружил, что так называемое Т-состояние действительно существует, но уже не используется, по крайней мере в серийных процессорах Intel® его нет.
Поэтому повторяю: Т-состояния нам безразличны!
На этом более практичные читатели могут перейти к более актуальным темам, а я расскажу немного из истории управления электропитанием.
Когда-то раньше существовали Т-состояния — это были состояния регулировки. Задолго до появления С- и Р-состояний Т-состояния были придуманы, чтобы защитить процессоры от повреждений при авариях, например если при работе процессора на полной мощности отказывал охлаждающий вентилятор. Если простейший правильно расположенный термодатчик определял, что температура достигала уровня, на котором возможны повреждения пакета или его содержимого, аппаратный диспетчер питания переводил процессор в различные Т-состояния в зависимости от температуры: чем выше температура, тем выше Т-состояние.
AКак вы, возможно, догадались, обычный режим работы процессора назывался состоянием Т0. При переходе процессора в более высокое Т-состояние диспетчер ограничивал такты ядер, чтобы замедлить выполнение инструкций и дать процессору возможность «отдохнуть» и остыть. Например, в состоянии Т1 аппаратный диспетчер питания мог ограничить 12 % тактов. Грубо говоря, это означает, что ядро будет работать в течение 78 % времени и «спать» в остальное время. В режиме Т2 такты могли быть ограничены на 25 %. В самых высоких Т-состояниях ограничение тактов могло достигать 90 %. (См. рисунок ниже.)
![]()
Рисунок 9. Время выполнения в состояниях Т0/Р0, Р1 и Т1
Обратите внимание, что, в отличие от Р-состояний, не меняется напряжение и частота. Кроме того, в Т-состояниях приложение работает медленнее не потому, что процессор работает медленнее, а потому что процессор периодически приостанавливает работу. С определенной точки зрения можно считать Т-состояние состоянием С-1 с ограничением тактов, где процессор не бездействует, а по-прежнему выполняет полезную работу.
На приведенном выше рисунке в верхней части показано выполнение ресурсоемкой нагрузки при отсутствии перегрева. Внизу показана ситуация с Т-состояниями (т. е. до Р-состояний), когда процессор начинает переключаться между состоянием работы и состоянием бездействия, чтобы остыть. В середине показано, что происходит на современных процессорах, где остывание процессора достигается плавным снижением частоты и напряжения.
Тем из вас, кто не обиделись на меня за небольшой исторический экскурс, я предлагаю еще несколько вполне практических причин, в силу которых следует хотя бы просто знать о существовании Т-состояний как таковых.
(1) (1) В некоторой современной технической литературе термин «состояния регулировки» относится к Р-состояниям, а не к Т-состояниям.
(2) (2) Некоторые структуры данных управления электропитанием, в том числе и определяемые стандартом ACPI, по-прежнему содержат неиспользуемое поле Т-состояния. Многие вопросы о Т-состояниях проистекают именно из этого.
(3) (3) Подозреваю, что Т-состояния могут все еще использоваться в некоторых встроенных процессорах
Kidd, Taylor (10/23/13) - “Тэйлор Кидд (23 октября 2013 г.) - «Список полезных статей, блогов и ссылок по электропитанию и управлению электропитанием»,” http://software.intel.com/en-us/articles/list-of-useful-power-and-power-management-articles-blogs-and-references, загружено 24 марта 2014 г.
Интересующиеся управлением электропитанием могут ознакомиться с руководством разработчиков программного обеспечения по сопроцессору Intel Xeon Phi. Там есть схемы состояний и другие интересные вещи. Рекомендую раздел 2.1.13 «Управление электропитанием» и всю главу 3.1 «Управление электропитанием (PM)»: очень полезно почитать, если у вас бессонница.
ПРИМЕЧАНИЕ: Как и во всех прошлых моих публикациях, всю полноту ответственности за предоставленные иллюстрации несу лично я ввиду ненарушения авторских прав и отсутствия художественных способностей.
[i]Я собираюсь опубликовать это в мае — июне 2014 г.
[iv]Краткое напоминание: режим «Турбо» — это набор «разогнанных» Р-состояний, выходящих за обычные ограничения кристалла по электропитанию. При длительной работе в таком состоянии кристалл может перегреться, тогда процессор сгорит. Режим «Турбо» возможен, потому что штатные ограничения по электропитанию вычисляются для случаев, когда каждое ядро работает с максимальной производительностью. Существует немало ситуаций, когда вся доступная мощность не используется. В таких случаях программа управления электропитанием может разрешить временный «разгон».
[v]Центральные процессоры обладают по крайней мере одним тактовым генератором, формирующим тактовые импульсы. Электронные элементы процессора используют эти тактовые импульсы для координации всех действий.
[vi]Состояние Auto-PC3 могло быть упразднено начиная с MPSS 3.1. Но даже и в этом случае все равно стоит упомянуть о важности задержек и о различиях между локальным и удаленным управлением.