Core Ratio Limit — что это, сколько ставить?

Позволяет задать максимальный множитель определенного ядра при работе технологии Turbo Boost.
Перед названием Core Ratio Limit идет цифра — это номер ядра (core).
Настройка активна только если выбрано Per Core в CPU Core Ratio.
- Auto — будет выставлено стандартное значение.
- 8..Max — значение указывается вручную.
Присутствуют некоторые тонкости:

Опция в биосе материнки ASUS Rog (Republic of Gamers):

Core Ratio Limit — простыми словами
По факту данная опция позволяет указать, какой будет множитель у конкретного ядра процессора (CPU) при активации турборежима.
Сперва разберемся — турбо режим, это когда процессор повышает частоту при высоких нагрузках. Однако повышение частоты зависит от процессора, обычно повышается частота только одного ядра, у остальных — повышается меньше или вообще нет. Поэтому настройка опции учитывает также настройку других ядер.
При помощи множителя можно регулировать частоту процессора. Например представим процессор 3 ГГц. Данная частота представляет из себя множитель x30. x1 — это соответственно 100 МГц. Если указать множитель x40 — будет частота 4 ГГц, получается разгон. В опции Core Ratio Limit — вы указываете максимальный множитель для конкретного ядра, который активируется при включении турборежима, соблюдая тонкости настройки.
Указывать вручную можно по разным причинам, например чтобы еще больше увеличить эффективность турборежима или наоборот — снизить, чтобы уменьшить нагрев.
Надеюсь данная информация оказалась полезной. Удачи и добра, до новых встреч друзья!
CPU core ratio
Синонимы:
— CPU Ratio (CMOS Setting)
— CPU Clock Multiplier
— Multiplier Factor
— Adjust CPU Ratio
— CPU Frequency Multiple(Multiplier)
— CPU Ratio Selection
— CPU Frequency Ratio
— CPU Multiplier
— Multiplier Factor
— Ratio CMOS Setting
— CPU clock ratio
Влияющие на скорость работы компьютера (разгон)
материал № 7513
Назначение параметра: Данный параметр устанавливает множитель частоты центрального процессора.
Возможные варианты значений:
Auto — Автоматическое определение множителя системой.
Sync All Cores — Установка единого множителя для всех ядер центрального процессора.
Per Core — Установка множителя индивидуально для каждого ядра.
Особенности:
Для ручной установки множителя частоты, необходимо, чтобы множитель был разблокирован в самом центральном процессоре (Это процессоры Intel с суффиксом K, все современные процесоры AMD Ryzen и Threadtripper). Хотя, может быть возможность частичного изменения множителя того процессора, в котором он заблокирован. Например: материнская плата Asrock Z77OC Formula позволяет изменять множитель процессора Intel Core i7-3770 со штатных 34х до 41х, увеличив его тактовую частоту до 4,1 ГГц.
Рекомендации по разгону на материнских платах ASUS ROG Maximus VI
В данном материале приведены рекомендации по разгону на материнских платах ASUS линейки ROG Maximus VI (Intel Z87, Haswell).
Автор перевода и GreenTech Reviews не несут ответственности за вышедшие из строя комплектующие в результате установки неверных параметров. Данный материал несёт ознакомительный характер.

Оперативная память
При использовании двух модулей памяти устанавливайте их в красные слоты (расположены ближе к процессору).
iGPU (встроенное графическое ядро)
Встроенное графическое ядро при работе выделяет тепло. Логично, что при его отключении вы можете добиться лучших результатов разгона. Используйте PCI-Express видеокарту и в BIOS отключите (Disabled) уфнкцию iGPU Multi-Monitor Support для отключения графического ядра.
Охлаждение процессора
Используйте только самые лучшие системы охлаждения, т.к. процессоры в исполнении LGA1150 несколько горячее, чем могли бы быть и при больших нагрузках возможно срабатывание защиты (Thermal Throttling). При разгоне строго рекомендуется использовать такие системы охлаждения, которые обдували бы радиаторы на подсистеме питания. Или же обеспечить их обдув другими вентиляторами.
Процессоры Haswell очень чувствительны к температуре. Чем лучше вы их охлаждаете, тем сильнее можете разогнать. Экспериментально доказано, что при отрицательных температурах результаты разгона впечатляют даже при разумных значениях напряжений. Если вы планируете собрать систему, например, с фреоновой системой охлаждения, то обязательно позаботьтесь о изоляции электронных компонентов от конденсата. Температуру процессора можете смотреть в утилите CoreTemp.
Теперь можно переходить к рекомендациям по настройке системы в BIOS.
UEFI BIOS

На Maximus VI Extreme предустановлено 5 профилей настроек разгона. Они могут стать основой для разгона вашего экземпляра процессора — надо будет только немного скорректировать параметры.
Установите параметр Ai Overclock Tuner в значение Manual, чтобы получить доступ к управлению BCLK. Можете установить режим X.M.P. для установки всех основных параметров оперативной памяти в соответствием с характеристиками, заявленными производителем. Данный режим также может быть выбран в качестве базового, затем его настройки могут быть скорректированы.

CPU Strap устанавливает разные значения страпов для процессора. Это позволит разогнать BCLK до максимально возможных для вашего процессора значений.
Связь между частотами BCLK, PCIE и DMI такая: PEG Frequency = DMI Controller Frequency = 100 x (BCLK / CPU Strap).
Помните, что для разных процессоров работоспособные страпы могут отличаться.
Опция Source Clock Tuner будет недоступна, если значение CPU Strap не установлена в фиксированное значение.
Параметр PLL Selection может быть установлен в режим Self Biased Mode (SB-PLL), что скажется на лучшем разгоне BCLK (базовой частоты), но может ухудшиться работа PCI-E 3.0 из-за возрастания фазового дрожания цифрового сигнала (джиттера) PCI-E. Пользователь может установить режим Inductance/Capacitance Mode (SB-LC), чтобы минимизировать джиттер PCI-E для лучшей совместимости с PCI-E 3.0 устройствами.
Параметр Filter PLL может быть установлен в режим High BCLK Mode для достижения высоких значений BCLK, но это грозит увеличением джиттера. Такой режим работы обычно требуется, чтобы установить BCLK свыше 170 МГц. Если вам не нужны такие значения, то смело ставьте режим Low BCLK Mode.

ASUS MultiCore Enhancement надо включить (Enabled), чтобы система автоматически поднимала частоту процессора до максимального значения в соответствии с вашими настройками, когда они превышают стандартные значения.
Internal PLL Overvoltage надо включить (Enabled) для наибольшего разгона по множителю. Но также помните, что работа S3/S4 может приводить к невозможности работы некоторых модулей оперативной памяти.
Параметр CPU bus speed: DRAM speed ratio может быть установлен 100:100 или 100:133. Выбор одного из эти соотношений может быть полезным для установки точной частоты оперативной памяти. При соотношении частот DMI/PEG 1:1, при увеличении частоты DMI/PEG на 1%, частота памяти увеличится также на 1%.
Включение Xtreme Tweaking может добиться увеличения производительности в старых бенчмарках.
CPU Graphics Max. Ratio рекомендуется ставить на минимально возможное значение (25), чтобы встроенное графическое ядро не потребляло много энергии и не выделяло много тепла.

EPU Power Saving Mode рекомендуется выключить (Disabled), чтобы система не сбрасывала частоты и напряжения в режиме простоя.
Fully Manual Mode — эксклюзивный режим от ASUS, благодаря которому можно вручную настроить шесть ключевых напряжений на процессор. В этом режиме процессор не снизит ни одно из шести напряжений во время простоя, даже если включены EIST или C-States. Если вам нужно энергосбережение, то надо выключить эту опцию.

Три наиболее важных напряжения CPU Core Voltage, CPU Graphics Voltage, CPU Cache Voltage можно установить в режим ручной настройки (Manual), чтобы стали доступны опции CPU Core Voltage Override, CPU Graphics Voltage Override и CPU Cache Voltage Override. В этом режиме работы внутренний регулятор напряжений подаёт точное напряжение на CPU Vcore, CPU Graphics и CPU Cache. Этот режим начнёт работать как только значения Voltage Override превысят значения Auto. В этом режиме напряжения во время простоя не снизятся, даже если включены EIST или C-States.

Параметр Offset Mode открывает режим Offset Mode Sign для изменения напряжений CPU Core Voltage Offset, CPU Graphics Voltage Offset и CPU Cache Voltage Offset. Чтобы установить уровень смещения напряжения, изменяйте эти параметры. Режим Auto представляет собой настройку от профессиональных инженеров ASUS. Если изменить напряжение на минимальный шаг +-0.001 В, то вы получите напряжение по умолчанию.

В режиме Adaptive Mode будет доступен режим Offset Mode и дополнительный режим Additional Turbo Mode Voltage для CPU Vcore, CPU Graphics и CPU Cache. Адаптивный режим можно считать расширением оффсетного режима. Дополнительно заданное напряжение будет активно во время работы Turbo Boost. Режим Auto представляет собой настройку от профессиональных инженеров ASUS. Если изменить напряжение на минимальный шаг +-0.001 В, то вы получите напряжение по умолчанию.

Отключение функции SVID Support прекращает взаимодействие процессора с внешним регулятором напряжения. При разгоне рекомендуется значение Disabled.
Разделение напряжений на Initial CPU Input Voltage и Eventual CPU Input Voltage позволятее более точно задать напряжения до и после прохождения POST. Это позвляет «неудачным» процессорам пройти POST с более высоким напряжением и снизить его для дальнейшей работы.

CPU Spread Spectrum надо выключать (Disabled) при разгоне процессора.
BCLK Recovery надо включить (Enabled) при разгоне процессора, чтобы система могла загрузиться в BIOS в безопасном режиме при некорректно выставленных настройках частоты.

CPU Load-Line Calibration можно установить на максимальный уровень (8) для того, чтобы напряжение не проседало при нагрузке на процессор в разгоне. Уровень можно снизить для снижения энергопотребления и тепловыделения, если система остаётся стабильной.
Параметр CPU Voltage Frequency может быть установлен в режим «Manual», чтобы выбрать фиксированную частоту. Чем выше частота, тем стабильнее входное напряжение (CPU Input Voltage). Увеличение этой частоты может дать увеличение разгона BCLK, но всё зависит от экземпляра процессора (некоторым может требоваться меньшая частота для больших значений BCLK). Настоятельно рекомендуется включить Enable VRM Spread Spectrum или Enable Active Frequency Mode, если вы не намерены устанавливать фиксированное значение частоты процессора.
VCCIN MOS Volt Control можно увеличить для повышения стабильности, но и нагрев будет усиливаться. Если выставить значение Active VGD, то VCCIN MOS Volt Control будет динамически подстраиваться в зависимости от загрузки процессора.
CPU Power Phase Control надо установить в значение Extreme, чтобы были активны все фазы. Иначе во время простоя некоторые фазы неактивны. Это может позволить увеличить разгон по частоте.
CPU Power Duty Control надо установить в значение Extreme. В таком режиме предпочтение отдаётся подаче напряжения на iVR, а не балансу с температурой. В таком режиме можно получить чуть больший разгон.
CPU Current Capability устанавливаем 140%, чтобы сдвинуть порог срабатывания защиты от перегрузки по току. Это позволит увеличить разгон.
Значение CPU Power Thermal Control можно увеличить, если у вас проблемы с перегревом питания. Но настоятельно рекомендуется не изменять данный параметр. Если у вас проблемы из-за перегрева, то лучше поставить дополнительное охлаждение на радиатор подсистемы питания.
CPU Input Boot Voltage — начальное напряжение от подсистемы питания (Extreme Engine DIGI+ III) на интегрированный контроллер напряжений (FIVR — Fully Integrated Voltage Regulator), которое используется до того, как загружается BIOS. Это напряжение активно до того, как применяется напряжение Initial CPU Input Voltage, заданное из Extreme Tweaker. Тщательный подбор данного напряжения может помочь в достижении максимальной частоты процессора.
CPU Current Capability в значении 130% сдвигает порог срабатывания защиты от перегрузки по току для DRAM VRM. Способствует увеличению разгона оперативной памяти.
DRAM Voltage Frequency в Manual позволяет вручную настроить частоту VRM. Чем выше частота, тем стабильнее напряжение vDDR, что позволит добиться большего разгона памяти (не забываем, что для каждой планки разгон разный).

DRAM Power Phase Control в значении Extreme не допускает отключения фаз питания памяти. Это может позволить увеличить разгон памяти или увеличить стабильность работы, если модули памяти установлены во всех слотах.
Long Duration Packet Power Limit определяет максимальное значение для срабатывания троттлинга когда потребляемая мощность превышает определенный уровень. Можно сказать, что это первый уровень защиты процессора от повреждения. По умолчанию, это значение TDP от Intel. Если оставить в режиме «Auto», то будет установлено значение, рекомендуемое экспертами ASUS (OC Expert Team).
Package Power Time Window — значение в секундах, которое указывает сколько процессору дозволено работать с превышением TDP (то значение, которое мы задали в Long Duration Package Power Limit). Максимально возможное значение — 127.
Short Duration Package Power Limit указывает максимально возможное потребление энергии при очень кратковременных нагрузках, чтобы избежать нестабильности системы. Это можно считать вторым уровнем защиты процессора. Intel считает нормальным значение 1.25 от Long Duration Package Power Limit. Хотя по спецификации Intel для срабатывания Short Duration Package Power Limit кратковременные нагрузки могут быть не более 10 мс, материнские платы ASUS могут выдерживать гораздо большее время.
CPU Integrated VR Current Limit определяет максимальный ток от CPU Integrated Voltage Regulator при экстремально высоких нагрузках. Максимальное значение 1023.875 по сути отключает снятие лимита для iVR, который отключает троттлинг из-за превышения стандартных параметров тока при разгоне.

Frequency Tuning Mode определяет скорость работы процессора с iVR. Значение +6% обеспечит более стабильную подачу всех шести основных напряжений. Снижение этого параметра может снизить температуру на несколько градусов.
Thermal Feedback определяет будет ли процессор троттлить при перегреве внешней подсистемы питания. Эта настройка определяет будет ли работать защита от перегрева подсистемы питания. Если отключаете эту защиту, то настоятельно рекомендуется контроллировать температуру радиатора.
CPU Integrated VR Fault Management рекомендуется выключить, если повышаете напряжение вручную. Отключение может быть полезно при разгоне.
CPU Integrated VR Efficiency Management рекомендуется установить в режим High Performance, чтобы увеличить разгонный потенциал. Режим Balanced принесёт небольшую экономию энергии.

Power Decay Mode отвечает за энергосбережение в простое. При разгоне рекомендуется выключать (Disabled).
Idle Power-in Response при разгоне рекомендуется устанавливать в режим Regular. Режим Fast устанавливается для снижения энергопотребления.
Idle Power-out Response при разгоне рекомендуется устанавливать в режим Fast, что позволяет подавать на процессор чуть более высокое напряжение с наименьшими задержками.
Параметр Power Current Slope при значении LEVEL-4 сдвигает время троттлинга чуть дальше.
Power Current Offset определяет смещение параметра Power Current Slope. Значение -100% сдвигает время троттлинга процессора.
Power Fast Ramp Response определяет насколько быстро должен реагировать iVR на запрос напряжение процессором. Чем выше значение, тем быстрее будет реакция. Можно установить значение 1.5 для улучшения разгона.
Power Saving Level 1 Threshold определяет минимальный уровень энергопотребления, когда процессор должен запустить троттлинг. Установите 0 для отключения этой функции.
Power Saving Level 2 Threshold — аналогично пункту выше.
Power Saving Level 3 Threshold — аналогично пункту выше.

VCCIN Shadow Voltage — напряжение, которое подаётся от внешней подсистемы питания на внутренний контроллер питания во время прохождения POST. Это напряжение активно между CPU Input Voltage и Eventual CPU Input voltage. В режиме Auto напряжение будет задано автоматически, не выше и не ниже безопасных порогов.
Termination Anti-Aliasing рекомендуется включить (Enabled) для улучшения разгона.
PLL Termination Voltage (Initial / Reset / Eventual) рекомендуется менять при экстремальном разгоне при отрицательных температурах. Номинальное значение 1.2 В. Безопасные напряжения — до 1.25 В и выше 1.6 В. Не устанавливайте напряжение между 1.25 В и напряжением iVR, чтобы избежать быстрой деградации процессора.
При разгоне BCLK свыше 160 Мгц не забывайте настроить напряжения PLL Termination Reset Voltage и Eventual PLL Termination Voltage на одинаковый уровень с Eventual CPU Input Voltage или выше. Например, если Eventual CPU Input Voltage равно 1.9 В, то PLL Termination Reset Voltage и Eventual PLL Termination Voltage должны быть 1.9 В или выше для достижения оптимального эффекта.
Если вы не планируете разгонять BCLK свыше 160 МГц, то PLL Termination Voltage надо снизить до 1.1 или 1.0 В. Проще говоря, установите это значение до 1.25 В или на равне с CPU Input Voltage для достижения оптимального результата.
X-Talk Cancellation Voltage можно увеличить, если система работает нестабильно (например, BSOD 0124). Но эффект будет противоположным, если Max. Vcore Voltage работает под режимом LN2 — в этом случае уменьшение напряжение увеличит стабильность. По умолчанию — 1.00 В.
Cancellation Drive Strength управляет режимом работы X-Talk Cancellation Voltage.
PCH ICC Voltage — напряжение на интегрированный генератор тактов. По умолчанию — 1.2 В.
Для высокой частоты DMI (>=115 МГц) — пробуйте 1.2500 В или ниже.
Для низкой частоты DMI ( = 120 МГц).
DMI De-emphasis Control можно изменить вручную для лучшего разгона DMI. Но значение +6 является оптимальным.
Параметр SATA Drive Strength может быть настроен вручную для улучшения стабильности работы SATA. По умолчанию — 0. Можно пробовать менять в обе стороны.
CPU PCIE Controller в режиме Disabled отключает встроенный в процессор PCIEx16 контроллер для увеличения производительности в 2D бенчмарках. В таком случае рабочим остаётся только слот PCIE_x4_1.
GEN3 Preset в режиме Auto является оптимальным значением. Но можете попробовать все три предустановленных профиля и выбрать самый производительный. Особенно это полезно при тестировании конфигураций SLI или CrossFireX.
PLX 0.9V Core Voltage / PLX 1.8V AUX Voltage — управление напряжением на PLX PEX8747 (мост PCIE 3.0).
PCIE Clock Amplitude можете настроить вручную, подобрав наилучший режим при высокой частоте PCIe (из-за высокой частоты BCLK). Чаще всего, выше — лучше.
Internal Graphics (встроенное графиеское ядро) желательно отключить для улучшения разгона.
Рекомендуется отключить все неиспользуемые устройства и контроллеры для увеличения стабильности системы в разгона и вообще для достижения наилучших результатов.
Некоторые параметры рекомендуется оставлять в режиме Auto, доверившись профессионалам из команды ASUS.
Данная статья является вольным переводом официальной статьи ASUS ROG.
Если вы нашли какую-либо неточность, то сообщите об этом в официальном сообществе ASUS Republic of Gamers (ROG) Россия или GreenTech Reviews.
Краткое руководство по управлению питанием процессора
Как центральный процессор может сокращать собственное энергопотребление? Подробно рассказываем об особенностях этого процесса в статье. Введение Центральный процессор (CPU) спроектирован на бесконечно долгую работу при определенной нагрузке. Практически никто не проводит вычисления круглые сутки, поэтому большую часть времени он не работает на расчетном максимуме. Тогда какой смысл держать его включенным на полную мощность? Здесь стоит […]

Как центральный процессор может сокращать собственное энергопотребление? Подробно рассказываем об особенностях этого процесса в статье.
Введение
Центральный процессор (CPU) спроектирован на бесконечно долгую работу при определенной нагрузке. Практически никто не проводит вычисления круглые сутки, поэтому большую часть времени он не работает на расчетном максимуме. Тогда какой смысл держать его включенным на полную мощность? Здесь стоит задуматься об управлении питанием процессора. Эта тема включает в себя оперативную память, графические ускорители и так далее, но я собираюсь рассказать только про CPU.
Если вы знаете про C-состояния (C-states), P-состояния (P-states) и то, как процессор переходит между ними, то, возможно, в этой статье вы не увидите ничего нового. Если это не так, продолжайте читать.
Я планировал добавить реальные примеры из ОС Linux, но статья становилась все больше, так что я решил приберечь это для следующей статьи.
Основные источники информации, использованные в этом тексте:
- Intel(R) Xeon Processor E3–1200 v5 Product Family Datasheets;
- Intel(R) Xeon Processor E3–1245 v5 Product Specification;
- Software Impact to Platform Energy-Efficiency (Intel White Paper);
- Intel(R) 64 and IA-32 Architectures Software Developer’s Manual;
- ACPI Specification v6.2;
- страница ACPI на Википедии;
- Linux Kernel Sources версии 4.13.0.
Все таблицы и изображения взяты из даташита, если не указано иного.
Особенности CPU
Согласно официальной странице продукта, мой процессор поддерживает следующие технологии:
- состояния простоя (Idle States);
- усовершенствованная технология Intel SpeedStep® (Enhanced Intel SpeedStep® Technology).
На этой странице вы можете видеть, что «Режим состояния простоя (C-состояния) используется для энергосбережения, когда процессор бездействует» и «Стандартная технология Intel SpeedStep® позволяет переключать уровень напряжения и частоты в зависимости от нагрузки на процессор».
Теперь выясним, что значит каждое из этих определений.
Как снизить энергопотребление процессора во время его работы?
На процессорах для массового использования (мы не берем в расчет вещи, которые возможны при их проектировании) для снижения потребляемой энергии можно реализовать один из сценариев:
- Сократить энергопотребление подсистемы (ядра или другого ресурса, такого как тактовый генератор или кэш) путем отключения питания (уменьшив напряжение до нуля).
- Снизить энергопотребление путем снижения напряжения и/или таковой частоты подсистемы и/или целого процессора.
Первый вариант легко понять: если питания нет, то и потребления не будет.
Второй вариант требует чуть больше объяснений. Энергопотребление интегральной схемы, которой является процессор, линейно пропорционально тактовой частоте и квадратично напряжению.

Примечание для тех, кто разбирается в цифровой электронике:
Pcpu = Pdynamic + Pshort circuit + Pleak
При работающем процессоре Pdynamic является наиболее важной составляющей, именно эта часть зависит линейно от частоты и квадратично от напряжения. Pshort circuit пропорционально частоте, а Pleak — напряжению.
Более того, напряжение и тактовая частота связаны линейной зависимостью.
Высокая производительность требует повышенной тактовой частоты и увеличения напряжения, что еще больше влияет на энергопотребление.
Каков предел энергопотребления процессора?
Это во многом зависит от процессора, но для процессора E3-1245 v5 @ 3.50 ГГц расчетная тепловая мощность (Thermal Design Power, TDP) составляет 80 ватт. Это среднее значение, которое процессор может выдерживать бесконечно долго (Power Limit, PL1 на изображении ниже). Системы охлаждения должны быть рассчитаны на это значение, чтобы быть надежными. Фактическое энергопотребление процессора может быть выше в течение короткого промежутка времени (состояния PL2, PL3, PL4 на изображении ниже). TDP измеряется при нагрузке высокой вычислительной сложности (худший случай), когда все ядра работают на базовой частоте (3.5 ГГц).

Как видно на изображении выше, процессор в состоянии PL2 потребляет больше энергии, чем заявлено в TDP. Процессор может находиться в этом состоянии до 100 секунд, а это достаточно долго.
Состояния питания (C-states) vs состояния производительности (P-states)
Вот два способа снизить энергопотребление процессора:
- отключить некоторые подсистемы;
- снизить напряжение/частоту.
Они достигаются с помощью:
- C-состояний;
- P-состояний.
С-состояния описывают первый способ снижения энергопотребления процессора, поэтому они называются состояниями простоя. Чтобы отключить какую-то подсистему, на ней ничего не должно выполняться, подсистема должна простаивать. Таким образом, С-состояние, C[X], означает, что одна или несколько подсистем процессора отключены.
P-состояния описывают второй случай. Подсистемы процессора работают, но не требуют максимальной производительности, поэтому напряжение и/или тактовая частота для этой подсистемы может быть снижена. Таким образом, P-состояния, P[X], обозначают, что некоторая подсистема (например, ядро), работает на заданной паре (частота, напряжение).
Так как большинство современных процессоров состоит из нескольких ядер, то С-состояния разделены на С-состояния ядра (Core C-states, CC-states) и на С-состояния процессора (Package C-states, PC-states). Причина появления PC-состояний очень проста. Существуют компоненты с общим доступом (например, общий кэш), которые могут быть отключены только после отключения всех ядер, имеющих доступ к этому компоненту. Однако мы в роли пользователя или программиста не можем взаимодействовать с состояниями пакета напрямую, но можем управлять состояниями отдельных ядер. Таким образом, управляя CC-состояниями, мы косвенно управляем и PC-состояниями.
Состояния нумеруются от нуля по возрастанию, то есть C0, C1… и P0, P1… Большее число обозначает большее энергосбережение. C0 означает, что все компоненты включены. P0 означает максимальную производительность, то есть максимальные тактовую частоту, напряжение и энергопотребление.
С-состояния
Вот базовые С-состояния (определенные в стандарте ACPI).
- 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 из этого состояния). Целевое резидентное значение обозначает минимальное время, которое ядро должно находиться в данном состоянии, чтобы оправдать энергетические затраты на переход в это состояние и обратно. Обратите внимание на логарифмический масштаб вертикальной оси. Задержки и минимальное время нахождения в состоянии увеличивается экспоненциально с увеличением номера состояния.

Примечание: Хотя состояния С9 и С10 включены в таблицу, они имеют 0 суб-состояний и поэтому не используются в моем процессоре. Остальные процессоры из семейства могут поддерживать эти состояния.
Состояния питания ACPI
Прежде чем говорить про P-состояния, стоит упомянуть про состояния питания ACPI. Это то, что мы, пользователи, знаем, когда используем компьютер. Так называемые глобальные системные состояния (G[Х]) перечислены в таблице ниже.

Также существует специальное глобальное состояние 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. Все сохраняется в энергонезависимую память, все системы обесточиваются.
Как показано на рисунке ниже, для моего процессора все С-состояния, упомянутые ранее, используются в G0/S0. Другими словами, при входе в состояние сна (G1) процессор выключается.

Вот поддерживаемые состояния ACPI.

Комбинации состояний ACPI G/S и С-состояний процессора
Приятно видеть все комбинации в таблице:

В состоянии G0/S0/C8 системы процессора запущены, но все ядра отключены.
В G1 (S3 или S4) некорректно говорить про С-состояния (это касается как CC-состояний, так и PC-состояний), так как процессор полностью обесточен.
Для G3 не существует S-состояний. Система не спит, она физически отключена и не может проснуться. Ей необходимо сначала получить питание.
Как программно запросить переход в энергосберегающее С-состояние?
Современный (но не единственный) способ запросить переход в энергосберегающее состояние — это использовать инструкцию MWAIT или инструкцию HLT. Это инструкции привилегированного уровня, и они не могут быть выполнены пользовательскими программами.
Инструкция MWAIT (Monitor Wait) заставляет процессор перейти в оптимизированное состояние (C-состояние) до тех пор, пока по указанному (с помощью другой инструкции, MONITOR) адресу не будет произведена запись. Для управления питанием MWAIT работает с регистром EAX. Биты 4-7 используются для указания целевого С-состояния, а биты 0-3 указывают суб-состояние.
Примечание: Я думаю, что на данный момент только AMD обладает инструкциями MONITORX/MWAITX, которые, помимо мониторинга записи по адресу, работают с таймером. Это еще называется Timed MWAIT.
Инструкция HLT (halt) останавливает выполнение, и ядро переходит в состояние HALT до тех пор, пока не произойдет прерывание. Это означает, что ядро переходит в состояние C1 или C1E.
Что вынуждает ядро входить в определенное С-состояние?
- В состояние С0 ядро входит при загрузке, когда происходит прерывание, или после записи по адресу памяти, который отслеживается инструкцией MWAIT.
- Состояния C1/C1E достижимы с помощью инструкций HLT и MWAIT.
- Войти в состояние С3 можно с помощью инструкции MWAIT. Затем кэши L1 и L2 сбрасываются в кэш верхнего уровня (LLC), и все тактовые генераторы процессора останавливаются. Тем не менее, ядро сохраняет свое состояние, так как не обесточено.
- Вход в состояние С6 возможен через инструкцию MWAIT. Ядро сохраняет состояние на выделенную SRAM и напряжение на ядре снижается до нуля. В этом состоянии ядро обесточено. При выходе из C6 состояние ядра восстанавливается из SRAM.
- Для C7 и C8 аналогично C6.
Хочу напомнить еще раз, я не затрагиваю гипертрединг в этом ответе.
Как отмечалось ранее, переходы между глубокими С-состояниями имеют высокие задержки и высокие энергетические затраты. Таким образом, такие переходы должны выполняться с осторожностью, особенно на устройствах, работающих от аккумуляторов.
Возможно ли отключить С-состояния (всегда использовать С0)?
Это возможно, но не рекомендуется. В даташите (секция 4.2.2, страница 64) есть примечание: «Долгосрочная надежность не гарантируется, если все энергосберегающие состояния простоя не включены». Поэтому вам не стоит отключать С-состояния.
Как прерывания влияют на процессор/ядро в состоянии сна?
Когда происходит прерывание, соответствующее ядро пробуждается и переходит в состояние С0. Однако, например Intel Xeon E3-1200 v5, поддерживает технологию Power Aware Interrupt Routing (PAIR), у которой есть два достоинства:
- для энергосбережения прерывание может быть переадресовано работающему ядру, чтобы не будить спящее ядро;
- для производительности прерывание может быть переадресовано от работающего на полную мощность ядра к простаивающему (С1) ядру.
P-состояния
P-состояния подразумевают, что ядро в состоянии С0, потому что ему требуется питание, чтобы выполнять инструкции. P-состояния позволяют изменять напряжение и частоту ядра (другими словами рабочий режим), чтобы снизить энергопотребление. Существует набор P-состояний, каждое из которых соответствует разных рабочим режимам (пары напряжение-частота). Наиболее высокий рабочий режим (P0) предоставляет максимальную производительность.
Процессор Intel Xeon E3–1200 v5 позволяет контролировать P-состояния из операционной системы (Intel SpeedStep® Technology) или оставить это оборудованию (Intel® Speed Shift Technology). Вся информация ниже специфична для семейства Intel Xeon E3-1200 v5, но я полагаю, это в той или иной степени актуально и для других современных процессоров.
P-состояния, управляемые операционной системой
В этом случае операционная система знает о P-состояниях и конкретном состоянии, запрошенным ОС. Проще говоря, операционная система выбирает рабочую частоту, а напряжение подбирается процессором в зависимости от частоты и других факторов. После того, как P-состояние запрошено записью в моделезависимый регистр (подразумевается запись 16 бит в регистр IA32_PERF_CTL), напряжение изменяется до автоматически вычисленного значения и тактовый генератор переключается на заданную частоту. Все ядра имеют одно общее P-состояние, поэтому невозможно установить P-состояние эксклюзивно для одного ядра. Текущее P-состояние (рабочий режим) можно узнать, прочитав информацию из другого моделезависимого регистра — IA32_PERF_STATUS.
Смена P-состояния мгновенна, поэтому в секунду можно выполнять множество переходов. Это отличает от переходов C, которые выполняются дольше и требуют энергетических затрат.
P-состояния, управляемые оборудованием
В этом случае ОС знает об аппаратной поддержке P-состояний и отправляет запросы с указанием нагрузки. В запросах не указывается конкретное P-состояние или частота. На основе информации от ОС, а также других факторов и ограничений оборудование выбирает подходящее P-состояние.
Я хочу рассказать об этом подробнее в следующей статье, но сейчас я поделюсь с вами своими мыслями. Мой домашний компьютер работает в этом режиме, я узнал это, проверив IA32_PM_ENABLE. Максимальный (но не гарантированный) уровень производительности — 39, минимальный — 1. Можно предположить, что существует 39 P-состояний. На данный момент уровень 39 установлен ОС как минимальный и как максимальный, потому что я отключил динамическое изменение частоты процессора в ядре.
Заметки про Intel® Turbo Boost
Поскольку TDP (расчетная тепловая мощность) — это максимальная мощность, которую процессор может выдержать, то процессор может повышать свою частоту выше базовой, при условии что энергопотребление не превысит TDP. Технология Turbo Boost может временно повышать энергопотребление до границы PL2 (Power Limit 2) на короткий промежуток времени. Поведение Turbo Boost может быть изменено через подсказки оборудованию.
Применима ли эта информация о C-состояниях и P-состояниях к мобильным и встраиваемым процессорам?
Для примера, недавний MacBook Air с процессором i5-5350U в основном поддерживает возможности, описанные выше (но я не уверен про P-состояния, контролируемые оборудованием). Я также смотрел документацию ARM Cortex-A, и, хотя там применяются другие термины, механизмы управления питанием выглядят похоже.
Как это все работает, например, на Linux?
На этот вопрос я отвечу в другой статье.
Как я могу узнать состояние процессора?
Существует не так много приложений, которые могут выводить эту информацию. Но вы можете использовать, например, CoreFreq.
Вот какую информацию можно получить (это не весь вывод).
$ ./corefreq-cli -s
Processor [Intel(R) Xeon(R) CPU E3-1245 v5 @ 3.50GHz]
|- Architecture [Skylake/S]
|- Vendor ID [GenuineIntel]
|- Microcode [ 198]
|- Signature [ 06_5E]
|- Stepping [ 3]
|- Online CPU [ 4/4 ]
|- Base Clock [100.12]
|- Frequency (MHz) Ratio
Min 800.94 [ 8 ]
Max 3504.10 [ 35 ]
|- Factory [100.00]
3500 [ 35 ]
|- Turbo Boost [UNLOCK]
1C 3904.57 < 39 >
2C 3804.45 < 38 >
3C 3704.33 < 37 >
4C 3604.22 < 36 >
|- Uncore [UNLOCK]
Min 800.94 < 8 >
Max 3904.57 < 39 >
…
Technologies:
|- System Management Mode SMM-Dual [ ON]
|- Hyper-Threading HTT [OFF]
|- SpeedStep EIST < ON>
|- Dynamic Acceleration IDA [ ON]
|- Turbo Boost TURBO < ON>
|- Virtualization VMX [ ON]
|- I/O MMU VT-d [OFF]
|- Hypervisor [OFF]
Performance Monitoring:
|- Version PM [ 4]
|- Counters: General Fixed
| 8 x 48 bits 3 x 48 bits
|- Enhanced Halt State C1E
|- C1 Auto Demotion C1A < ON>
|- C3 Auto Demotion C3A < ON>
|- C1 UnDemotion C1U < ON>
|- C3 UnDemotion C3U < ON>
|- Frequency ID control FID [OFF]
|- Voltage ID control VID [OFF]
|- P-State Hardware Coordination Feedback MPERF/APERF [ ON]
|- Hardware-Controlled Performance States HWP [ ON]
|- Hardware Duty Cycling HDC [ ON]
|- Package C-State
|- Configuration Control CONFIG [ LOCK]
|- Lowest C-State LIMIT [ 0]
|- I/O MWAIT Redirection IOMWAIT [Disable]
|- Max C-State Inclusion RANGE [ 0]
|- MWAIT States: C0 C1 C2 C3 C4 C5 C6 C7
| 0 2 1 2 4 1 0 0
|- Core Cycles [Present]
|- Instructions Retired [Present]
|- Reference Cycles [Present]
|- Last Level Cache References [Present]
|- Last Level Cache Misses [Present]
|- Branch Instructions Retired [Present]
|- Branch Mispredicts Retired [Present]
Power & Thermal Monitoring:
|- Clock Modulation ODCM
|- DutyCycle < 6.25%>
|- Power Management PWR MGMT [ LOCK]
|- Energy Policy Bias Hint [ 0]
|- Junction Temperature TjMax [ 0:100]
|- Digital Thermal Sensor DTS [Present]
|- Power Limit Notification PLN [Present]
|- Package Thermal Management PTM [Present]
|- Thermal Monitor 1 TM1|TTP [ Enable]
|- Thermal Monitor 2 TM2|HTC [Present]
|- Units
|- Power watt [ 0.125000000]
|- Energy joule [ 0.000061035]
|- Window second [ 0.000976562]Вот информация о ядре, включая информацию о драйвере idle.
$ ./corefreq-cli -k
Linux:
|- Release [4.15.0-45-generic]
|- Version [#48-Ubuntu SMP Tue Jan 29 16:28:13 UTC 2019]
|- Machine [x86_64]
…
Idle driver [@intel_idle]
|- State: POLL C1 C1E C3 C6 C7s C8
|- Power: -1 0 0 0 0 0 0
|- Latency: 0 2 10 70 85 124 200
|- Residency: 0 2 20 100 200 800 800$ ./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Эта статья является переводом.
Оригинальный текст по ссылке.