Enhanced halt state c1e что это
Функции управления производительностью и энергопотреблением процессоров Intel Pentium 4 и Intel Xeon
Не прошло недели с момента публикации предыдущего материала на тему технологий управления энергопотреблением современных процессоров, как в распоряжении нашей тестовой лаборатории оказался процессор Intel Pentium 4, а неделей позже Intel Xeon с новой ревизией ядер Prescott и Nocona, соответственно (степпинг E0, сигнатура CPUID = 0F41h). Первый демонстрировал, на первый взгляд, весьма интересное поведение при нахождении в режиме простоя (о котором пойдет речь ниже). Причина этого явления была выяснена довольно скоро оказалось, что новая ревизия ядра Prescott наряду с технологиями Execute Disable (XD bit) и Thermal Monitor 2 (TM2) поддерживает новую технологию «улучшенного режима простоя» (Enhanced Halt State, известную также как C1E). Аналогичный режим работы, наряду с серверной технологией Enhanced SpeedStep (DBS), реализован и в новой ревизии ядра Nocona. Настоящая статья посвящена изучению технологии C1E, а также механизма термального мониторинга №2, реализованного в процессорах Pentium 4/Xeon с выходом новой ревизии ядер Prescott/Nocona.
Конфигурация тестовых стендов
Стенд №1
Стенд №2
Программное обеспечение
Согласно имеющейся документации, «улучшенный режим простоя» (C1E) представляет собой режим работы физического процессора с низким энергопотреблением, вхождение в который осуществляется при «усыплении» обоих логических процессоров (посредством выполнения инструкций HLT или MWAIT) при задействовании данной технологии со стороны BIOS. В чем же отличие данного режима пониженного энергопотребления от «обычного» Halt State (C1)? А в том, что в этом случае процессор способен динамически понижать коэффициент умножения частоты системной шины (FID) и уровень питающего напряжения (VID), и восстанавливаться до состояния максимальной производительности (номинальных FID/VID) по мере необходимости, причем совершенно автоматически (без вмешательства со стороны операционной системы). Можно сказать, C1E представляет собой нечто среднее между довольно старой технологией ODCM, которая, как мы показали, автоматически снижает эффективную частоту процессора посредством ее модуляции в режиме простоя, и новой серверной технологией Enhanced SpeedStep (DBS), способной изменять эффективную частоту и питающее напряжение процессора, но не автоматически, а «по запросу».
Что ж, теперь самое время увидеть новую технологию в действии. Для этого используем нашу утилиту RMClock, которая с момента выхода предыдущей публикации уже успела «обрасти» дополнительными возможностями в частности, специфических настроек функций управления энергопотреблением процессоров Intel Pentium 4, Xeon и Pentium M, позволяющими нам отныне обойтись без вспомогательных утилит вроде CPUMSR.
Прежде чем переходить к обсуждению результатов, нам следует сделать одну важную оговорку поступивший в наше распоряжение процессор оказался инженерным образцом (как сообщает Intel Processor ID Utility). В связи с чем вполне можно ожидать, что поведение серийных образцов может отличаться от наблюдаемого в нашем сегодняшнем тестировании.
Второй важный момент определение наличия технологии C1E пока что реализовано исключительно «методом тыка», в связи с чем носит предположительный характер (тем не менее, его функциональность проверена на практике).
Переходим к главным закладкам приложения так они выглядят после нескольких минут работы приложения в отсутствие загрузки процессора. По левой картинке видно, что процессор поддерживает технологии TM1, TM2, ODCM и C1E, из которых в данный момент (т.е. по умолчанию) задействованы только TM2 и C1E. Действие последней заметно уже здесь для этого достаточно сравнить текущие значения FID и VID процессора с номинальными. Первое находится на минимальном уровне, второе где-то посередине между минимумом и максимумом. Динамика изменений FID/VID отчетливо видна на правой картинке при минимальной нагрузке на процессор FID остается на постоянно низком уровне (14x), VID колеблется в довольно широких пределах, а его средняя величина составляет примерно 60% от номинальной. Отметим, что изменения VID, вообще говоря, могут и не отражать реальные изменения питающего напряжения процессора, поскольку VID это всего лишь значение напряжения, которое процессор запрашивает для собственного питания, а материнская плата в принципе вольна сделать с этим запросом все, что угодно (прежде всего, вообще ничего не менять). Тем не менее, в наших тестах изменение реального напряжения процессора также фиксировалось (с помощью утилиты Hardware Monitor из набора Intel Desktop Utilities, которая опирается на показания сенсоров материнской платы), причем последнее было занижено примерно на 0.1V относительно значений VID.
Итак, с FID и VID все замечательно, однако мы не можем пройти мимо одной очень важной детали частоты процессора как таковой. Последняя, как «подлинная», измеренная по TSC, так и «эффективная» («частота троттлинга») как бы остается на… постоянно высоком уровне. Точнее, «частота троттлинга» попадает в область 3590…3600 МГц, что всего на 10 МГц ниже номинальной частоты. Ничего удивительно в этом, необычном на первый взгляд явлении, на самом деле нет. Учитывая саму природу технологии C1E (она активизируется только при вхождении обоих логических процессоров в состояние C1/HALT), не существует никакой возможности увидеть ее в действии. Ибо даже самые точные методы измерения частоты процессора в момент измерения неизбежно потребуют осуществить переход процессора из «спящего» состояния C1 в «рабочее» состояние C0, при котором восстанавливается его полная частота.
Ради интереса, попробуем отключить технологию C1E с помощью закладки настроек процессора.
Результат весьма показательный отключение C1E моментально сопровождается выставлением максимальных значений FID и VID в качестве текущих, после чего они остаются на постоянном уровне, независимо от загрузки процессора. А «эффективная частота» процессора стабилизируется на уровне, соответствующем его «истинной» (номинальной) частоте 3600 МГц.
Следующий эксперимент восстанавливаем функциональность C1E и подаем на процессор переменную нагрузку, имитируемую простым модельным приложением.
Кривые FID/VID убедительно показывают, что процессор способен быстро переключаться между состояниями минимальной и максимальной производительности. При этом количество состояний FID, судя по всему, всего два (начальное и конечное), тогда как изменения VID могут происходить через множество промежуточных состояний (с шагом в 0.0125В).
Таким образом, технология «усовершенствованного режима простоя» весьма перспективное нововведение, призванное значительно снизить потребляемый процессором ток в режиме простоя в гораздо большей степени по сравнению с обычным режимом C1 (HALT). В связи с введением этой технологии может вполне закономерно возникнуть вопрос: если есть полностью автоматическая C1E (которой, кстати, оснащены и новые процессоры Xeon Nocona), зачем нужен Enhanced SpeedStep для серверов (DBS), требующий «ручного» (программного) управления? Ответ на этот вопрос весьма прост: C1E действительно полностью автоматическая технология, она способна снижать энергопотребление процессора только при полном бездействии системы и моментально восстанавливать полную производительность при малейшей загрузке процессора, в то время как DBS может принудительно снижать потребляемую процессором мощность в условиях штатной работы, в т.ч. при значительной загрузке системы (если управляющее ПО «решит», что полная мощность сервера в данный момент не требуется). Технология автоматического термального мониторинга №2
Внимательный читатель обязательно заметит: технология Thermal Monitor 2 уже обсуждалась в предыдущей статье, так зачем же снова уделять ей внимание? Ответ на сей вопрос будет достаточно простым и неожиданным уже после тестирования обнаружилось, что исследованная модель Xeon Nocona (степпинг D0, сигнатура CPUID 0F34h), оказывается, на самом деле… не поддерживает технологию TM2! Точнее, сказано так: «TM2 is enabled, but NOT supported». И ведь действительно Enabled в CPUID Feature Flags указано наличие этой технологии. Да еще и прекрасно работает, как показывают тесты. Но, в то же время, «не поддерживается»… Вот мы и решили исследовать эту технологию на том процессоре (пусть и не серийном образце), который ее официально поддерживает.
Методика ее исследования будет точно такой же: подаем 100% нагрузку на оба логических процессора, после чего останавливаем вентилятор на кулере процессора.
Результат выглядит вполне ожидаемо (а картина аналогична той, которую мы получили на процессоре Xeon) по достижении процессором температуры 73°C наблюдается снижение «эффективной» частоты процессора наряду с плавным снижением его загрузки. По графику FID/VID видно колебание FID между двумя уровнями минимальным и максимальным. В то же время заметно, что переключение VID может осуществляться через промежуточные состояния (как и в технологии C1E, только изменения происходят гораздо резче).
Примерно через минуту после остановки вентилятора технология TM2 начинает работать на полную мощность, при этом достигается «эффективная частота» процессора 2.8 ГГц, загрузка стабилизируется на уровне 77.7%, а FID/VID на уровне целевых значений (TM2 Target FID/VID) 14x и 1.2V, соответственно.
Возобновление активного охлаждения процессора сопровождается рассмотренными выше изменениями, протекающими в обратном порядке.
Для полноты картины, мы повторили данный тест, предварительно запустив утилиту стороннего производителя ThrottleWatch (учитывая, что на момент ее выпуска у нас уже не было возможности исследовать ее поведение при срабатывании TM2). Результат очевидный ThrottleWatch способна как обнаружить, так и отследить момент срабатывания/выхода из режима TM2, однако ее функциональность в других режимах «троттлинга» процессора по-прежнему остается под вопросом. Новая ревизия ядра Nocona процессоров Intel Xeon
Напоследок, рассмотрим аналогичную ревизию E0 (CPUID = 0F41h) ядра Nocona процессоров Intel Xeon 3.6 ГГц. Для начала, изучим, какие из рассматриваемых технологий управления энергопотреблением присутствуют и задействованы по умолчанию в этой категории процессоров.
Итак, новая ревизия ядра Nocona поддерживает все пять «термальных» технологий от «древних» ODCM и TM1 до новых и новейших TM2, DBS и C1E. Из них на момент запуска приложения включены DBS (кстати, заметим, что поддержку технологии серверного Enhanced SpeedStep можно включить/выключить в настройках BIOS; кроме того, она автоматически включается утилитой RMClock при ее запуске) и, как это ни странно, старый вариант термического троттлинга механизм автоматического термального мониторинга №1 (TM1), в противоположность 3.6-ГГц процессору Pentium 4. Что интересно, настройки целевых значений FID/VID для TM2 выставлены BIOS-ом корректно (это можно увидеть по Minimal FID/VID), однако сама технология почему-то не включена по умолчанию. Наконец, заметим, что C1E по умолчанию также отключена (напомним, ее включение/выключение также задача BIOS), что отчетливо видно по правому скриншоту: значения FID/VID не меняются с течением времени. Можно предположить, что «невключение» C1E на серверной платформе продиктовано соображениями максимальной производительности (минимального времени отклика сервера на запрос): из общих соображений очевидно, что как вход в состояние C1E, так и выход из него сопровождаются большими задержками по сравнению со входом в/выходом из обычного состояния C1 (HALT), в связи с необходимостью переключения режимов работы процессора (FID/VID) в сторону меньшего энергопотребления и обратно.
Как бы там ни поступал производитель процессоров, чипсетов и материнских плат со своей продукцией, нам ничего не мешает включить интересующие нас настройки вручную, с помощью закладки специфических настроек процессора (Advanced) утилиты RMClock. Включаем TM2 (его, в принципе, можно и не включать), C1E и смотрим на результат.
C1E в действии. «Коэффициент умножения» процессора упал до минимума 14x (т.е., согласно нашей рабочей гипотезе, включилась модуляция частоты с циклом полезного действия процессора 77.7%), напряжение ядра начало «прыгать» между минимумом и максимумом, находясь большую часть времени на уровне 1.237V. Эффективная частота процессора снизилась, ее минимальный уровень находится вблизи 3470 МГц. Итак, технология C1E функционирует в процессорах Xeon (Nocona) корректно.
Посмотрим теперь, как сочетаются две новейшие функции управления режимами работы процессора серверный Enhanced SpeedStep (DBS) и Enhanced Halt State (C1E) между собой, тем более что такую картину мы можем увидеть в настоящее время только на последних процессорах Intel Xeon. Для этого выставим в RMClock режим управления производительностью процессора (P-State Profile) Minimal, предварительно выставив минимальные значения FID/VID как 14x и 1.2V, соответственно.
Результат налицо: эффективная частота снизилась до
2.8 ГГц, FID/VID до запрашиваемых значений 14x и 1.2V. Технология C1E при этом как бы отключилась естественно, снижать эффективную частоту процессора, равно как и его напряжение, дальше некуда. Пойдем дальше: выставим профиль производительности процессора Maximal (FID = 18x, VID = 1.388V).
Поведение процессора в этом режиме весьма интересно: несмотря на принудительное выставление максимальных FID/VID, C1E явно «берет верх» над Enhanced SpeedStep эффективная частота процессора снижается, FID и VID колеблются между минимальном и максимальном уровнями. Т.е. теперь «как бы отключилась» не C1E, а DBS. Проведем еще один эксперимент: оставим режим производительности Maximal, но… снизим до минимума питающее напряжение (в отсутствие загрузки процессора это вполне можно сделать), т.е. выставим FID/VID как 18x и 1.2V.
Вот теперь C1E действительно отключилась, полностью передав управление технологии DBS. Отсюда можно сделать интересный вывод: для того, чтобы технология C1E могла функционировать, напряжение процессора (VID) должно, пусть даже на самую малость (0.0125В), но отличаться от минимально возможного (задаваемого в TM2 Target VID). Иными словами, под различными состояниями производительности/энергопотребления процессора для C1E в первую подразумеваются значения VID, а значения FID для нее вторичны. Подводя итоги
В нашей предыдущей статье мы начали, а в настоящей завершили рассмотрение современных технологий управления производительностью и энергопотребления процессоров Intel Pentium 4 (Prescott) и Intel Xeon (Nocona). Основной вывод уже был сделан ранее все рассмотренные технологии, начиная с первой ODCM, и заканчивая последними Enhanced SpeedStep (DBS) и Enhanced Halt State (C1E), по всей видимости, имеют в своей реализации общую идейную основу модуляцию тактовой частоты процессора (цикла полезного действия). Может показаться, что это своего рода «нечестность», обман потребителя. Разумеется, это не так, и мы не утверждали ничего подобного. На самом деле, это всего лишь один из возможных (и наиболее простых) способов реализации упомянутых технологий, но он не менее эффективный, чем «более честные» способы. К тому же, не следует забывать, что это одна из возможных точек зрения (автора статьи), с которой можно и не соглашаться. Можно придумать и альтернативную точку зрения, гораздо более «правильную» с точки зрения официальной документации Intel.
Какова же возможная альтернатива? Можно предположить, что, поскольку некоторые блоки процессора (например, арбитры шины, асинхронные префетчеры и пр.), скорее всего, не могут легко осуществлять переход между различными скоростями функционирования, инженеры Intel, скорее всего, «разделили» процессорное ядро на несколько независимо тактируемых составляющих (либо за счет нескольких PLL, либо за счет делителей частоты, преобразующих опорную тактовую частоту). Часть из этих составляющих всегда функционирует на полной частоте (в эту часть попадает и Time Stamp Counter, на показаниях которого основан общепринятый метод измерения тактовой частоты процессора), тогда как остальные части (исполнительные модули) могут тактироваться меньшей частотой. При этом, правда, не совсем понятно, зачем инженеры Intel решили тактировать TSC полной частотой, тогда как счетчики производительности процессора (Performance Monitoring Counters, PMC) работают на «уменьшенной» частоте?
Возможные объяснения этого факта, равно как и выбор между представленными точками зрения оставим на откуп читателю. Со своей стороны отметим, что в ходе нашего исследования нам не удалось обнаружить каких-либо экспериментальных свидетельств в пользу второй, более «официальной» гипотезы. Разумеется, у нас нет явных свидетельств и в пользу нашей точки зрения, за исключением того, что она не противоречит экспериментальным фактам. Поэтому займемся «доказательством от противного». Среди основных возражений против нашей точки зрения можно наметить, во-первых, некорректность методики определения частоты процессора, а во-вторых, фактически, наше заявление о том, что процессоры Pentium 4 и Xeon могут работать на полной частоте при пониженном напряжении питания (в режимах TM2, DBS и C1E).
Начнем с первого утверждения. Корректность определения фактической частоты процессора не вызывает сомнений этим методом пользуются все без исключения системные утилиты (CPU-Z, WCPUID), наконец, сама операционная система, а также… Intel Processor Identification Utility! Приведенный ниже скриншот получен на процессоре Intel Xeon 3.6 ГГц при включении технологии Enhanced SpeedStep.
Мы полагаем, картина не требует пояснений: частота процессора измерена утилитой по TSC (3.6 ГГц), а частота системной шины простым делением ее на текущий «коэффициент умножения» 14x, что приводит к неправильному конечному значению 1028 МГц и красноречивой надписи «Overclocked!». Итак, если «неправильным» методом пользуются и утилиты Intel, что же тогда следует считать «правильным» методом? Применение формул вида
FSB_freq = TSC_freq / Startup_FID
CPU_freq = FSB_freq * Current_FID,
т.е. банальное умножение частоты системной шины процессора на текущий «коэффициент умножения»? (именно этот метод, по всей видимости, использовался при демонстрации технологии DBS на IDF 2004 Russia) Извините, но это уже не подлинное измерение, а натуральный подгон, выдача желаемого за действительное. К тому же, этот метод будет явно не универсальным, т.е. непригодным для любого x86-совместимого процессора.
Перейдем ко второму утверждению. На первый взгляд, оно очевидно: снижение питающего напряжения процессора (при срабатывании TM2, а также задействовании Enhanced SpeedStep и Enhanced Halt State) непременно должно сопровождаться снижением реальной тактовой частоты процессора. Но это лишь на первый взгляд факты говорят совсем о другом. Прежде всего, взглянем на последний скриншот в предыдущем разделе по нему четко видно, что процессор Intel Xeon 3.6 ГГц способен работать на полной частоте (FID = 18x) и при весьма низком напряжении питания 1.2V (на 0.1875V ниже номинального!). А во-вторых, проведем еще один интересный эксперимент возьмем «разблокированный» процессор Intel Pentium 4 560J (Prescott) 3.6 ГГц и заставим его считать, что он работает на минимальной тактовой частоте (FID = 14x), но… повысим частоту системной шины до 266 МГц (как это сделать, мы подробно описали в статье «Раскрываем потенциал DDR2-533. Часть 2: частота FSB 266 МГц, процессор Intel Pentium 4 Prescott»).
Смотрите, что происходит: процессор «уверен», что он по-прежнему работает в штатных условиях, в связи с чем динамически управляет своим питающим напряжением в режиме простоя благодаря технологии C1E. Тогда как его реальная частота как подлинная, так и эффективная равны 3.74 ГГц. Получается, что процессоры Pentium 4 и Xeon действительно могут работать на полной частоте при пониженном напряжении питания, если они находятся в режиме простоя (C1/C1E).
Таким образом, приведенные выше факты, хотя и явно не подтверждают, но дополнительно подкрепляют наш вывод о единой основе реализации функций управления производительностью и энергопотреблением процессоров Intel Pentium 4 и Xeon.
Enhanced halt state c1e что это
Другие идентичные по назначению параметры: C1E support, C1E enhanced halt state, CPU enhanced halt C1E.
Опция C1E предназначена для настройки параметров энергосбережения процессоров компании Intel. Опция имеет два варианта значений – Auto и Disabled. В различных BIOS она также может называться Intel C-STATE Technology, Enhanced C1 или Enhanced Halt.
Принцип работы
Включение опции C1Е позволяет задействовать для центрального процессора (ЦП), находящегося в неактивном состоянии, особый энергосберегающий режим, который носит название Enhanced Halt State («Улучшенное состояние простоя»). В этом состоянии снижается частота работы ЦП, его напряжение, а также отключаются некоторые неиспользуемые функциональные элементы процессора. В результате снижается потребление электроэнергии, а также выделение тепла процессором. Данная технология стала доступна пользователю с выходом процессоров семейства Pentium 4, основанных на ядре Prescott. Как правило, функцию, реализующую технологию Enhanced Halt State, можно найти на материнских платах, предназначенных для ЦП производства Intel, однако некоторые материнские платы платформы AMD тоже ее поддерживают.
Название функции – «Улучшенное состояние простоя» намекает на то, что она является усовершенствованием стандартного состояния простоя ЦП (С1), которое описывается стандартом энергосбережения ACPI. Расширенный вариант этого состояния гарантирует еще большее снижение энергопотребления во время простоя, во многом благодаря тому, что он позволяет уменьшать не только частоту процессора, но и его напряжение. Кроме того, важным преимуществом C1E является то, что данное состояние может регулироваться ЦП автоматически, без помощи операционной системы.
Вариант Auto подразумевает включение опции, вариант Disabled – выключение.
Стоит ли включать функцию?
Рекомендуемым значением для опции является значение Auto, поскольку включение опции будет способствовать более эффективному расходованию энергии, потребляемой ЦП и снижению его тепловыделения. Однако если вы хотите, чтобы процессор не использовал данный режим, то вам следует отключить опцию, выбрав значение Disabled. Потребность в отключении опции может возникнуть, например, при разгоне ЦП, поскольку включенная функция Enhanced Halt State может приводить к нестабильности работы разогнанного процессора.
Краткое руководство по управлению питанием процессора
Как центральный процессор может сокращать собственное энергопотребление? Основы этого процесса — в статье.
Центральный процессор (CPU) спроектирован на бесконечно долгую работу при определенной нагрузке. Практически никто не проводит вычисления круглые сутки, поэтому большую часть времени он не работает на расчетном максимуме. Тогда какой смысл держать его включенным на полную мощность? Здесь стоит задуматься об управлении питанием процессора. Эта тема включает в себя оперативную память, графические ускорители и так далее, но я собираюсь рассказать только про CPU.
Если вы знаете про C-состояния (C-states), P-состояния (P-states) и то, как процессор переходит между ними, то, возможно, в этой статье вы не увидите ничего нового. Если это не так, продолжайте читать.
Я планировал добавить реальные примеры из ОС Linux, но статья становилась все больше, так что я решил приберечь это для следующей статьи.
Основные источники информации, использованные в этом тексте:
Особенности CPU
Согласно официальной странице продукта, мой процессор поддерживает следующие технологии:
Теперь выясним, что значит каждое из этих определений.
Как снизить энергопотребление процессора во время его работы?
На процессорах для массового использования (мы не берем в расчет вещи, которые возможны при их проектировании) для снижения потребляемой энергии можно реализовать один из сценариев:
Второй вариант требует чуть больше объяснений. Энергопотребление интегральной схемы, которой является процессор, линейно пропорционально тактовой частоте и квадратично напряжению.
Примечание для тех, кто разбирается в цифровой электронике: Pcpu = Pdynamic + Pshort circuit + Pleak. При работающем процессоре Pdynamic является наиболее важной составляющей, именно эта часть зависит линейно от частоты и квадратично от напряжения. Pshort circuit пропорционально частоте, а Pleak — напряжению.
Более того, напряжение и тактовая частота связаны линейной зависимостью.
Высокая производительность требует повышенной тактовой частоты и увеличения напряжения, что еще больше влияет на энергопотребление.
Каков предел энергопотребления процессора?
Это во многом зависит от процессора, но для процессора E3-1245 v5 @ 3.50 ГГц расчетная тепловая мощность (Thermal Design Power, TDP) составляет 80 ватт. Это среднее значение, которое процессор может выдерживать бесконечно долго (Power Limit, PL1 на изображении ниже). Системы охлаждения должны быть рассчитаны на это значение, чтобы быть надежными. Фактическое энергопотребление процессора может быть выше в течение короткого промежутка времени (состояния PL2, PL3, PL4 на изображении ниже). TDP измеряется при нагрузке высокой вычислительной сложности (худший случай), когда все ядра работают на базовой частоте (3.5 ГГц).
Как видно на изображении выше, процессор в состоянии PL2 потребляет больше энергии, чем заявлено в TDP. Процессор может находиться в этом состоянии до 100 секунд, а это достаточно долго.
Состояния питания (C-states) vs состояния производительности (P-states)
Состояния питания (C-states) vs состояния производительности (P-states)
Вот два способа снизить энергопотребление процессора:
P-состояния описывают второй случай. Подсистемы процессора работают, но не требуют максимальной производительности, поэтому напряжение и/или тактовая частота для этой подсистемы может быть снижена. Таким образом, P-состояния, P[X], обозначают, что некоторая подсистема (например, ядро), работает на заданной паре (частота, напряжение).
Так как большинство современных процессоров состоит из нескольких ядер, то С-состояния разделены на С-состояния ядра (Core C-states, CC-states) и на С-состояния процессора (Package C-states, PC-states). Причина появления PC-состояний очень проста. Существуют компоненты с общим доступом (например, общий кэш), которые могут быть отключены только после отключения всех ядер, имеющих доступ к этому компоненту. Однако мы в роли пользователя или программиста не можем взаимодействовать с состояниями пакета напрямую, но можем управлять состояниями отдельных ядер. Таким образом, управляя CC-состояниями, мы косвенно управляем и PC-состояниями.
Состояния нумеруются от нуля по возрастанию, то есть C0, C1… и P0, P1… Большее число обозначает большее энергосбережение. C0 означает, что все компоненты включены. P0 означает максимальную производительность, то есть максимальные тактовую частоту, напряжение и энергопотребление.
С-состояния
Вот базовые С-состояния (определенные в стандарте ACPI).
Примечание: Из-за технологии Intel® Hyper-Threading существуют также С-состояния потоков. Хотя отдельный поток может работать с С-состояниями, изменения в энергопотреблении происходят, только когда ядро входит в нужное состояние. В данной статье тема C-состояний на потоках рассматриваться не будет.
Вот описание состояний из даташита:
Примечание: LLC обозначает Last Level Cache, кэш последнего уровня и обозначает общий L3 кэш процессора.
Визуальное представление состояний:
Источник: Software Impact to Platform Energy-Efficiency White Paper
Последовательность C-состояний простыми словами:
Однако если ядро работает (C0), то единственное состояние, в котором может находиться процессор, — C0. С другой стороны, если ядро полностью выключено (C8), процессор может находиться в C0, если другое ядро работает.
Примечание: Intel Software Developer’s Manual упоминает про суб-C-состояния (sub C-state). Каждое С-состояние состоит из нескольких суб-С-состояний. После изучения исходного кода модуля ядра intel_idle я понял, что состояния C1 и C1E являются состоянием С1 с подтипом 0 и 1 соответственно.
Число подтипов для каждого из восьми С-состояний (0..7) определяется с помощью инструкции CPUID. Для моего процессора утилита cpuid выводит следующую информацию:
Замечание из инструкции Intel: «Состояния C0..C7 для расширения MWAIT — это специфичные для процессора C-состояния, а не ACPI C-состояния». Поэтому не путайте эти состояния с ACPI C-состояниями, они явно связаны и между ними есть соответствие, но это не одно и то же.
Я создал гистограмму, представленную ниже, из исходного кода драйвера intel_idle для моего процессора (модель 0x5e). Подписи горизонтальной оси:
Имя C-состояния: специфичное для процессора состояние: специфичное суб-состояние.
Вертикальная ось обозначает задержку выхода и целевые резидентные значения из исходного кода. Задержка выхода используется для оценки влияния данного состояния в реальном времени (то есть сколько времени потребуется для возвращения в С0 из этого состояния). Целевое резидентное значение обозначает минимальное время, которое ядро должно находиться в данном состоянии, чтобы оправдать энергетические затраты на переход в это состояние и обратно. Обратите внимание на логарифмический масштаб вертикальной оси. Задержки и минимальное время нахождения в состоянии увеличивается экспоненциально с увеличением номера состояния.
Константы задержок выхода и целевых резидентных значении C-состояний в исходном коде intel_idle
Примечание: Хотя состояния С9 и С10 включены в таблицу, они имеют 0 суб-состояний и поэтому не используются в моем процессоре. Остальные процессоры из семейства могут поддерживать эти состояния.
Состояния питания ACPI
Прежде чем говорить про P-состояния, стоит упомянуть про состояния питания ACPI. Это то, что мы, пользователи, знаем, когда используем компьютер. Так называемые глобальные системные состояния (G[Х]) перечислены в таблице ниже.
Источник: ACPI Specification v6.2
Также существует специальное глобальное состояние G1/S4, Non-Volatile Sleep, когда состояние системы сохраняется на энергонезависимое хранилище (например, диск) и затем производится выключение. Это позволяет достичь минимального энергопотребления, как в состоянии Soft Off, но возвращение в состояние G0 возможно без перезагрузки. Оно более известно как гибернация.
Существует несколько состояний сна (Sx). Всего таких состояний шесть, включая S0 — отсутствие сна. Состояния S1-S4 используются в G1, а S5, Soft Off, используется в G2. Краткий обзор:
Вот поддерживаемые состояния ACPI.
Комбинации состояний ACPI G/S и С-состояний процессора
Приятно видеть все комбинации в таблице:
В состоянии G0/S0/C8 системы процессора запущены, но все ядра отключены.
В G1 (S3 или S4) некорректно говорить про С-состояния (это касается как CC-состояний, так и PC-состояний), так как процессор полностью обесточен.
Для G3 не существует S-состояний. Система не спит, она физически отключена и не может проснуться. Ей необходимо сначала получить питание.
Как программно запросить переход в энергосберегающее С-состояние?
Современный (но не единственный) способ запросить переход в энергосберегающее состояние — это использовать инструкцию MWAIT или инструкцию HLT. Это инструкции привилегированного уровня, и они не могут быть выполнены пользовательскими программами.
Инструкция MWAIT (Monitor Wait) заставляет процессор перейти в оптимизированное состояние (C-состояние) до тех пор, пока по указанному (с помощью другой инструкции, MONITOR) адресу не будет произведена запись. Для управления питанием MWAIT работает с регистром EAX. Биты 4-7 используются для указания целевого С-состояния, а биты 0-3 указывают суб-состояние.
Примечание: Я думаю, что на данный момент только AMD обладает инструкциями MONITORX/MWAITX, которые, помимо мониторинга записи по адресу, работают с таймером. Это еще называется Timed MWAIT.
Инструкция HLT (halt) останавливает выполнение, и ядро переходит в состояние HALT до тех пор, пока не произойдет прерывание. Это означает, что ядро переходит в состояние C1 или C1E.
Что вынуждает ядро входить в определенное С-состояние?
Как отмечалось ранее, переходы между глубокими С-состояниями имеют высокие задержки и высокие энергетические затраты. Таким образом, такие переходы должны выполняться с осторожностью, особенно на устройствах, работающих от аккумуляторов.
Возможно ли отключить С-состояния (всегда использовать С0)?
Это возможно, но не рекомендуется. В даташите (секция 4.2.2, страница 64) есть примечание: «Долгосрочная надежность не гарантируется, если все энергосберегающие состояния простоя не включены». Поэтому вам не стоит отключать С-состояния.
Как прерывания влияют на процессор\ядро в состоянии сна?
Когда происходит прерывание, соответствующее ядро пробуждается и переходит в состояние С0. Однако, например Intel® Xeon® E3-1200 v5, поддерживает технологию Power Aware Interrupt Routing (PAIR), у которой есть два достоинства:
P-состояния
P-состояния подразумевают, что ядро в состоянии С0, потому что ему требуется питание, чтобы выполнять инструкции. P-состояния позволяют изменять напряжение и частоту ядра (другими словами рабочий режим), чтобы снизить энергопотребление. Существует набор P-состояний, каждое из которых соответствует разных рабочим режимам (пары напряжение-частота). Наиболее высокий рабочий режим (P0) предоставляет максимальную производительность.
Процессор Intel® Xeon® E3–1200 v5 позволяет контролировать P-состояния из операционной системы (Intel® SpeedStep Technology) или оставить это оборудованию (Intel® Speed Shift Technology). Вся информация ниже специфична для семейства Intel® Xeon® E3-1200 v5, но я полагаю, это в той или иной степени актуально и для других современных процессоров.
P-состояния, управляемые операционной системой
В этом случае операционная система знает о P-состояниях и конкретном состоянии, запрошенным ОС. Проще говоря, операционная система выбирает рабочую частоту, а напряжение подбирается процессором в зависимости от частоты и других факторов. После того, как P-состояние запрошено записью в моделезависимый регистр (подразумевается запись 16 бит в регистр IA32_PERF_CTL), напряжение изменяется до автоматически вычисленного значения и тактовый генератор переключается на заданную частоту. Все ядра имеют одно общее P-состояние, поэтому невозможно установить P-состояние эксклюзивно для одного ядра. Текущее P-состояние (рабочий режим) можно узнать, прочитав информацию из другого моделезависимого регистра — IA32_PERF_STATUS.
Смена P-состояния мгновенна, поэтому в секунду можно выполнять множество переходов. Это отличает от переходов C, которые выполняются дольше и требуют энергетических затрат.
P-состояния, управляемые оборудованием
В этом случае ОС знает об аппаратной поддержке P-состояний и отправляет запросы с указанием нагрузки. В запросах не указывается конкретное P-состояние или частота. На основе информации от ОС, а также других факторов и ограничений оборудование выбирает подходящее P-состояние.
Я хочу рассказать об этом подробнее в следующей статье, но сейчас я поделюсь с вами своими мыслями. Мой домашний компьютер работает в этом режиме, я узнал это, проверив IA32_PM_ENABLE. Максимальный (но не гарантированный) уровень производительности — 39, минимальный — 1. Можно предположить, что существует 39 P-состояний. На данный момент уровень 39 установлен ОС как минимальный и как максимальный, потому что я отключил динамическое изменение частоты процессора в ядре.
Заметки про Intel® Turbo Boost
Поскольку TDP (расчетная тепловая мощность) — это максимальная мощность, которую процессор может выдержать, то процессор может повышать свою частоту выше базовой, при условии что энергопотребление не превысит TDP. Технология Turbo Boost может временно повышать энергопотребление до границы PL2 (Power Limit 2) на короткий промежуток времени. Поведение Turbo Boost может быть изменено через подсказки оборудованию.
Применима ли эта информация о C-состояниях и P-состояниях к мобильным и встраиваемым процессорам?
Для примера, недавний MacBook Air с процессором i5-5350U в основном поддерживает возможности, описанные выше (но я не уверен про P-состояния, контролируемые оборудованием). Я также смотрел документацию ARM Cortex-A, и, хотя там применяются другие термины, механизмы управления питанием выглядят похоже.
Как это все работает, например, на Linux?
На этот вопрос я отвечу в другой статье.
Как я могу узнать состояние процессора?
Существует не так много приложений, которые могут выводить эту информацию. Но вы можете использовать, например, CoreFreq.
Вот какую информацию можно получить (это не весь вывод).
Вот информация о ядре, включая информацию о драйвере idle.
Мониторинг счетчиков С-состояний (для ядра):