Некоторые аспекты энергосбережения Intel Core i* and Windows

для раздела Лаборатория

Оглавление

Вступление

Современные процессоры давно используют энергосберегающие технологии. Для их идентификации и рекламной раскрутки применяют различные громкие имена, но суть остается одной и той же – изменение производительности элементов ЦП в зависимости от загрузки. Если какой-то модуль не используется, то логично его «заморозить», что снизит мощность потребления и тепловыделение. Первое несущественно для немобильных платформ, а вот повышенное выделение тепла может оказаться важным, поскольку стремление к тишине является общей тенденцией развития аппаратуры и крайне востребовано пользователями.

Энергосбережение – это хорошо, но как оно сказывается на производительности компьютера? Об этом и пойдет речь ниже.

Энергосберегающие технологии

Не надо переживать, я не буду тратить ваше время на изложение десятков мудреных терминов и названий данной области, они все базируются на двух понятиях:

  • «Ну дайте выключиться»;
  • Ниже напряжение = меньше потребление.

Первый прием начал широко применяться довольно давно и суть его в простом действии – если схема остановлена, то она потребляет значительно меньше энергии, чем функционирующая, даже в «облегченном» режиме. Сейчас микросхемы изготавливают по CMOS технологии, что подразумевает почти нулевой ток потребления при отсутствии коммутации. Но, как только начинает что-то происходить, сразу следует возрастание тока, и причина этого неприятного последствия заключается в паразитной емкости элементов и трасс внутри микросхемы. При заряде конденсатора на нем запасается энергия C*V^2/2, где С – емкость; V – изменение напряжения. Чем чаще изменяется логический уровень элемента, тем больше энергии циркулирует через ключевые элементы, что вызывает выделение тепла, ведь «ключи» имеют довольно большое внутреннее сопротивление во включенном состоянии.

Второй прием стал применяться относительно недавно, как дополнение к первому - в некоторых случаях можно снижать рабочую частоту простаивающих узлов, что не вызовет потери производительности. Коль скоро снизили частоту, то можно пропорционально к ней поснизить и рабочее напряжение. Чем меньше напряжение и частота, тем ниже как мощность потребления, так и «фоновый» ток утечки по полупроводниковому кристаллу.

Рассмотрим один пример. Положим, в некоторой шине был уровень «0» и требуется передать логическую единицу.

313x201  2 KB

На данном рисунке отмечены основные элементы передатчика:

  • Q1, Q2 – выходные ключи;
  • C1 – паразитная емкость ключей, окружающих элементов и трассировки вокруг узла передатчика сигнала;
  • T1 – шина передачи сигнала;
  • U – приемник.





Работает схема следующим образом. Конденсатор С1 разряжен, открывается ключ Q1 и замыкает его на питание (Vcc). При этом конденсатор начинает заряжаться через включенный транзистор Q1, который имеет довольно большое сопротивление. Напряжение на конденсаторе возрастает до уровня Vcc, отсюда можно вычислить накопленную в нём энергию. Сам переходной процесс протекает время R*C, где «R» - сопротивление ключа Q1; «C» - номинальная емкость конденсатора C1. По прошествии переходного процесса напряжение на конденсаторе С1 установится в постоянное значение (Vcc) и в дальнейшем изменяться не будет. Это означает, что ток в схеме перестанет куда либо ‘течь’ и узел перестанет потреблять мощность из источника питания. При смене уровня на «логический 0» происходят схожие процессы, только при этом закрывается транзистор Q1 и открывается Q2, что приводит к «закорачиванию» конденсатора С1 на землю и вся накопленная в нём энергия израсходуется на нагрев внутреннего сопротивления включенного транзистора Q2. Иначе говоря, чем чаще происходит смена уровня, тем больше потребляется мощность из источника питания, и эта зависимости линейная. С другой стороны, энергия, накапливаемая на конденсаторе, пропорциональна квадрату напряжения, поэтому даже небольшое снижение разности уровней «логического 1» и «логического 0» приводит к существенной экономии затрат.

Данный пример характеризует работу обоих приемов энергосбережения:

  • Если узел не переключается, то на перезарядку конденсатора С1 не тратится мощность;
  • Энергия, накапливаемая на конденсаторе С1 пропорциональна квадрату разности напряжений «0» и «1», а потому снижение этих величин весьма чувствительно понижает расходуемую мощность.

Режим остановки узлов процессора инициируется операционной системой. Для процессоров, точнее ядер, существует несколько состояний. Обязательными являются два – нормальный режим работы «С0» и простой «С1». Состояние остановки требуется любой операционной системе, ведь не всегда есть что выполнять и процессор надо останавливать. Для «усыпления» используется специальная команда «hlt» (MWAIT), по которой процессор останавливает выполнение программы. Интересно, что программно вывести его из этого состояния нельзя и он может находиться в нем неограниченное время. К слову, как же тогда работает ОС, если процессор усыплен и не может быть разбужен с помощью программы? (Да и о какой «программе» может идти речь, если инструмент ее выполнения, процессор, спит.) Все просто, процессор просыпается по любому (незамаскированному) аппаратному прерыванию. Один из основных движущих элементов в работе ОС – это аппаратный таймер, который задает «тик» работы системы. Период его работы зависит от операционной системы и имеет величину порядка 1 мс. Итак, если выдать hlt, то процессор уснет и будет разбужен следующим тиком таймера или любым прерыванием от аппаратуры компьютера (дисковая система, клавиатура, видеокарта и другое). Поэтому процесс работы процессора выглядит как циклическое выполнение следующих стадий:

  • Выполнить имеющиеся задания;
  • hlt = усыпили;
  • (сон);
  • Аппаратное прерывание = разбудили.

Вроде бы простая технология, ненужное время процессор «спит». Но, как и у людей, степень «сна» бывает разной. Состояние «С1» предполагает, что процессор не выполняет программу, но это не означает его полное бездействие. Он может (до)выполнять некоторые загрузки/выгрузки данных, синхронизацию и обмен сообщениями с другими процессорами/ядрами – все это расходует энергию и говорить о полном «сне» не приходится. Поэтому, на современных процессорах принято несколько режимов «сна» с различной мерой отключения блоков (кэш, контроллер памяти, периферия). Вначале процессор должен выгрузить несохраненные данные из кэш-памяти во внешнюю память, после чего можно остановить работу устройств их поддержки. Основная суть действа - отключить всё, что возможно, но на это требуется время. Если же в процессоре несколько исполнительных ядер, то взять и «так просто» пройти цепочку «С1 -> С3 -> С6 -> С7» не получится. В самом деле, если какое-то ядро усыпили, то из этого факта вовсе не следует, что можно отключать кеш и контроллер памяти, ведь ими пользуются другие ядра. Поэтому, при переключении свойств всего процессора считается, что его состояние равно наименьшему из состояний ядер. Например, если одно ядро выполняет программу (С0), одно усыплено (С1), а остальные отключены (С3-С7), то состояние всего процессора считается как «С0» (минимум из чисел «0»,«1»,«3-7»). Как только «работающее» ядро будет усыплено, то процессор изменит состояние на «С1» («1»,«1»,«3-7»).

Общее впечатление по характеру состояний можно получить по следующей таблице состояний, взято из документации Intel:

450x526  18 KB

При описывании состояний процессора я упорно избегал определения «С1E», довольно часто встречаемого в настройках BIOS. Наверно, пришло время обсудить это «особое» состояние. Работающее ядро находится в состоянии «С0», усыпленное командой «hlt» в «С1», откуда взялось «С1E»? Это то же состояние «С1», но при этом снижается его напряжение и частота. Гм, не находите, довольно любопытно обсуждать частоту усыпленного ядра, если оно не работает? Да нее, смысл есть - сразу по пробуждении ядро будет работать на этой пониженной частоте до тех пор, пока не восстановится нормальное напряжение и появится возможность восстановить и частоту. Впрочем, об этом поговорим попозже. Проблема в том, что оказаться усыпленными и отключенными могут не все, а только некоторые ядра, а потому состояние «процессора» (не путайте с «ядром») не является столь уж очевидным. Ранее приводился пример с одним активным, одним уснувшим и несколькими отключенными ядрами. При этом состояние «процессора», с точки зрения переключения мощности, будет «активным», хоть часть ядер «спят». Довольно несуразно, но это происходит из того факта, что на процессор делают только один источник питания, а потому устанавливать разные напряжения для различных ядер невозможно. Сколько бы ядер ни «спало» и насколько «сильно» - это не важно, контроллер источника питания обязан обеспечить тот уровень напряжения, чтобы работающее ядро обеспечило нормальное функционирование.

Состояние «С1E» может быть отключено в BIOS, тогда ядра (и весь процессор) по команде «уснуть» от операционной системы будут переходить в состояние «С1». Иначе – в «С1Е». С точки зрения функционирования особых отличий между «С1» и «С1E» нет, кроме того, что в последнем устанавливается низкое напряжение – снижается мощность потребления.

В нормальном режиме работы ядра могут находиться в различном состоянии, но весь процессор только в двух - «активном» и «усыпленном» «С1х». Операционная система при работе не может отключить все ядра, хоть одно, но останется «не отключенным» – а потому состояния выше «С1х» для всего процессора не применяются и используются только для режима «сна» и «выключения» всей операционной системы (компьютера).

Зачем же нам нужны состояния отключения («С3»- «С7»), если в них могут попадать только ядра, а не весь процессор? Из-за функции турборазгона. Intel продвигает технологию автоматического разгона процессора, если в нём работают не все ядра. Довольно логично, ведь «TDP» на процессор прописан достаточно четко и превышать его нельзя. Но, коль скоро работают не все ядра, то оставшиеся можно подразогнать, с одновременным повышением напряжения - «TDP» превышен не будет, а программа станет выполняться быстрее. Для описания меры авторазгона составляется список «количество активных ядер» = «множитель» и контроллер процессора сам переустанавливает множитель на ядра в зависимости от их состояния. К чему я? Так вот, активными считаются ядра в состоянии «С0» - «С1х». А значит, для повышения производительности процессора операционная система должна отправлять неиспользуемые ядра не в «сон», а в «отключение» (С3-С7), иначе «турборазгон» окажется весьма спорным.





Кроме разной степени «усыпления» операционная система может снижать потребление и для активных ядер (состояние «С0») путем изменения (понижения) частоты их работы. При этом снижается как производительность, так и мощность потребления. Довольно неприятно терять скорость работы, но разве она кому-то нужна, если процессор практически ничего не делает?

Процессор и источник питания

В начале статьи мы немножко «пробежались» по технологиям энергосбережения, все они основаны на изменении напряжении питания процессора. Вроде бы, простая вещь - взять и поменять напряжение, но после внимательного изучения вопроса начинают всплывать неприятные моменты. Для питания процессора используется импульсный преобразователь, что явно подразумевает наличие сглаживающего дросселя (точнее дросселей, фаз же несколько) и демпферных конденсаторов ощутимой емкости. Процессор потребляет большой ток, до «сотен» ампер, а потому к качеству и количеству конденсаторов предъявляются жесткие требования. Типичная емкость конденсаторов колеблется в интервале пять-восемь тысяч микрофарад. Коль скоро в цепи участвует LC контур, то колебательный процесс неизбежен.

Ранее процессоры и их источник питания мало «общались» друг с другом. Процессор лишь выставлял VID (Идентификатор напряжения), а преобразователь источника питания переводил код в нужное напряжение и стабилизировал его на шинах процессора. Причем, довольно часто в цепь по передачи VID «вклинивалась» микросхема мониторинга и контроля (MIO), которая могла переназначить или модифицировать VID. А именно, она могла пропускать код VID из процессора, или подменять его на постоянное значение. В эпоху Core2 именно так и работал механизм разгона, отсюда вытекали два режима функционирования – или работает энергосбережение, но нельзя изменить (повысить) напряжение на процессоре, или напряжение можно выставить любым, но оно уже не сможет снижаться в простое. Отдельные микросхемы MIO, кроме режима «замены», могли использовать VID от процессора с добавлением смещения, что позволяло разгонять процессор и сохранить функцию снижения напряжения в простое, но таких MIO существовало не много, да и не все они могли работать нормально. Например, в MIO Winbond такая функция была реализована, но при попытке поставить любое смещение, не равное нулю, компьютер перегружался. В более новых процессорах это «упрощенная» технология была изменена и часть контроллера преобразователя переместилась в процессор. Если подумать, то это довольно логично, хотя и звучит дико. Процессор «знает» про себя всё, когда и что ему надо делать и насколько ему нужно какое напряжение. Фраза звучит несколько размыто, но в процессоре действительно много изменений в этой области и продвинутые режимы турборазгона лишь верхушка айсберга. Процессор знает ток потребления от источника питания, но это уже давно не новость, ограничение предельной мощности (тока) было реализовано уже в «Nehalem». К слову – в качестве датчика тока использовался фрагмент трассировки шины питания, падение на нем. В последующих моделях процессоров блок контроля мощности был существенно расширен. К сожалению, сообщить что-то интересное по данному вопросу крайне затруднительно, Intel не хочет делиться этой информацией. Единственно, что нельзя утаить – процессор общается с контроллером очень плотно и, фактически, сам устанавливает для себя напряжение. Это и раньше так было, но теперь он это делает активно и постоянно. Как бесплатный бонус – теперь можно программно знать о той мощности, которая потребляется процессором и некоторыми его частями.

Управление напряжением

Значительная часть контроллера питания находится в самом процессоре и он может отслеживать и корректировать напряжения по тем законам, которые ему нужны. Вторая часть контроллера располагается на материнской плате, как оно было всегда, но теперь ее функции несколько изменились. Ранее процессор указывал источнику питания выставить нужное ему напряжение и полагал, что это будет выполнено. После перехода на VR12 ситуация изменилась, микросхема контроллера постоянно «отчитывается» о текущих режимах работы (напряжение, ток, температура), а управление процессором условий его работы осуществляется крайне оперативно.

Посмотрим, как же происходит изменение напряжения:

450x300  9 KB

В данном случае изображен процесс повышения напряжения с низкого (простой) в нормальное значение (активный). Изначально был выставлении VID для состояния простоя и для повышения напряжения процессор начинает увеличивать VID (идентификатор напряжения, а не само напряжение) на «1» с небольшой выдержкой между сменой числа. При этом полезно знать две характеристики – размер «шага» по напряжению и «время установления», необходимое на стабилизацию напряжения. Можно вычислить и привести конкретные значения dV и dT, но в этом нет необходимости, существует обобщенный параметр «SlewRate». Он указывает скорость нарастания напряжения в единицу времени. Для контроллера указывается его две разновидности:

  • Fast Slew Rate
  • Slow Slew Rate

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

  • «Fast Slew Rate» настраивается в зависимости от особенностей и возможностей преобразователя. В спецификации VR12 указано, что эта настройка должна быть не медленнее 10 мВ / мкс (за одну микросекунду напряжение поменяется на 10 мВ, за 10 мкс на 100 мВ и т.д.).
  • «Slow Slew Rate» в четыре раза медленнее «Fast Slew Rate», что означает скорость изменения 2.5 мВ/мкс.





Время для времени установки нового напряжения можно получить по следующему соотношению:

445x54  5 KB

Формула состоит из двух частей. Первая (VID/SlewRate) определяет время установки напряжения по VID, вторая (3*RC) характеризуется выходным сопротивлением источника питания и емкостью сглаживающих конденсаторов. С первым всё более-менее просто, процессор «тикает» VID от начального значения до конечного с известной периодичностью, а вот вторая составляющая формулы гораздо интереснее. У любого источника сигнала существует такая характеристика, как «выходное сопротивление». Ничего идеального в природе не бывает, нулевого выходного сопротивления не существует в природе. Преобразователь процессора стоится из элементов с очень хорошими характеристиками, иначе они не смогли бы обеспечить приемлемый уровень тепловых потерь, я уж не говорю о поддержке качественного напряжения. Ток потребления современных процессоров очень большой величины, да еще и рабочее напряжение постоянно снижается, что крайне усложняет разработку преобразователей. В принципе, выходное сопротивление источника питания посчитать не сложно – достаточно сложить сопротивление транзисторов (нижнего ключа), дросселей и поделить на количество фаз. При этом стоит увеличить полученную цифру на 15-30% из-за потерь в трассировке. Увы, токи большие, а сопротивление меди весьма конечно. При этом следует учесть, что расчеты основаны на выходном сопротивлении без учета уровня стабилизации обратной связи. Существует т.н. схема LLC (LoadLine Calibration), которая задает величину выходного сопротивления с точки зрения всего преобразователя (с учетом обратной связи). Как следствие, расчетное выходное сопротивление элементов преобразователя может быть как больше, так и меньше получаемого значения – всё зависит от настройки обратной связи. К слову, это означает, что качество примененных компонентов (транзисторов, дросселей, конденсаторов) уже не сказывается на стабильности напряжения питания процессора? Увы, обратная связь определяет характеристики источника питания для стационарного процесса. При резком изменении напряжения или тока потребления процессора обратная связь не способна оперативно исправить напряжение на выходе, ведь ее быстродействие ограничено. А потому, качественные компоненты все так же важны, они отвечают за «динамику».

Для сглаживания пульсаций и бросков тока потребления процессора по шине питания устанавливается множество конденсаторов высокого качества. В последние несколько лет основным элементом является электролитический конденсатор с твердым диэлектриком. Кроме положительных свойств в виде низкого последовательного сопротивления (ESR) и способности долго работать при большом импульсном токе, это принесло и недостатки – сниженная номинальная емкость и концентрированная встроенная последовательная индуктивность (ESL).

Из приведенной выше формулы вытекает ряд интересных наблюдений, стоит на них остановиться. Вполне очевидно, что время установки напряжения зависит от величины изменения напряжения и той скорости, с которой преобразователь это напряжение устанавливает, но вот часть «RC» явно указывает на то, что процессор прекрасно осведомлен о напряжении на шине питания. К тому же, «R» есть не что иное, как широко известное «LLC» (Load Line Calibration). Технически оно является выходным сопротивлением преобразователя. Обычно данный параметр настраивается в BIOS и общепринятое мнение гласит – ставь его «сильнее», чтобы напряжение процессора не снижалось под нагрузкой.

Telegram-канал @overclockers_news - это удобный способ следить за новыми материалами на сайте. С картинками, расширенными описаниями и без рекламы.
Страница 1 из 4
Оценитe материал
рейтинг: 4.8 из 5
голосов: 129

Комментарии 116 Правила



Возможно вас заинтересует

Популярные новости

Сейчас обсуждают