Как снизить энергопотребление процессора
Автор: serj. Современные процессоры давно используют энергосберегающие технологии. Для их идентификации и рекламной раскрутки применяют различные громкие имена, но суть остается одной и той же – изменение производительности элементов ЦП в зависимости от загрузки. Энергосбережение – это хорошо, но как оно сказывается на производительности компьютера?
Как это все работает, например, на Linux?
На этот вопрос я отвечу в другой статье.
Как снизить энергопотребление процессора во время его работы?
На процессорах для массового использования (мы не берем в расчет вещи, которые возможны при их проектировании) для снижения потребляемой энергии можно реализовать один из сценариев:
- Сократить энергопотребление подсистемы (ядра или другого ресурса, такого как тактовый генератор или кэш) путем отключения питания (уменьшив напряжение до нуля).
- Снизить энергопотребление путем снижения напряжения и/или таковой частоты подсистемы и/или целого процессора.
Второй вариант требует чуть больше объяснений. Энергопотребление интегральной схемы, которой является процессор, линейно пропорционально тактовой частоте и квадратично напряжению.
Примечание для тех, кто разбирается в цифровой электронике: Pcpu = Pdynamic + Pshort circuit + Pleak. При работающем процессоре Pdynamic является наиболее важной составляющей, именно эта часть зависит линейно от частоты и квадратично от напряжения. Pshort circuit пропорционально частоте, а Pleak — напряжению.
Более того, напряжение и тактовая частота связаны линейной зависимостью.
Высокая производительность требует повышенной тактовой частоты и увеличения напряжения, что еще больше влияет на энергопотребление.
Как программно запросить переход в энергосберегающее С-состояние?
Современный (но не единственный) способ запросить переход в энергосберегающее состояние — это использовать инструкцию MWAIT или инструкцию HLT. Это инструкции привилегированного уровня, и они не могут быть выполнены пользовательскими программами.
Инструкция MWAIT (Monitor Wait) заставляет процессор перейти в оптимизированное состояние (C-состояние) до тех пор, пока по указанному (с помощью другой инструкции, MONITOR) адресу не будет произведена запись. Для управления питанием MWAIT работает с регистром EAX. Биты 4-7 используются для указания целевого С-состояния, а биты 0-3 указывают суб-состояние.
Примечание: Я думаю, что на данный момент только AMD обладает инструкциями MONITORX/MWAITX, которые, помимо мониторинга записи по адресу, работают с таймером. Это еще называется Timed MWAIT.
Инструкция HLT (halt) останавливает выполнение, и ядро переходит в состояние HALT до тех пор, пока не произойдет прерывание. Это означает, что ядро переходит в состояние C1 или C1E.
Снижаем рабочее напряжение процессора VCORE
Ну что же, все параметры записаны и сняты на скриншоты, теперь пора приступать к снижению энергопотребления нашего Ryzen через уменьшение напряжения. Скорее всего, вам удастся снизить напряжение в пределах 0.1 В.
На первый взгляд - это очень мало, однако не забывайте, что энергопотребление находится в квадратичной зависимости от напряжения питания. И даже небольшое снижение даст пользу.
В BIOS вашей материнской платы нужно найти параметр напряжение CPU и через параметр Offset с отрицательным значением "-", начать постепенно уменьшать его.
Я уже упомянул, что при снижении напряжения будут очень важны промежуточные состояния вашей системы. Сейчас объясню на примере.
Убавив напряжение на процессоре на 0.15 В, я долго тестировал компьютер в AIDA64 и OCCT и он был абсолютно стабилен. Однако, через день он завис на рабочем столе. Напряжения для одного из промежуточных состояний "частота-напряжение" не хватило. Я чуть уменьшил снижаемое напряжение до 0.1375 В и снова оставил компьютер тестироваться. Но опять получил зависание в простое.
И только снижение на 0.125 В стало стабильным в течение многих дней.
И вот какие результаты дало такое снижение.
В тесте AIDA64 процессор потребляет около 60 ватт, частота держится на 3600 МГц, напряжение примерно 0.988 В. Разница по потреблению со "стоковым" состоянием составила 15 ватт или 20%.
AIDA64 дает максимально приближенное к обычным нагрузкам состояние системы. То есть, в видеокодировании или архивации вы будете получать примерно такие же цифры энергопотребления.
В тесте OCCT процессор потребляет около 79 ватт, частота держится на 3600 МГц, напряжение примерно 0.994 В. Разница по потреблению со "стоковым" состоянием составила 5 ватт или 6%.
Но OCCT - это нетипично тяжелый тест. В реальной работе компьютера таких показателей не будет.
Производительность процессора в Cinebench R20 составила 2764 pts. Немного подросла.
С-состояния
Вот базовые С-состояния (определенные в стандарте ACPI).
- C0: Active, процессор/ядро выполняет инструкции. Здесь применяются P-состояния, процессор/ядро могут работать в режиме максимальной производительности (P0) или в режиме энергосбережения (в состоянии, отличном от P0).
- C1: Halt, процессор не выполняет инструкций, но может мгновенно вернуться в состояние С0. Поскольку процессор не работает, то P-состояния не актуальны для состояний, отличных от С0.
- C2: Stop-Clock, схож с C1, но требует больше времени для возврата в C0.
- С3: Sleep. Возврат в C0 требует ощутимо большего времени.
Примечание: Из-за технологии Intel® Hyper-Threading существуют также С-состояния потоков. Хотя отдельный поток может работать с С-состояниями, изменения в энергопотреблении происходят, только когда ядро входит в нужное состояние. В данной статье тема C-состояний на потоках рассматриваться не будет.
Вот описание состояний из даташита:
Примечание: LLC обозначает Last Level Cache, кэш последнего уровня и обозначает общий L3 кэш процессора.
Визуальное представление состояний:
Источник: Software Impact to Platform Energy-Efficiency White Paper
Последовательность C-состояний простыми словами:
- Нормальная работа при C0.
- Сначала останавливается тактовый генератор простаивающего ядра (С1).
- Затем локальные кэши ядра (L1/L2) сбрасываются и снимается напряжение с ядра (С3).
- Как только все ядра отключены, общий кэш (L3/LLC) ядер сбрасывается и процессор (почти) полностью может быть обесточен. Я говорю «почти», потому что, по моим предположениям, какая-то часть должна быть активна, чтобы вернуть процессор в состояние С0.
Однако если ядро работает (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_idle для моего процессора (модель 0x5e). Подписи горизонтальной оси:
Имя C-состояния: специфичное для процессора состояние: специфичное суб-состояние.
Вертикальная ось обозначает задержку выхода и целевые резидентные значения из исходного кода. Задержка выхода используется для оценки влияния данного состояния в реальном времени (то есть сколько времени потребуется для возвращения в С0 из этого состояния). Целевое резидентное значение обозначает минимальное время, которое ядро должно находиться в данном состоянии, чтобы оправдать энергетические затраты на переход в это состояние и обратно. Обратите внимание на логарифмический масштаб вертикальной оси. Задержки и минимальное время нахождения в состоянии увеличивается экспоненциально с увеличением номера состояния.
Константы задержок выхода и целевых резидентных значении C-состояний в исходном коде intel_idle
Примечание: Хотя состояния С9 и С10 включены в таблицу, они имеют 0 суб-состояний и поэтому не используются в моем процессоре. Остальные процессоры из семейства могут поддерживать эти состояния.
Особенности CPU
Согласно официальной странице продукта, мой процессор поддерживает следующие технологии:
- состояния простоя (Idle States);
- усовершенствованная технология Intel® SpeedStep (Enhanced Intel® SpeedStep Technology).
Теперь выясним, что значит каждое из этих определений.
Вступление
Современные процессоры давно используют энергосберегающие технологии. Для их идентификации и рекламной раскрутки применяют различные громкие имена, но суть остается одной и той же – изменение производительности элементов ЦП в зависимости от загрузки. Если какой-то модуль не используется, то логично его «заморозить», что снизит мощность потребления и тепловыделение. Первое несущественно для немобильных платформ, а вот повышенное выделение тепла может оказаться важным, поскольку стремление к тишине является общей тенденцией развития аппаратуры и крайне востребовано пользователями.
Энергосбережение – это хорошо, но как оно сказывается на производительности компьютера? Об этом и пойдет речь ниже.
Оглавление
И так, как же добиться такой фичи?
Для начала в реестр необходимо добавить следующие ключи
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\0cc5b647-c1df-4637-891a-dec35c318583]
"Attributes"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\3b04d4fd-1cc7-4f23-ab1c-d1337819c4bb]
"Attributes"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\5d76a2ca-e8c0-402f-a133-2158492d58ad]
"Attributes"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\a55612aa-f624-42c6-a443-7397d064c04f]
"Attributes"=dword:00000000
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\54533251-82be-4824-96c1-47b60b740d00\ea062031-0e34-4ff1-9b6d-eb1059334028]
"Attributes"=dword:00000000
После этого идем в
Панель управления -> Электропитание -> Настройка плана электропитания -> Изменить дополнительные параметры питания -> Управление питанием процессора
- Минимальное число ядер в состоянии простоя (Processor performance core parking min cores) — Установить 25% для четырех ядерного процессора (одно ядро) — или 50% для двух ядерного процессора.
- Разрешить состояния снижения питания (Allow Throttle States) – Включить.
- Отключение простоя процессора (Processor idle disable) — Включить состояние простоя.
- Переопределение ядра приостановки ядра производительности процессора (Processor performance core parking core override) – Отключено.
- Максимальное число ядер в состоянии простоя (Processor performance core parking max cores) — Установить 100% (использовать все ядра)
После применения новых параметров можно смело идти в «мониторинг ресурсов» и любоваться тем, что большая часть ядер отключена
Вот собственно и все. Мы получили политику использования ядер «пока нам хватает одного ядра (или сколько вы там укажите) — используем одно ядро», экономим батарейку, а еще и система стала более отзывчивой.
Всем хороши процессоры Ryzen: и низкой ценой, и хорошей производительностью, но вот в плане энергоэффективности они еще уступают процессорам Intel. Но это вполне поправимо и в этом блоге я расскажу, как это сделать.
В своем блоге "Мои впечатления от смены Core i5-3570 на Ryzen 5 1600 без замены видеокарты (GeForce GTX 1060)" я писал, что одна особенность Ryzen 5 1600 мне не понравилась, а именно - энергопотребление, не вписывающееся в заявленные 65 ватт. Шутка ли, в умеренном по нагрузке тесте AIDA64 FPU Ryzen 5 1600 потребляет 73 ватта, а в более серьезном тесте OCCT - до 90 ватт.
реклама
При этом начинается сброс частот, чтобы вписаться даже в эти завышенные лимиты по потреблению, что оборачивается падением производительности. Но, как оказалось, это вполне поправимо и сейчас я расскажу вам, как это сделать.
Процессор и источник питания
В начале статьи мы немножко «пробежались» по технологиям энергосбережения, все они основаны на изменении напряжении питания процессора. Вроде бы, простая вещь - взять и поменять напряжение, но после внимательного изучения вопроса начинают всплывать неприятные моменты. Для питания процессора используется импульсный преобразователь, что явно подразумевает наличие сглаживающего дросселя (точнее дросселей, фаз же несколько) и демпферных конденсаторов ощутимой емкости. Процессор потребляет большой ток, до «сотен» ампер, а потому к качеству и количеству конденсаторов предъявляются жесткие требования. Типичная емкость конденсаторов колеблется в интервале пять-восемь тысяч микрофарад. Коль скоро в цепи участвует LC контур, то колебательный процесс неизбежен.
Ранее процессоры и их источник питания мало «общались» друг с другом. Процессор лишь выставлял VID (Идентификатор напряжения), а преобразователь источника питания переводил код в нужное напряжение и стабилизировал его на шинах процессора. Причем, довольно часто в цепь по передачи VID «вклинивалась» микросхема мониторинга и контроля (MIO), которая могла переназначить или модифицировать VID. А именно, она могла пропускать код VID из процессора, или подменять его на постоянное значение. В эпоху Core2 именно так и работал механизм разгона, отсюда вытекали два режима функционирования – или работает энергосбережение, но нельзя изменить (повысить) напряжение на процессоре, или напряжение можно выставить любым, но оно уже не сможет снижаться в простое. Отдельные микросхемы MIO, кроме режима «замены», могли использовать VID от процессора с добавлением смещения, что позволяло разгонять процессор и сохранить функцию снижения напряжения в простое, но таких MIO существовало не много, да и не все они могли работать нормально. Например, в MIO Winbond такая функция была реализована, но при попытке поставить любое смещение, не равное нулю, компьютер перегружался. В более новых процессорах это «упрощенная» технология была изменена и часть контроллера преобразователя переместилась в процессор. Если подумать, то это довольно логично, хотя и звучит дико. Процессор «знает» про себя всё, когда и что ему надо делать и насколько ему нужно какое напряжение. Фраза звучит несколько размыто, но в процессоре действительно много изменений в этой области и продвинутые режимы турборазгона лишь верхушка айсберга. Процессор знает ток потребления от источника питания, но это уже давно не новость, ограничение предельной мощности (тока) было реализовано уже в «Nehalem». К слову – в качестве датчика тока использовался фрагмент трассировки шины питания, падение на нем. В последующих моделях процессоров блок контроля мощности был существенно расширен. К сожалению, сообщить что-то интересное по данному вопросу крайне затруднительно, Intel не хочет делиться этой информацией. Единственно, что нельзя утаить – процессор общается с контроллером очень плотно и, фактически, сам устанавливает для себя напряжение. Это и раньше так было, но теперь он это делает активно и постоянно. Как бесплатный бонус – теперь можно программно знать о той мощности, которая потребляется процессором и некоторыми его частями.
Возможно ли отключить С-состояния (всегда использовать С0)?
Это возможно, но не рекомендуется. В даташите (секция 4.2.2, страница 64) есть примечание: «Долгосрочная надежность не гарантируется, если все энергосберегающие состояния простоя не включены». Поэтому вам не стоит отключать С-состояния.
Что вынуждает ядро входить в определенное С-состояние?
Как отмечалось ранее, переходы между глубокими С-состояниями имеют высокие задержки и высокие энергетические затраты. Таким образом, такие переходы должны выполняться с осторожностью, особенно на устройствах, работающих от аккумуляторов.
Почему это может не подойти для Zen 2
Сразу хочу предупредить обладателей процессоров Ryzen с архитектурой Zen 2 (Ryzen 5 3600 и т.д.), для вас этот метод может не подойти. Не потому, что процессоры Zen 2 чем-то плохи. Просто процессоры на глазах становятся все сложнее и на примере Zen 2 мы видим, что производитель смог по максимуму выжать из чипов не только разгонный потенциал, но и возможности снижения энергопотребления.
Если вы примените способы из этого гайда к процессору Zen 2, энергопотребление упадет, но и производительность может упасть. Тщательно тестируйте производительность до и после снижения напряжения.
реклама
Однако, комьюнити пользователей процессоров Ryzen не сидит сложа руки и постоянно что-то улучшает своими силами. Например, пользователь нашей конференции 1usmus смог создать профиль энергосбережения для Zen 2, дающий более высокие частоты под нагрузкой.
P-состояния
P-состояния подразумевают, что ядро в состоянии С0, потому что ему требуется питание, чтобы выполнять инструкции. P-состояния позволяют изменять напряжение и частоту ядра (другими словами рабочий режим), чтобы снизить энергопотребление. Существует набор P-состояний, каждое из которых соответствует разных рабочим режимам (пары напряжение-частота). Наиболее высокий рабочий режим (P0) предоставляет максимальную производительность.
Процессор Intel® Xeon® E3–1200 v5 позволяет контролировать P-состояния из операционной системы (Intel® SpeedStep Technology) или оставить это оборудованию (Intel® Speed Shift Technology). Вся информация ниже специфична для семейства Intel® Xeon® E3-1200 v5, но я полагаю, это в той или иной степени актуально и для других современных процессоров.
Применима ли эта информация о C-состояниях и P-состояниях к мобильным и встраиваемым процессорам?
Для примера, недавний MacBook Air с процессором i5-5350U в основном поддерживает возможности, описанные выше (но я не уверен про P-состояния, контролируемые оборудованием). Я также смотрел документацию ARM Cortex-A, и, хотя там применяются другие термины, механизмы управления питанием выглядят похоже.
Итоги
Как видите, ничего сложного в понижении напряжения у Ryzen нет. По сути, это тот же разгон, где мы тестируем сочетания частоты и напряжения, только надо уделить более пристальное внимание промежуточным нагрузками и состоянию простоя.
Только с таким понижением напряжения мой Ryzen 5 1600 стал укладываться в паспортные 60 ватт. Снизилась температура и шум от кулера. Для эксплуатации без разгона это самый оптимальный режим.
Особенно полезно проделать данную процедуру будет владельцам недорогих материнских плат, система питания которых слабая и перегревается.
Подпишитесь на наш канал в Яндекс.Дзен или telegram-канал @overclockers_news - это удобные способы следить за новыми материалами на сайте. С картинками, расширенными описаниями и без рекламы.
Автор: serj. Современные процессоры давно используют энергосберегающие технологии. Для их идентификации и рекламной раскрутки применяют различные громкие имена, но суть остается одной и той же – изменение производительности элементов ЦП в зависимости от загрузки. Энергосбережение – это хорошо, но как оно сказывается на производительности компьютера?
Управление напряжением (продолжение), план электропитания, тестовый стенд, проверка производительности, «импульсная» нагрузка
Слова-слова, это скучно. Возьмем модель некоего «среднего» преобразователя процессора и посмотрим модель.
На схеме прослеживаются три 'строчки' – симулируется работа при трех значениях выходного сопротивления преобразователя:
- (зеленый график). Высокое выходное сопротивление, LLC=«Low»;
- (синий график). Примерно оптимальное выходное сопротивление, LLC=«High»;
- (морская волна). Выходное сопротивление явно мало, LLC в самой «высокой» настройке.
Данное распределение дано условно, но «где-то» соответствует действительности.
реклама
Немного по представленным элементам схемы.
Резисторы R1-3 определяют выходное сопротивление источника (Rвых) - 2 мОм, 1 мОм и 0.5 мОм; источники V2-V4 симулируют компенсацию снижения напряжения из-за выходного сопротивления. Остальные же элементы не изменяются для разных вариантов схем:
- V1 - источник напряжения, формирует импульсное напряжение трапециоидальной формы;
- L1-3 – индуктивность сглаживающего дросселя (с учетом нескольких фаз);
- R4-6 – сопротивление нагрузки источника питания, т.е. «процессор»;
- С1-3 – номинальная емкость сглаживающих конденсаторов;
- R7-9 – ESR этих конденсаторов.
Источники V2-4 поставлены для того, чтобы получить одинаковое напряжение на нагрузке при различном выходном сопротивлении, ведь чем выше Rвых , тем сильнее снижается напряжение. Если для Rвых=0.5-1 мОм это 30-60 мВ (не много), то Rвых=2мОм приводит к потерям в 115 мВ, а это уже явный перебор и нормальное функционирование процессора наверняка окажется под вопросом. Впрочем, посмотрим на результат симуляции.
Гм. Результат хоть и ожидаемый, но это не делает его менее неприятным. Чем быстрее меняется напряжение и ниже выходное сопротивление, тем больше выбросы по фронтам. Причина кроется в наличии дросселей и сглаживающих конденсаторов, причем избавиться от них невозможно - они являются обязательными элементами преобразователя. При смене уровня напряжения происходит заряд конденсаторов и через них протекает большой ток. Попробуем прикинуть, какая должна быть величина тока, чтобы зарядить конденсаторы емкостью 6000 мкФ. У нас два варианта, «Fast Slew Rate» (10 мВ/мкс) и «Slow Slew Rate» (2.5 мВ/мкс).
- «Fast»: 10 мВ/мкс * 6000 мкФ = (10 *10e-3/10e-6) * (6*10e-3) = 60 А.
- «Slow»: 2.5 мВ/мкс * 6000 мкФ = (2.5 *10e-3/10e-6) * (6*10e-3) = 15 А.
Расчеты весьма условны и не учитывают паразитные составляющие сглаживающих конденсаторов (ESR, ESL). Реальные величины токов наверняка окажутся в несколько раз меньше, но порядок чисел сохранится. Суть сглаживающих конденсаторов – сглаживать напряжение, уж простите мне эту тавтологию. Конденсаторы должны поддерживать неизменный уровень, но если преобразователь «захочет» поменять напряжение, то это неизбежно вызовет конфликт, который отчетливо проявил себя на рассмотренной симуляции – на одном фронте напряжение превышает необходимое (что неприятно, но терпимо), на другом недопустимо сваливается вниз. Процессор вовсе не лампочка, для его «зависания» достаточно снизить напряжение на очень короткое время и появится ошибка. Если частота процессора 4 ГГц, то за 20 мкс переходного процесса он может выполнить порядка 100 тысяч инструкций на каждом ядре.
По результатам симуляции позвольте сделать ряд наблюдений, может они окажутся кому-нибудь интересными:
- Снижение выходного сопротивления (настройка LLC) улучшает стабильность усредненной величины напряжения питания процессора (а именно это показывают программные и аппаратные приборы измерения напряжения), но эта стабильность только кажущаяся – амплитуда выбросов резко возрастает;
- Более мощный преобразователь процессора означает повышенное количество сглаживающих конденсаторов, а это приводит к возрастанию тока их перезарядки при смене напряжений, что приводит к возрастанию помех на шине питания;
- Лучше использовать «Slew Rate» = «Slow», вместо «Fast».
Довольно неожиданные выводы, «общепринятые» рекомендации говорят об обратном. Впрочем, данные я выложил, и вы можете принять собственное решение.
«Импульсная» нагрузка
В качестве теста можно использовать ‘что-либо’, нагружающее процессор на очень небольшой интервал времени. Например, программу тестирования производительности дисковой системы. К сожалению, большинство существующих программ выполняют замеры длительное время, что затрудняет симулирования «импульсной» нагрузки. А потому, опять же, придется воспользоваться собственной программой. «HAB» подойдет, в программе можно регулировать качество (т.е. время) выполнения, что подходит для нашей задачи. В качестве информации будет использоваться «задержка доступа канала передачи данных» (в программе это «IO Delay») для режима потокового чтения из буфера дискового накопителя. Этот характеристика вычисляет время, необходимое на выполнение довольно сложной последовательности действий от запроса данных до их получения. Сюда входит время на инициализацию протокола передачи, обработку команды контроллером дискового накопителя и сама передача данных по различным аппаратным интерфейсам. Понятно, что работа контроллера диска не зависит от скоростных характеристик процессора, но интерфейсы передачи данных (PCI Express и внутренние) могут при простое переходить в состояние сна, как и система кеширования процессора. Я ничего не имею против остановки неиспользуемых интерфейсов, но их пробуждение не происходит мгновенно (хоть и весьма быстро).
В проведении тестирования будут использоваться как три обычных плана электропитания, так и два новых. Это «Экспериментальный», полученный из «Сбалансированного» путем отключения «Переопределения процессора выполнения» и снижения порогов загрузки. Второй план, «Отключение режима простоя», получен из «Сбалансированного» с отключенным режимом простоя, что заставляет процессор всегда оставаться в активном состоянии (C0).
Задержка доступа
реклама
HDD WD1500HLFS-01G6U (150 Гбайт, 10000 об/мин), AHCI
При измерении времени доступа имелось несколько нюансов, которые следует отметить. RAMDISK был сформирован «гибридным», с размешением его части на HDD (WD1500HLFS), что сказалось на времени доступа порядка 1мс. Подобное измерение для «RAMDISK» кажется кощунством, но не для нашей задачи. При выполнении запросов программа RAMDISK исчерпывает ресурсы выделенной памяти и начинает переводить адресацию на физический диск. С одной стороны, это тормозит обмен, а с другой «импульсно» нагружает диск, что нам и надо. Поэтому, не пугайтесь большому времени доступа при выполнении этого теста.
Тест в HAB дает две цифры задержек обмена - по доступу (повторное чтение) и по самой операции чтения. Первое значение более-менее осмыслено, а второе весьма условно. Причина заключается в алгоритмах работы контроллера диска - при повторяющемся запросе данных контроллер диска передает те данные, что имеются у него в выходном буфере. Если же запросы чтения касаются разных секторов, то здесь начинает вмешиваться блок работы с носителем данных (в контроллере диска) и время доступа меняется весьма произвольно. По той же причине следует игнорировать столбец «Linear Read» и «CPU Usage». Для получения более-менее адекватных данных по этим характеристикам следует выполнять тест достаточно долго, чтобы обеспечить получение усредненных значений. К слову, система ввода-вывода Windows кеширует процедуры записи, а потому тестирование на «импульсную запись» проводить смысла нет.
Наблюдения и выводы из полученных данных:
- «Экономия энергии»: задержка больше остальных режимов в 2.5 раза, что прямо пропорционально соотношению частот работы/простоя процессора, как 4.2 Ггц / 1.6 ГГц = 2.6. Это говорит о том, что «короткие» дисковые операции всегда выполняются на минимальной частоте процессора. К слову, 1.6 ГГц не самая низкая частота для простоя, у SB-E она еще ниже;
- «Сбалансированный»: характеристики явно лучше «Экономия энергии»;
- «Высокая производительность»: повторяет свойства «Сбалансированный», но, извините, это вовсе не самая высокая производительность!;
- «Экспериментальный»: время повторного доступа значительно меньше всех предыдущих планов электропитания и совпадает с режимом отключенного простоя;
- «Отключение режима простоя»: коль скоро простой отключен, то отсутствует время на «засыпание» и «просыпание». Как следствие, самая высокая производительность.
Все «стандартные» планы не могут установить максимальную производительность компьютера (интересно, зачем они так назвали план электропитания, если он не может это выполнить?).
Смена плана электропитания влияет как на задержки обмена, что логично, так и на время доступа. Я не ожидал, что отключение простоя так сильно скажется на этом параметре (109 мкс против 136 мкс), но еще больше меня удивил факт даже незначительного улучшения для плана «Экспериментальный», с учетом того, что ничего 'особенного' не установлено.
- «Экономия энергии»: традиционное снижение производительности, но теперь уже в 3.6 раза, что нельзя объяснить только снижением частоты с 4.2 до 1.6;
- «Сбалансированный». Второй сюрприз - этот план оказывается таким же «тормозом», как и «Экономия энергии». Вот не ожидал;
- «Высокая производительность» - «Экспериментальный» - «Отключение режима простоя»: результаты одни и те же, что говорит о работе процессора в максимальном режиме производительности.
Очень огорчил «Сбалансированный», а так все результаты соответствуют предсказанным - "экономные" планы продолжают экономит электроэнергию (в ущерб производительности), планы высокой производительности сохраняют высокую скорость.
Все режимы показали равную производительность, кроме состояния с отключенным режимом простоя, где задержка операции чтения снижается почти в 1.5 раза (40 мкс против 55 мкс). Причина 'провала' всех планов? HDD устройство медленное и за время получения следующего сектора данных процессор успеет весьма успешно 'выспаться'. Как видно из данных тестирования, изменение настроек плана не позволяет никак повлиять на режим засыпания - обмен с диском длится так долго, что и самый низкий порог не может оградить процессор от перехода в IDLE.
Впрочем, проведенный тест достаточно «синтетический» и может показаться не слишком полезным. Что ж, возьмем нечто «приземленное», скажем файловые операции в FAR.
Подпишитесь на наш канал в Яндекс.Дзен или telegram-канал @overclockers_news - это удобные способы следить за новыми материалами на сайте. С картинками, расширенными описаниями и без рекламы.
Как прерывания влияют на процессор\ядро в состоянии сна?
Когда происходит прерывание, соответствующее ядро пробуждается и переходит в состояние С0. Однако, например Intel® Xeon® E3-1200 v5, поддерживает технологию Power Aware Interrupt Routing (PAIR), у которой есть два достоинства:
- для энергосбережения прерывание может быть переадресовано работающему ядру, чтобы не будить спящее ядро;
- для производительности прерывание может быть переадресовано от работающего на полную мощность ядра к простаивающему (С1) ядру.
План электропитания
Процессор выделяет тепло во время работы и это нормально, но в состоянии простоя получать ту же рассеиваемую мощность как то уже не хочется. И дело не в экономии электричества – повышенный нагрев означает работу вентиляторов системы охлаждения на высоких оборотах, что резко снижает комфортность работы за таким компьютером. Хочется отметить, что при обычном использовании компьютера бОльшую часть времени процессор простаивает и получить более тихий компьютер вполне реально. Для снижения потребления в состоянии простоя надо выдать команду hlt, для чего в древние времена Windows 9x применялись сторонние программы типа «Watefall Pro», « CpuIdle » и другие. В наше время операционные системы уже давно «умеют» выдавать команду hlt в простое, поэтому проблем быть не должно. Даже больше, в Windows Vista было введено такое понятие, как «План электропитания». К слову, нечто похожее поддерживали и более ранние выпуски Windows, но, извините, назвать это чудное исполнение ‘работающим решением’ язык не поворачивается. Впрочем, ‘как-то’ оно работало и в простое процессор останавливался, а что еще надо от данной технологии?
реклама
Увы, надо много. Пока процессор в системе был один, проблем не было. Но, с увеличением количества ядер, так же начали множиться и проблемы, во вроде бы отлаженных местах. Алгоритм «есть что делать - процессор работает, нет задач – hlt» хорошо и надежно работает в однопроцессорной (одноядерной) системе, а как быть, если ядер несколько? Какой из ядер запускать на выполнение – тот же, что работал до этого, или разбудить другой? Если первое, то меньше накладных расходов на переключение контекста, но выше нагрев этого ядра. Если второе, то наоборот. Впрочем, с двумя ядрами не так уж и сложно, но сейчас восемь (и больше) ядер не является чем-то необычным.
Итак, в Windows Vista, как и в более поздних операционных системах, присутствуют три плана электропитания:
- Экономия энергии: Минимальное энергопотребление за счет уменьшения производительности компьютера, когда это возможно;
- Высокая производительность: Максимальная производительность, но может потребоваться больше энергии;
- Сбалансированный: Автоматическое соблюдение баланса между производительностью и энергопотреблением на пригодном для этого оборудовании.
Не знаю как вам, а мне эти слова ничего не говорят, за терминами может скрываться что угодно. Что ж, остается только взять и посмотреть.
Подготовка и программные инструменты
реклама
Однако, перейдем поскорее к делу. Нам понадобятся следующие инструменты: HWiNFO64 для мониторинга частот, напряжений, температур и энергопотребления нашего Ryzen. На сегодняшний день это самая продвинутая и точная программа мониторинга.
AIDA64 и OCCT для тестирования под нагрузкой. Почему я беру не одну тестирующую программу, а несколько? Потому что очень важно создать разные степени нагрузки на процессор, для выявления нестабильности. Процессору, нормально работающему под OCCT, может не хватить напряжения для работы в промежуточных состояниях.
А так как мы будем снижать напряжение на процессоре во всем диапазоне его работы, нестабильность может подстеречь даже во время простоя. И процессор, проходящий часами AIDA64 и OCCT может сбоить просто на рабочем столе.
Для проверки, не снизилась ли производительность процессора при понижении напряжения, можно использовать Cinebench R20, этот тест довольно точно и с постоянством показывает производительность процессора.
Состояния питания (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 означает максимальную производительность, то есть максимальные тактовую частоту, напряжение и энергопотребление.
Проверка производительности
Для начала стоит определиться с инструментарием, точнее – что же стоит измерять. Вполне очевидно, что при запуске программ класса «Linpack» процессор выставит максимальный множитель и будет работать с одной и той же производительностью при любых настройках энергосберегающих технологий (C1E и EIST) и на любом плане электропитания. Здесь надо выбрать менее загружающие и более реалистическое применение. В качестве «большой» нагрузки подойдет Linpack в режиме AVX, для «средней» можно применить BurnK7, запущенный в количестве, равный имеющимся ядрам процессора. Для «низкой» стоит взять что-то, что загружает процессор, но долго и старательно кого-нибудь «ждет». В этом случае можно воспользоваться каким-нибудь тестом производительности дисковой системы, но их деятельность (а нам нужна нагрузка на процессор) окажется весьма непредсказуемой. Впрочем, такое стоит попробовать. Для четкой нагрузки с долгим ожиданием (т.е. простоем) процессора лучше выбрать свойство, которое не зависит от механических устройств, например системная память. Тест памяти вызовет большой поток обмена с модулями памяти, а этот процесс очень долгий. Процессор, с одной стороны, будет полностью загружен работой, а с другой – находиться в постоянном ожидании данных от контроллера памяти. А потому, в качестве «низкой» нагрузки я использую тест памяти TestMem5, благо принцип его работы я хорошо знаю и неприятных сюрпризов быть не должно.
Что именно стоит измерять? Основное применение домашнего компьютера - игры, «интернет», некоторые музыкальные и графические редакторы. Последнее, как и использование компьютера для перекодирования видео-контента (и подобное), вызывает постоянную загрузку процессора длительное время, а потому при любом плане электропитания и настройках аппаратуры по энергосбережению результат должен быть одинаков. К слову, в играх тоже. Выходит, что и проверять нечего, статью можно заканчивать? Ну уж нет. Позвольте проявить необъяснимую упертость и проверить то, что «и так очевидно должно работать».
Заметки про Intel® Turbo Boost
Поскольку TDP (расчетная тепловая мощность) — это максимальная мощность, которую процессор может выдержать, то процессор может повышать свою частоту выше базовой, при условии что энергопотребление не превысит TDP. Технология Turbo Boost может временно повышать энергопотребление до границы PL2 (Power Limit 2) на короткий промежуток времени. Поведение Turbo Boost может быть изменено через подсказки оборудованию.
Энергосберегающие технологии
Не надо переживать, я не буду тратить ваше время на изложение десятков мудреных терминов и названий данной области, они все базируются на двух понятиях:
- «Ну дайте выключиться»;
- Ниже напряжение = меньше потребление.
реклама
Первый прием начал широко применяться довольно давно и суть его в простом действии – если схема остановлена, то она потребляет значительно меньше энергии, чем функционирующая, даже в «облегченном» режиме. Сейчас микросхемы изготавливают по CMOS технологии, что подразумевает почти нулевой ток потребления при отсутствии коммутации. Но, как только начинает что-то происходить, сразу следует возрастание тока, и причина этого неприятного последствия заключается в паразитной емкости элементов и трасс внутри микросхемы. При заряде конденсатора на нем запасается энергия C*V^2/2, где С – емкость; V – изменение напряжения. Чем чаще изменяется логический уровень элемента, тем больше энергии циркулирует через ключевые элементы, что вызывает выделение тепла, ведь «ключи» имеют довольно большое внутреннее сопротивление во включенном состоянии.
Второй прием стал применяться относительно недавно, как дополнение к первому - в некоторых случаях можно снижать рабочую частоту простаивающих узлов, что не вызовет потери производительности. Коль скоро снизили частоту, то можно пропорционально к ней поснизить и рабочее напряжение. Чем меньше напряжение и частота, тем ниже как мощность потребления, так и «фоновый» ток утечки по полупроводниковому кристаллу.
Рассмотрим один пример. Положим, в некоторой шине был уровень «0» и требуется передать логическую единицу.
На данном рисунке отмечены основные элементы передатчика:
- 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 = усыпили;
- (сон);
- Аппаратное прерывание = разбудили.
реклама
При описывании состояний процессора я упорно избегал определения «С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») путем изменения (понижения) частоты их работы. При этом снижается как производительность, так и мощность потребления. Довольно неприятно терять скорость работы, но разве она кому-то нужна, если процессор практически ничего не делает?
Тестирование процессора в номинальном режиме
реклама
Для начала надо протестировать процессор в номинальном режиме, и записать результаты. Желательно дополнительно сделать скриншоты.
Вот что получилось у меня с Ryzen 5 1600 AF (аббревиатура AF означает процессор на архитектуре Zen+, мало чем отличающийся от Ryzen 5 2600).
Чтобы исключить влияние Load-Line Calibration я выбрал такой его уровень, который дает минимальный разброс напряжений под нагрузкой. Для материнской платы MSI B450-A PRO MAX уровень LLC составил 4. Также я зафиксировал напряжение vSOC на 1.0125 В, а CLDO_VDDP на 0.7 В.
В тесте AIDA64 процессор потребляет около 75 ватт, частота держится на 3600 МГц, напряжение примерно 1.1 В.
Энергопотребление процессора я буду смотреть по параметрам CPU Package Power (SMU) и Core+SoC Power (SVI2 TFN). На форумах ведутся споры, какой из этих параметров точнее показывает потребление процессора, я же буду ориентироваться на максимальный показатель.
В тесте OCCT процессор потребляет около 84 ватта, частота держится на 3600 МГц, напряжение примерно 1.1 В
Производительность процессора в Cinebench R20 составила 2726 pts.
Состояния питания 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. Краткий обзор:
- G0/S0: Компьютер работает, не спит.
- G1: Sleeping.
- G1/S1: Power on Suspend. Состояние системы сохраняется, питание процессора и кэшей поддерживается.
- G1/S2: Процессор отключен, кэши сброшены.
- G1/S3: Standby или Suspend to RAM (STR). Оперативная память остается практически единственным компонентом с питанием.
- G1/S4: Hibernation или Suspend to Disk. Все сохраняется в энергонезависимую память, все системы обесточиваются.
Вот поддерживаемые состояния ACPI.
Каков предел энергопотребления процессора?
Это во многом зависит от процессора, но для процессора E3-1245 v5 @ 3.50 ГГц расчетная тепловая мощность (Thermal Design Power, TDP) составляет 80 ватт. Это среднее значение, которое процессор может выдерживать бесконечно долго (Power Limit, PL1 на изображении ниже). Системы охлаждения должны быть рассчитаны на это значение, чтобы быть надежными. Фактическое энергопотребление процессора может быть выше в течение короткого промежутка времени (состояния PL2, PL3, PL4 на изображении ниже). TDP измеряется при нагрузке высокой вычислительной сложности (худший случай), когда все ядра работают на базовой частоте (3.5 ГГц).
Как видно на изображении выше, процессор в состоянии PL2 потребляет больше энергии, чем заявлено в TDP. Процессор может находиться в этом состоянии до 100 секунд, а это достаточно долго.
Тестовый стенд
- Материнская плата: GIGABYTE GA-Z77X-UD3H (Z77, LGA 1155, rev. 1.0, BIOS версия F11);
- Процессор: Intel Core i7-3570K @4.2 ГГц;
- Оперативная память: 2 х 4 Гбайта DDR-III 1333 МГц Hynix Original (DDR3-1800, 9-9-10);
- Накопитель SSD: RAID0 2х (CRUCIAL M4 CT064M4SSD2, 64 Гбайт), полоса 32 Кбайт;
- Накопитель HDD1: Western Digital VelociRaptor WD1500HLFS-01G6U (150 Гбайт, 10000 об/мин);
- Накопитель HDD2: Western Digital EADS WD15EADS-00P8B0 (1.5 Тбайт, 5400 об/мин);
- Операционная система: Windows 7 х64 SP1;
- RAMDISK: Primo Ramdisk, версия 5.5.0.
Остальные компоненты оказывают небольшое влияние на получаемые результаты, а потому вряд ли стоит их указывать.
Оглавление
P-состояния, управляемые операционной системой
В этом случае операционная система знает о P-состояниях и конкретном состоянии, запрошенным ОС. Проще говоря, операционная система выбирает рабочую частоту, а напряжение подбирается процессором в зависимости от частоты и других факторов. После того, как P-состояние запрошено записью в моделезависимый регистр (подразумевается запись 16 бит в регистр IA32_PERF_CTL), напряжение изменяется до автоматически вычисленного значения и тактовый генератор переключается на заданную частоту. Все ядра имеют одно общее P-состояние, поэтому невозможно установить P-состояние эксклюзивно для одного ядра. Текущее P-состояние (рабочий режим) можно узнать, прочитав информацию из другого моделезависимого регистра — IA32_PERF_STATUS.
Смена P-состояния мгновенна, поэтому в секунду можно выполнять множество переходов. Это отличает от переходов C, которые выполняются дольше и требуют энергетических затрат.
Комбинации состояний ACPI G/S и С-состояний процессора
Приятно видеть все комбинации в таблице:
В состоянии G0/S0/C8 системы процессора запущены, но все ядра отключены.
В G1 (S3 или S4) некорректно говорить про С-состояния (это касается как CC-состояний, так и PC-состояний), так как процессор полностью обесточен.
Для G3 не существует S-состояний. Система не спит, она физически отключена и не может проснуться. Ей необходимо сначала получить питание.
P-состояния, управляемые оборудованием
В этом случае ОС знает об аппаратной поддержке P-состояний и отправляет запросы с указанием нагрузки. В запросах не указывается конкретное P-состояние или частота. На основе информации от ОС, а также других факторов и ограничений оборудование выбирает подходящее P-состояние.
Я хочу рассказать об этом подробнее в следующей статье, но сейчас я поделюсь с вами своими мыслями. Мой домашний компьютер работает в этом режиме, я узнал это, проверив IA32_PM_ENABLE. Максимальный (но не гарантированный) уровень производительности — 39, минимальный — 1. Можно предположить, что существует 39 P-состояний. На данный момент уровень 39 установлен ОС как минимальный и как максимальный, потому что я отключил динамическое изменение частоты процессора в ядре.
Управление напряжением
Значительная часть контроллера питания находится в самом процессоре и он может отслеживать и корректировать напряжения по тем законам, которые ему нужны. Вторая часть контроллера располагается на материнской плате, как оно было всегда, но теперь ее функции несколько изменились. Ранее процессор указывал источнику питания выставить нужное ему напряжение и полагал, что это будет выполнено. После перехода на VR12 ситуация изменилась, микросхема контроллера постоянно «отчитывается» о текущих режимах работы (напряжение, ток, температура), а управление процессором условий его работы осуществляется крайне оперативно.
Посмотрим, как же происходит изменение напряжения:
В данном случае изображен процесс повышения напряжения с низкого (простой) в нормальное значение (активный). Изначально был выставлении VID для состояния простоя и для повышения напряжения процессор начинает увеличивать VID (идентификатор напряжения, а не само напряжение) на «1» с небольшой выдержкой между сменой числа. При этом полезно знать две характеристики – размер «шага» по напряжению и «время установления», необходимое на стабилизацию напряжения. Можно вычислить и привести конкретные значения dV и dT, но в этом нет необходимости, существует обобщенный параметр «SlewRate». Он указывает скорость нарастания напряжения в единицу времени. Для контроллера указывается его две разновидности:
Контроллер может управлять напряжением с различной скоростью и эти два параметра задают свойства для двух разных режимов работы.
- «Fast Slew Rate» настраивается в зависимости от особенностей и возможностей преобразователя. В спецификации VR12 указано, что эта настройка должна быть не медленнее 10 мВ / мкс (за одну микросекунду напряжение поменяется на 10 мВ, за 10 мкс на 100 мВ и т.д.).
- «Slow Slew Rate» в четыре раза медленнее «Fast Slew Rate», что означает скорость изменения 2.5 мВ/мкс.
реклама
Время для времени установки нового напряжения можно получить по следующему соотношению:
Для сглаживания пульсаций и бросков тока потребления процессора по шине питания устанавливается множество конденсаторов высокого качества. В последние несколько лет основным элементом является электролитический конденсатор с твердым диэлектриком. Кроме положительных свойств в виде низкого последовательного сопротивления (ESR) и способности долго работать при большом импульсном токе, это принесло и недостатки – сниженная номинальная емкость и концентрированная встроенная последовательная индуктивность (ESL).
Из приведенной выше формулы вытекает ряд интересных наблюдений, стоит на них остановиться. Вполне очевидно, что время установки напряжения зависит от величины изменения напряжения и той скорости, с которой преобразователь это напряжение устанавливает, но вот часть «RC» явно указывает на то, что процессор прекрасно осведомлен о напряжении на шине питания. К тому же, «R» есть не что иное, как широко известное «LLC» (Load Line Calibration). Технически оно является выходным сопротивлением преобразователя. Обычно данный параметр настраивается в BIOS и общепринятое мнение гласит – ставь его «сильнее», чтобы напряжение процессора не снижалось под нагрузкой.
Подпишитесь на наш канал в Яндекс.Дзен или telegram-канал @overclockers_news - это удобные способы следить за новыми материалами на сайте. С картинками, расширенными описаниями и без рекламы.
Как центральный процессор может сокращать собственное энергопотребление? Основы этого процесса — в статье.
Центральный процессор (CPU) спроектирован на бесконечно долгую работу при определенной нагрузке. Практически никто не проводит вычисления круглые сутки, поэтому большую часть времени он не работает на расчетном максимуме. Тогда какой смысл держать его включенным на полную мощность? Здесь стоит задуматься об управлении питанием процессора. Эта тема включает в себя оперативную память, графические ускорители и так далее, но я собираюсь рассказать только про CPU.
Если вы знаете про C-состояния (C-states), P-состояния (P-states) и то, как процессор переходит между ними, то, возможно, в этой статье вы не увидите ничего нового. Если это не так, продолжайте читать.
Я планировал добавить реальные примеры из ОС Linux, но статья становилась все больше, так что я решил приберечь это для следующей статьи.Основные источники информации, использованные в этом тексте:
Как я могу узнать состояние процессора?
Существует не так много приложений, которые могут выводить эту информацию. Но вы можете использовать, например, CoreFreq.
Здравствуй, хабра-человек.
Как известно, Microsoft очень хорошо потрудилась над своим последним детищем по имени Windows 7 и внесла много различных нововведений, об одном из которых я и хочу рассказать. Особенно актуально, я думаю, это будет для владельцев ноутбуков и нетбуков, но и пользователи настольных систем так же могут получить профит.
Как известно, самое большое новшество в «семерке» (после GUI) — это переработанная подсистема ACPI. Тут и нормальная поддержка многоядерных систем, и управление питанием устройств, мониторинга аппаратных средств, да и много чего еще, но одна очень интересная возможность остается за кадром — речь идет об энергопотреблении и управлении ядрами многоядерных/многопроцессорных систем.
Windows 7 позволяет управлять электропитанием процессоров, а так же назначать политики активности/простоя ядер.
При работе на многоядерных процессорах производится постоянная ротация потоков между ядрами и система переносит поток с более загруженных на менее загруженные ядра, что обеспечивает равномерную загрузку всех ядер, но и не менее равномерное энергопотребление, приводит к потере производительности и повышению энергопотребления, а это сказывается в первую очередь на сроке работы от аккумулятора. Сегодня я попытаюсь «восстановить справедливость» штатными средствами ОС.В Windows 7 и Windows 2008 R2, была реализована функция «Processor performance core parking» или по нашему — «Система парковки ядра», которая оставляет выполнение процесса на том ядре, на котором он начался, до полного его завершения. Такой подход позволяет получить более динамичную систему и значительно снизить потребление энергии.
В отличии от штатного режима работы, когда процессы постоянно переносятся с одного ядра на другое, равномерно загружая ЦП, Система парковки позволяет подключать ядра по мере необходимости, стараясь сложить все задачи на минимальное количество ядер (в идеале на одно).Пример: На четырех-ядерном процессоре в период простоя будет использоваться только одно ядро, остальные будут запаркованы и отключены, а в период нагрузки будут подключены остальные ядра.
Читайте также: