В последнее время сообщество любителей самостоятельной сборки ПК пронизано темой энергопотребления. У новейших восьмиядерных процессоров от Intel показатель TDP заявлен в 95 Вт, однако пользователи наблюдают, как те потребляют 150-180 Вт, что совершенно не имеет смысла. В этой инструкции мы объясним вам, почему это происходит, и почему это доставляет столько проблем авторам обзоров железа.
- Что такое TDP (Thermal Design Power, требования к теплоотводу)
- Значит, TDP ничего не значит? Почему это стало проблемой только сейчас?
- Тайные цифры, которых нет на упаковке
- Мир случайных чисел
- Так как же правильно, кому доверять, в чём разница?
- Сегодняшняя ситуация, и что мы можем с ней сделать
- Особенности CPU
- Как снизить энергопотребление процессора во время его работы?
- Состояния питания (C-states) vs состояния производительности (P-states)
- С-состояния
- Состояния питания ACPI
- Комбинации состояний ACPI G/S и С-состояний процессора
- Как программно запросить переход в энергосберегающее С-состояние?
- Что вынуждает ядро входить в определенное С-состояние?
- Как прерывания влияют на процессорядро в состоянии сна?
- P-состояния
- P-состояния, управляемые оборудованием
- Как я могу узнать состояние процессора?
- История Desktop-процессоров в разрезе TDP
- Небольшой экскурс в историю систем охлаждения
- Поведение процессора при перегреве
- Мобильные вычисления.
- Заключение
Что такое TDP (Thermal Design Power, требования к теплоотводу)
Для каждого процессора Intel гарантирует определённую рабочую частоту с определённой мощностью, часто имея в виду определённый кулер. Большая часть людей приравнивает TDP к максимальному энергопотреблению, учитывая, что в расчётах тепловая мощность процессора, которую необходимо рассеять, равна мощности, им потребляемой. И обычно TDP обозначает величину этой мощности. Но, строго говоря, TDP относится к возможностям кулера по рассеиванию энергии. TDP – это минимальная возможность кулера, гарантирующая указанную эффективность. Часть энергии рассеивается через сокет и материнскую плату, а значит, рейтинг кулера может быть ниже TDP, но в большинстве обсуждений TDP и энергопотребление обычно означали одно и то же: сколько энергии процессор потребляет под нагрузкой.
В рамках системы TDP можно установить в прошивке. Если процессор использовал TDP в качестве максимального ограничения по мощности, то мы бы увидели, как та же измерительная программа выдаёт подобные графики для процессоров высокой мощности с несколькими ядрами.
В последние годы Intel использовала именно такое определение TDP. Для любого заданного процессора Intel гарантировала рабочую частоту (базовую частоту) для конкретной мощности – TDP. Это значит, что процессор типа 65 Вт Core i7-8700, с обычной частотой 3,2 ГГц, и 4,7 ГГц в турбо-режиме, гарантированно будет потреблять до 65 Вт только при работе на частоте в 3,2 ГГц. Intel не гарантирует эффективной работы выше указанных 3,2 ГГц и 65 Вт.
Кроме базовых показателей, Intel также использует турбо-режим. Что-то вроде Core i7-8700 может показывать в турбо-режиме 4,7 ГГц, и потреблять при этом гораздо больше энергии, чем процессор, работающий на 3,2 ГГц. Турбо-режим для всех ядер на процессоре Core i7-8700 работает на частоте 4,3 ГГц – куда как больше гарантированной 3,2 ГГц. Ситуация усложняется, когда турбо-режимы не опускаются до базовой частоты. То есть, если процессор будет работать с постоянным превышением TDP, купленный вами кулер на 65 Вт (или тот, что шёл в комплекте) станет узким местом. Если вам нужно больше быстродействия, такой кулер надо выкинуть и взять что-то получше.
Однако производитель вам этого не сообщает. Если охлаждения для турбо-режимов будет недостаточно, а процессор достигнет температурного потолка, то большая часть современных процов перейдут в режим ограничения мощности, уменьшив быстродействие с тем, чтобы оставаться в рамках заданного энергопотребления. И в результате быстрый процессор не достигает пределов своих возможностей.
Значит, TDP ничего не значит? Почему это стало проблемой только сейчас?
За последнее десятилетие методика использования термина TDP не поменялась, а вот процессоры начали по-другому использовать свой энергетический бюджет. Недавнее появление шести- и восьмиядерных потребительских процессоров с частотами за 4 ГГц означает, что новые процессоры с большой загрузкой превышают заявленное TDP. В прошлом мы видели, как четырёхядерные процессоры с обозначенным рейтингом в 95 Вт использовали только 50 Вт даже под полной нагрузкой в турбо-режиме. И если мы добавляем ядра, а обозначение TDP на упаковке не меняем, то что-то должно поменяться.
Тайные цифры, которых нет на упаковке
Внутри каждого процессора Intel определяет несколько уровней энергии на основе возможностей и ожидаемых рабочих режимов. Однако все эти уровни энергии и возможности можно подстраивать на уровне прошивки, в результате чего OEM-производители решают, как эти процессоры будут работать в их системе. В итоге значение потребления энергии процессором в системе оказывается весьма размытым показателем.
Для простоты можно следить за тремя важными значениями. Intel называет их PL1 (уровень энергии 1), PL2 (уровень энергии 2) и T (Tau).
PL1 – эффективное равномерное ожидаемое потребление энергии в долгосрочной перспективе. По сути, PL1 обычно определяется, как TDP процессора. То есть, если TDP равно 80 Вт, то PL1 равно 80 Вт.
PL2 – краткосрочное максимальное потребление энергии процессором. Эта величина выше PL1, и в это состояние процессор переходит под нагрузкой, что позволяет ему использовать турбо-режимы вплоть до максимального значения PL2. Это значит, что если Intel определила несколько турбо-режимов у процессора, они будут работать, только когда PL2 доходит до максимального энергопотребления. В режиме PL1 турбо не работает.
Tau – временная переменная. Она определяет, как долго процессор должен оставаться в режиме PL2 перед тем, как откатиться на PL1. Tau не зависит от мощности и температуры процессора (ожидается, что при достижении температурного ограничения будет использоваться другой набор сверхнизких значений напряжения и частоты, а система PL1/PL2 перестаёт работать).
Вот официальные определения от Intel:
Давайте разберём ситуацию большой нагрузки на процессор.
Сначала он начинает работу в режиме PL2. Если нагрузка однопоточная, мы должны достичь верхнего значения турбо, которое обозначено в спецификации. Обычно энергопотребление одного ядра не приблизится к значению PL2 всего чипа. Если мы будем продолжать нагружать ядра, процессор отреагирует, уменьшая частоту турбо-режима в соответствии с по-ядерными значениями, определяемыми Intel. Если энергопотребление процессора достигает значения PL2, то его частота изменяется так, чтобы не выходить за рамки PL2.
Когда система находится под серьёзной нагрузкой долгий промежуток времени, «Tau» секунд, прошивка должна перейти на PL1 как на новое ограничение по мощности. Таблицы турбо перестают применяться – они работают только с режимом PL2.
Если потребление выходит за пределы PL1, тогда частота и напряжение изменяются так, чтобы потребление энергии оставалось в этих пределах. То есть процессор целиком уменьшает частоту от состояния PL2 до состояния PL1 на время работы под нагрузкой. Это значит, что температура процессора должна уменьшиться, и это должно увеличить время жизни процессора.
Режим PL1 работает, пока не исчезнет нагрузка, и ядро не перейдёт в состояние бездействия на определённое количество времени (обычно до 5 секунд). После этого режим PL2 снова может быть включён при появлении другой большой нагрузки.
Приведём примеры некоторых величин – Intel перечисляет несколько вариантов в спецификациях различных процессоров. Для примера я взял Core i7-8700K. Для этого проца верно следующее:
PL1 = TDP = 95 Вт
PL2 = TDP * 1. 25 = 118. 75 Вт
Tau = 8 сек
В данном случае система должна суметь разогнаться до 119 Вт на восемь секунд, а потом снова откатится назад до 95 Вт. Так работает уже несколько поколений процессоров Intel, и по большей части, это не имело особого значения, поскольку энергопотребление процессора целиком часто оказывалось сильно ниже значения PL1 даже под полной нагрузкой.
Однако вся ерунда начинается, когда в игру вступают производители материнских плат, поскольку PL1, PL2 и Tau можно настраивать в прошивке. К примеру, на графике выше можно снять ограничения с PL2, а PL1 назначить 165 Вт и 95 Вт.
Мир случайных чисел
В основном я буду говорить о потребительской электронике. Часто PL1, PL2 и Tau тщательно контролируются в таких ограниченных по охлаждению условиях, как ноутбуки или небольшие ПК. Я знаком с несколькими мощными, и в то же время стильными вариантами ПК, у которых PL2 также приравнивали к TDP, чтобы процессор смог немного разогнаться, но не до такой степени, чтобы нагрузка одного-двух ядер выходила за пределы TDP.
Однако в наших обзорах CPU после распространения шестиядерных процессоров мы часто начали видеть цифры гораздо большие, чем PL1 или PL2, и это потребление продолжается сколь угодно долго, если только не выходит за пределы ограничений температуры. Почему это происходит?
В любом современном BIOS, в особенности у основных производителей мат. плат, будут присутствовать настройки по ограничению мощности (краткосрочное и долгосрочное) и длительности. В большинстве случаев по умолчанию пользователю неизвестно, в какое значение они установлены, поскольку там будет написано Auto, что является кодовым обозначением «мы знаем, какое значение им назначить, не волнуйтесь». Производители запишут величины в память и будут их использовать, но пользователь увидит только Auto. В результате можно назначить PL2 в 4096 Вт и сделать Tau очень большим, к примеру, 65535, или -1 (бесконечность – зависит от варианта BIOS). Это означает, что CPU без перерыва будет работать в режиме турбо, пока не превысит температурные ограничения.
Зачем производители так поступают? Тому может быть много причин, хотя конкретные причины у конкретных производителей могут разниться.
Во-первых, это означает, что пользователь может поддерживать турбо-режим постоянно, и каждое ядро будет работать в режиме турбо каждую секунду. Результаты измерений быстродействия будут доставать до небес, в обзорах или когда пользователя меряются показателями, всё выглядит прекрасно,
Во-вторых, продукты для этого и разрабатываются. Intel часто с каждым запуском определяет спецификацию мат. платы по умолчанию (у них даже были свои материнки, которые они продавали в розницу), с определённым количеством фаз питания и с ожидаемым временем жизни. Производители, очевидно, могут внедрять свои варианты: больше фаз питания, более мощные фазы, особый подвод питания для улучшения эффективности, и т. Если их плата может поддерживать турбо-режим всех ядер беспрерывно, то почему бы и нет?
В-третьих, производители более дорогих моделей плат знают, что энтузиасты будут использовать для них улучшенные системы охлаждения. Если процессор потребляет более 160 Вт, а у пользователя есть приличная система охлаждения, тогда турбо-режим на всех ядрах улучшит впечатление от продукта. Стандарты Intel определяются для рекомендованных компанией кулеров.
Так как же правильно, кому доверять, в чём разница?
Intel назначает стандарты для своих запчастей. PL1, PL2, Tau, схема материнки, настройки прошивки – для всего есть значения по умолчанию, рекомендованные Intel. Некоторые из них публичные, например, те, что Intel указывает в документах, некоторые – конфиденциальные (и Intel нам о них не расскажет, как бы мы ни упрашивали). Однако это всё же рекомендованные значения. А по итогам, производители материнских плат могут делать всё, что им заблагорассудится. И они так и делают.
В результате, к примеру, мне тестировать оборудование из-за этого становится сложнее. Разным пользователям захочется, чтобы наши настройки были:
1. Рекомендованными Intel,
2. Как из коробки,
3. Вывернуты на максимум.
И, естественно, рекомендации Intel дадут куда как меньшие показатели, чем «из коробки», а вариант «вывернуты на максимум» говорит сам за себя.
Стоит отметить, что до сих пор во всех тестах во всех обзорах CPU железо запускалось на настройках «из коробки», а не «рекомендованных Intel».
Чтобы дать некий контекст по значениям измерений, мы использовали мощный CPU и
получили следующие результаты в 25-30 секундном тесте с полной нагрузкой:
AnandTechPL2TauPL1Result
Unlimited 4096W999s4096W100%
Intel Spec, 165W207W8s165W98%
Constant 165W165W1s165W94%
Intel Spec, 95W118W8s95W84%
Constant 95W95W1s95W71%
В последнее время было замечено, что некоторые производители материнских плат меняют свою стратегию по PL1/PL2/Tau, и урезают значение Tau до чего-то разумного, вроде 30 секунд. При запуске измерений скорости на таких материнских платах, пользователи получают результаты меньше, чем обычно, хотя эти результаты оказываются ближе к спецификациям Intel.
Дело в том, что когда на материнских платах стоит значение Auto, производитель обычно не раскрывает точную величину этого значения. В результате описывать работу такого оборудования очень тяжело. А ещё эти значения могут меняться в зависимости от установленного процессора.
Мы обычно проводим тестирования с настройками «из коробки», за исключением памяти, с которой мы используем значения, рекомендованные производителем. Мы считаем, что это наиболее честный способ сообщать читателям о том, на какую скорость они смогут рассчитывать, когда практически никакие настройки не менялись. В реальности это обычно означает, что PL2 установлено в какое-то очень большое значение, а Tau – в очень долгое. Мы постоянно сталкиваемся с режимом турбо, пока температура остаётся в установленных пределах.
Сегодняшняя ситуация, и что мы можем с ней сделать
Давно хотел написать подобную статью, по меньшей мере, с момента запуска Kaby Lake. Большая часть процессоров в потребительских материнских платах работает с неограниченным PL2, и это считалось нормальным годами. И только по результатам тестирования Core i9-9900K мы начали замечать нечто странное. В нашей статье на прошлой неделе по поводу нового Xeon E написано, что наша материнская плата Supermicro буквально следует рекомендациям от Intel. Может показаться очевидным, что более коммерческая/серверная плата будет следовать спецификациям от Intel, но вживую я лично видел такое впервые. Очевидно, что потребительские платы по таким спецификациям не работают, и не работали. Я бы сказал, что собственные результаты тестирования от Intel (и результаты тестирования процессоров Intel от AMD) на потребительских материнках тоже не соответствуют спецификациям от Intel.
Так что нам с этим делать? Я бы сказал, что Intel надо размещать на коробках два обозначения мощности:
- TDP пиковое для PL2
- TDP долговременное для PL1.
Таким образом Intel и другие смогут объяснить пиковое потребление и базовую частоту.
Если пользователи хотят, чтобы потребительские материнские платы изменились, то это будет сложнее сделать. Все производители хотят опередить друг друга, поэтому мы сталкиваемся с такими вещами, как опция Multi-Core Turbo, включённая по умолчанию. Производители предпочитают путь «неограниченного PL2», поскольку это позволяет им пролезать на вершины чартов быстродействия. А вот в ноутбуках с ограниченными возможностями по охлаждению часто заданы свои варианты PL1, PL2 и Tau, и часто они строго соответствуют этим параметрам.
Вопрос в том, насколько спецификации от Intel важны для настольных процессоров от Intel? Если нам надо следовать этим рекомендациям буквально, может, мы сделаем ещё один шаг, и будем использовать только стоковые кулеры?
Как центральный процессор может сокращать собственное энергопотребление? Основы этого процесса — в статье.
Центральный процессор (CPU) спроектирован на бесконечно долгую работу при определенной нагрузке. Практически никто не проводит вычисления круглые сутки, поэтому большую часть времени он не работает на расчетном максимуме. Тогда какой смысл держать его включенным на полную мощность? Здесь стоит задуматься об управлении питанием процессора. Эта тема включает в себя оперативную память, графические ускорители и так далее, но я собираюсь рассказать только про CPU.
Если вы знаете про C-состояния (C-states), P-состояния (P-states) и то, как процессор переходит между ними, то, возможно, в этой статье вы не увидите ничего нового. Если это не так, продолжайте читать. Я планировал добавить реальные примеры из ОС Linux, но статья становилась все больше, так что я решил приберечь это для следующей статьи.
Основные источники информации, использованные в этом тексте:
- Intel® Xeon Processor E3–1200 v5 Product Family Datasheets;
- Intel® Xeon Processor E3–1245 v5 Product Specification;
- Software Impact to Platform Energy-Efficiency (Intel White Paper);
- Intel® 64 and IA-32 Architectures Software Developer’s Manual;
- ACPI Specification v6.2;
- страница ACPI на Википедии;
Все таблицы и изображения взяты из даташита, если не указано иного.
Особенности CPU
официальной странице продукта
- состояния простоя (Idle States);
- усовершенствованная технология Intel® SpeedStep (Enhanced Intel® SpeedStep Technology).
На этой странице вы можете видеть, что «Режим состояния простоя (C-состояния) используется для энергосбережения, когда процессор бездействует» и «Стандартная технология Intel® SpeedStep позволяет переключать уровень напряжения и частоты в зависимости от нагрузки на процессор».
Теперь выясним, что значит каждое из этих определений.
Как снизить энергопотребление процессора во время его работы?
- Сократить энергопотребление подсистемы (ядра или другого ресурса, такого как тактовый генератор или кэш) путем отключения питания (уменьшив напряжение до нуля).
- Снизить энергопотребление путем снижения напряжения и/или таковой частоты подсистемы и/или целого процессора.
Первый вариант легко понять: если питания нет, то и потребления не будет.
Второй вариант требует чуть больше объяснений. Энергопотребление интегральной схемы, которой является процессор, линейно пропорционально тактовой частоте и квадратично напряжению.
Примечание для тех, кто разбирается в цифровой электронике: Pcpu = Pdynamic + Pshort circuit + Pleak. При работающем процессоре Pdynamic является наиболее важной составляющей, именно эта часть зависит линейно от частоты и квадратично от напряжения. Pshort circuit пропорционально частоте, а Pleak — напряжению.
Более того, напряжение и тактовая частота связаны линейной зависимостью.
Высокая производительность требует повышенной тактовой частоты и увеличения напряжения, что еще больше влияет на энергопотребление.
Состояния питания (C-states) vs состояния производительности (P-states)
- отключить некоторые подсистемы;
- снизить напряжение/частоту.
Они достигаются с помощью:
- C-состояний;
- P-состояний.
Так как большинство современных процессоров состоит из нескольких ядер, то С-состояния разделены на С-состояния ядра (Core C-states, CC-states) и на С-состояния процессора (Package C-states, PC-states). Причина появления PC-состояний очень проста. Существуют компоненты с общим доступом (например, общий кэш), которые могут быть отключены только после отключения всех ядер, имеющих доступ к этому компоненту. Однако мы в роли пользователя или программиста не можем взаимодействовать с состояниями пакета напрямую, но можем управлять состояниями отдельных ядер. Таким образом, управляя CC-состояниями, мы косвенно управляем и PC-состояниями.
С-состояния
- C0: Active, процессор/ядро выполняет инструкции. Здесь применяются P-состояния, процессор/ядро могут работать в режиме максимальной производительности (P0) или в режиме энергосбережения (в состоянии, отличном от P0).
- C1: Halt, процессор не выполняет инструкций, но может мгновенно вернуться в состояние С0. Поскольку процессор не работает, то P-состояния не актуальны для состояний, отличных от С0.
- C2: Stop-Clock, схож с C1, но требует больше времени для возврата в C0.
- С3: Sleep. Возврат в C0 требует ощутимо большего времени.
Современные процессоры имеют гораздо больше C-состояний. Согласно даташиту, семейство процессоров Intel® Xeon® E3-1200 v5 поддерживает состояния C0, C1, C1E (C1 Enhanced), C2, C3, C6, C7 и C8. Состояния C1 и C1E поддерживаются только ядрами, а состояние C2 — только процессором. Остальные состояния поддерживаются и ядром, и процессором.
Примечание: Из-за технологии Intel® Hyper-Threading существуют также С-состояния потоков. Хотя отдельный поток может работать с С-состояниями, изменения в энергопотреблении происходят, только когда ядро входит в нужное состояние. В данной статье тема C-состояний на потоках рассматриваться не будет.
Вот описание состояний из даташита:
Примечание: LLC обозначает Last Level Cache, кэш последнего уровня и обозначает общий L3 кэш процессора.
Визуальное представление состояний:
Последовательность C-состояний простыми словами:
- Нормальная работа при C0.
- Сначала останавливается тактовый генератор простаивающего ядра (С1).
- Затем локальные кэши ядра (L1/L2) сбрасываются и снимается напряжение с ядра (С3).
- Как только все ядра отключены, общий кэш (L3/LLC) ядер сбрасывается и процессор (почти) полностью может быть обесточен. Я говорю «почти», потому что, по моим предположениям, какая-то часть должна быть активна, чтобы вернуть процессор в состояние С0.
Как вы могли догадаться, CC-состояния и PC-состояния зависят друг от друга, поэтому некоторые их комбинации невозможны. Следующий рисунок демонстрирует это.
Однако если ядро работает (C0), то единственное состояние, в котором может находиться процессор, — C0. С другой стороны, если ядро полностью выключено (C8), процессор может находиться в C0, если другое ядро работает.
Примечание: Intel Software Developer’s Manual упоминает про суб-C-состояния (sub C-state). Каждое С-состояние состоит из нескольких суб-С-состояний. После изучения исходного кода модуля ядра intel_idle я понял, что состояния C1 и C1E являются состоянием С1 с подтипом 0 и 1 соответственно.
Число подтипов для каждого из восьми С-состояний (0. 7) определяется с помощью инструкции CPUID. Для моего процессора утилита cpuid выводит следующую информацию:
MONITOR/MWAIT (5):
smallest monitor-line size (bytes) = 0x40 (64)
largest monitor-line size (bytes) = 0x40 (64)
enum of Monitor-MWAIT exts supported = true
supports intrs as break-event for MWAIT = true
number of C0 sub C-states using MWAIT = 0x0 (0)
number of C1 sub C-states using MWAIT = 0x2 (2)
number of C2 sub C-states using MWAIT = 0x1 (1)
number of C3 sub C-states using MWAIT = 0x2 (2)
number of C4 sub C-states using MWAIT = 0x4 (4)
number of C5 sub C-states using MWAIT = 0x1 (1)
number of C6 sub C-states using MWAIT = 0x0 (0)
number of C7 sub C-states using MWAIT = 0x0 (0)
Замечание из инструкции Intel: «Состояния C0. C7 для расширения MWAIT — это специфичные для процессора C-состояния, а не ACPI C-состояния». Поэтому не путайте эти состояния с ACPI C-состояниями, они явно связаны и между ними есть соответствие, но это не одно и то же.
Я создал гистограмму, представленную ниже, из исходного кода драйвера intel_idle для моего процессора (модель 0x5e). Подписи горизонтальной оси:
Имя C-состояния: специфичное для процессора состояние: специфичное суб-состояние.
Вертикальная ось обозначает задержку выхода и целевые резидентные значения из исходного кода. Задержка выхода используется для оценки влияния данного состояния в реальном времени (то есть сколько времени потребуется для возвращения в С0 из этого состояния). Целевое резидентное значение обозначает минимальное время, которое ядро должно находиться в данном состоянии, чтобы оправдать энергетические затраты на переход в это состояние и обратно. Обратите внимание на логарифмический масштаб вертикальной оси. Задержки и минимальное время нахождения в состоянии увеличивается экспоненциально с увеличением номера состояния.
Константы задержок выхода и целевых резидентных значении C-состояний в исходном коде intel_idle
Примечание: Хотя состояния С9 и С10 включены в таблицу, они имеют 0 суб-состояний и поэтому не используются в моем процессоре. Остальные процессоры из семейства могут поддерживать эти состояния.
Состояния питания ACPI
Существует несколько состояний сна (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. Все сохраняется в энергонезависимую память, все системы обесточиваются. - G1/S1: Power on Suspend. Состояние системы сохраняется, питание процессора и кэшей поддерживается.
- G1/S2: Процессор отключен, кэши сброшены.
- G1/S3: Standby или Suspend to RAM (STR). Оперативная память остается практически единственным компонентом с питанием.
- G1/S4: Hibernation или Suspend to Disk. Все сохраняется в энергонезависимую память, все системы обесточиваются.
- G2/S5: Soft Off. Как механическое отключение, но компоненты, необходимые для пробуждения компьютера, потребляют минимум энергии. Состояние системы не сохраняется, поэтому нужна перезагрузка для возврата в G0.
- G3: Mechanical Off. Блок питания отключен. Лишь компоненты, типа часов реального времени (RTC), работают, потому что у них есть собственный источник питания в виде маленькой батарейки. Очевидно, состояние системы не сохраняется, поэтому нужна перезагрузка для возврата в G0.
Как показано на рисунке ниже, для моего процессора все С-состояния, упомянутые ранее, используются в G0/S0. Другими словами, при входе в состояние сна (G1) процессор выключается.
Вот поддерживаемые состояния ACPI.
Комбинации состояний ACPI G/S и С-состояний процессора
В состоянии G0/S0/C8 системы процессора запущены, но все ядра отключены.
В G1 (S3 или S4) некорректно говорить про С-состояния (это касается как CC-состояний, так и PC-состояний), так как процессор полностью обесточен.
Для G3 не существует S-состояний. Система не спит, она физически отключена и не может проснуться. Ей необходимо сначала получить питание.
Как программно запросить переход в энергосберегающее С-состояние?
Инструкция MWAIT (Monitor Wait) заставляет процессор перейти в оптимизированное состояние (C-состояние) до тех пор, пока по указанному (с помощью другой инструкции, MONITOR) адресу не будет произведена запись. Для управления питанием MWAIT работает с регистром EAX. Биты 4-7 используются для указания целевого С-состояния, а биты 0-3 указывают суб-состояние.
Примечание: Я думаю, что на данный момент только AMD обладает инструкциями MONITORX/MWAITX, которые, помимо мониторинга записи по адресу, работают с таймером. Это еще называется Timed MWAIT.
Инструкция HLT (halt) останавливает выполнение, и ядро переходит в состояние HALT до тех пор, пока не произойдет прерывание. Это означает, что ядро переходит в состояние C1 или C1E.
Что вынуждает ядро входить в определенное С-состояние?
- В состояние С0 ядро входит при загрузке, когда происходит прерывание, или после записи по адресу памяти, который отслеживается инструкцией MWAIT.
- Состояния C1/C1E достижимы с помощью инструкций HLT и MWAIT.
- Вход в состояние С6 возможен через инструкцию MWAIT. Ядро сохраняет состояние на выделенную SRAM и напряжение на ядре снижается до нуля. В этом состоянии ядро обесточено. При выходе из C6 состояние ядра восстанавливается из SRAM.
- Для C7 и C8 аналогично C6.
Хочу напомнить еще раз, я не затрагиваю гипертрединг в этом ответе.
Как отмечалось ранее, переходы между глубокими С-состояниями имеют высокие задержки и высокие энергетические затраты. Таким образом, такие переходы должны выполняться с осторожностью, особенно на устройствах, работающих от аккумуляторов.
Как прерывания влияют на процессорядро в состоянии сна?
- для энергосбережения прерывание может быть переадресовано работающему ядру, чтобы не будить спящее ядро;
- для производительности прерывание может быть переадресовано от работающего на полную мощность ядра к простаивающему (С1) ядру.
P-состояния
Процессор Intel® Xeon® E3–1200 v5 позволяет контролировать P-состояния из операционной системы (Intel® SpeedStep Technology) или оставить это оборудованию (Intel® Speed Shift Technology). Вся информация ниже специфична для семейства Intel® Xeon® E3-1200 v5, но я полагаю, это в той или иной степени актуально и для других современных процессоров.
P-состояния, управляемые оборудованием
Я хочу рассказать об этом подробнее в следующей статье, но сейчас я поделюсь с вами своими мыслями. Мой домашний компьютер работает в этом режиме, я узнал это, проверив IA32_PM_ENABLE. Максимальный (но не гарантированный) уровень производительности — 39, минимальный — 1. Можно предположить, что существует 39 P-состояний. На данный момент уровень 39 установлен ОС как минимальный и как максимальный, потому что я отключил динамическое изменение частоты процессора в ядре.
Как я могу узнать состояние процессора?
Вот какую информацию можно получить (это не весь вывод).
Вот информация о ядре, включая информацию о драйвере idle.
/corefreq-cli -g
Cycles State(%)
PC02 1121802850 32. 49
PC03 1298328500 37. 83
PC06 0 0. 00
PC07 0 0. 00
PC08 0 0. 00
PC09 0 0. 00
PC10 0 0. 00
PTSC 3503877892
UNCORE 150231
Мониторинг счетчиков С-состояний (для ядра):
/corefreq-cli -c
CPU Freq(MHz) Ratio Turbo C0(%) C1(%) C3(%) C6(%) C7(%) Min TMP:TS Max
#00 355. 67 ( 3. 55) 10. 15 10. 28 26. 43 0. 04 11. 49 51. 77 41 / 45:55 / 56
#01 355. 64 ( 3. 55) 10. 15 10. 38 19. 21 0. 68 15. 44 54. 28 42 / 45:55 / 55
#02 389. 95 ( 3. 89) 11. 13 11. 35 15. 67 0. 16 18. 17 54. 65 40 / 43:57 / 54
#03 365. 38 ( 3. 65) 10. 43 10. 61 19. 77 0. 18 13. 93 55. 51 40 / 43:57 / 54
Averages: Turbo C0(%) C1(%) C3(%) C6(%) C7(%) TjMax: Pkg:
10. 46 10. 66 20. 27 0. 27 14. 76 54. 05 100 C 46 C
/corefreq-cli -V
CPU Freq(MHz) VID Vcore
#00 130. 70 0 0. 0000
#01 120. 08 0 0. 0000
#02 124. 18 0 0. 0000
#03 103. 46 9784 1. 1943
Package Cores Uncore Memory
Energy(J): 13. 415222168 2. 248596191 0. 000000000 0. 951416016
Power(W) : 26. 830444336 4. 497192383 0. 000000000 1. 902832031
Те, кто знаком с принципом Ландауэра, в курсе, что при проведении необратимых вычислений обязательно выделяется тепло, не меньшее чем k*T*ln2, а разбирающиеся в электронике подтвердят, что на самом деле эта величина на порядки больше в связи с наличием сквозного тока при переключении КМОП пары, паразитных токов утечки и сопротивления металлических межсоединений. Что же касается рядовых пользователей, то они просто привыкли к тому, что процессоры при работе греются и выделяют тепло.
Итак, знакомьтесь — TDP. Как видно из заголовка, TDP расшифровывается как «Thermal Design Power». Эта величина показывает максимальное количество тепла, которое должна рассеивать система охлаждения чипа. Производители принимают ее равной максимальной мощности, которую потребляет чип. Потребляемую мощность проще измерить, и в конце концов вся она (за исключением пренебрежимо-малого электромагнитного излучения) будет рассеяна в виде тепла.
История Desktop-процессоров в разрезе TDP
В таблице ниже представлены величины TDP для знаковых (на мой взгляд) моделей процессоров Intel для настольных ПК.
По логике вещей, при уменьшении топологических норм тепловыделение должно снижаться. Однако число транзисторов на кристалле росло значительно быстрее, чем снижалось тепловыделение отдельной КМОП пары. Это и стало причиной закономерности, которая хорошо прослеживается в таблице. Печально известная гонка гигагерц привела к тому, что Pentium 4 поставил своеобразный антирекорд, в своей 3. 8 Ггц модификации перевалив за TDP в 100 Вт. Очевидно, с такой ситуацией мириться было невозможно: компьютер все более походил на бомбу замедленного действия. И выводы были сделаны — тепловыделение пошло на убыль. И пусть вас не смущает большое TDP топовых процессоров типа Core i7-3930K. Это совсем особенные представители процессорного семейства и те, кто готовы заплатить за них кругленькую сумму, наверняка побеспокоятся и о соответствующем охлаждении. В целом же TDP процессоров Intel за последнее время существенно уменьшилось и продолжает сокращаться.
Небольшой экскурс в историю систем охлаждения
Уже в эпоху первого процессора Pentium, компьютеры стали использовать активное охлаждение, которое представляло собой смешных размеров радиатор и такой же «пропеллер».
на фото Intel Pentium 200 MMX со снятым вентилятором
В эпоху процессоров Pentium 4 получили свое развитие монструозные кулеры и альтернативные способы охлаждения: жидкостные, криогенные, нитрогенные. Для интересующихся историей, приведу ссылку на статью «Кулеры миллениума» за авторством товарища LIKE OFF от 2001 года.
В наше время низкий шум для ПК имеет большое значение, многие энтузиасты стараются собрать компьютер максимально бесшумным, в идеале с полностью пассивным охлаждением. Это вполне посильная задача. В таких случаях чаще всего используют процессор с TDP не более 40W. Можно выбрать модель с большим TDP и понизить ее частоту и напряжение на ядре. (Мощность пропорциональна частоте и квадрату напряжения питания). В результате может получиться что-то подобное:
При TDP больше 50W обойтись без активного охлаждения уже сложно. Даже если процессорное охлаждение пассивно, нужна хорошая циркуляция воздуха внутри корпуса.
Поведение процессора при перегреве
У тех, чье знакомство с компьютерами началось достаточно давно, наверняка осталось в памяти легендарное видео от команды Tom’s Hardware. (Приводить ссылку на него я не могу по идеологическим соображениям). Эти ребята выяснили, что случится с процессором, если он во время работы лишится системы охлаждения. Ситуация на самом деле вполне возможная: кулер может отвалиться при транспортировке, или в системе охлаждения может сломаться вентилятор. Ну и наконец, наиболее часто встречающаяся проблема, когда термоинтерфейс между процессором и системой охлаждения со временем теряет свои теплопроводящие свойства. Что произойдет, когда температура процессора превысит предельную? Очевидно, ничего хорошего, но некоторая самозащита у процессора все-таки есть. Начиная с Pentium 4, при достижении температуры порядка 90°C включится так называемый throttling: процессор начнет пропускать такты, замедляя свою работу и снижая тепловыделение. Конечно, оставшись без охлаждения, процессор не сможет обеспечить даже мало-мальски приемлемой производительности.
Мобильные вычисления.
Для ноутбуков главный аспект TDP — это потребляемая мощность, ведь она оказывает непосредственный влияние на время автономной работы. TDP процессоров Atom, чаще всего применяемых в нетбуках, находится в диапазоне 2-10W, а большинства процессоров для ноутбуков — 15-40W. По моим оценкам, основанным на сетевых изысканиях, 15″ ноутбук с дискретной графикой и процессором с TDP 35W в целом потребляет около 80W. Можно оценить вклад процессора в общее энергопотребление ноутбука как 30-40%. Конечно, это верно только при максимальной нагрузке на процессор. Большую часть времени процессор отдыхает, в дело вступают технологии энергосбережения, и его доля в общем энергопотреблении уменьшается. Отметим, что несмотря на малое TDP мобильных процессоров, эффективное охлаждение внутри тесного корпуса реализовать подчас проблематично, поэтому перегрев у ноутбуков встречается даже чаще, чем у десктопов.
Заключение
В общих чертах я рассказал о TDP. Эту тему можно развить в двух направлениях: рассмотреть причины потребления мощности КМОП схем, к которым относятся процессоры, и рассказать о технологиях энергосбережения, применяющихся в современных процессорах Intel. Предлагаю проголосовать за один из моих комментариев к этой статье: «Технологии энергосбережения» и «Энергопотребление в КМОП схемах». Те, кто наберут больше голосов, определят следующую тему. Также в комментариях всячески приветствуются реальные истории о борьбе с температурой внутри компьютера, победах и поражениях в ней.