Cpu c states что это в биосе

от admin

Intel CPUs: P-state, C-state, Turbo Boost, CPU frequency, etc.

Ten years ago, most computers were desktop computers designed for best performances and their CPU frequency was fixed. Nowadays, most devices are embedded and use low power consumption processors like ARM CPUs. The power consumption now matters more than performance peaks.

Intel CPUs evolved from a single core to multiple physical cores in the same package and got new features: Hyper-threading to run two threads on the same physical core and Turbo Boost to maximum performances. CPU cores can be completely turned off (CPU HALT, frequency of 0) temporarily to reduce the power consumption, and the frequency of cores changes regulary depending on many factors like the workload and temperature. The power consumption is now an important part in the design of modern CPUs.

Warning! This article is a summary of what I learnt last weeks from random articles. It may be full of mistakes, don’t hesitate to report them, so I can enhance the article! It’s hard to find simple articles explaining performances of modern Intel CPUs, so I tried to write mine.

Tools used in this article

This article mentions various tools. Commands to install them on Fedora 24:

dnf install -y util-linux :

  • lscpu

dnf install -y kernel-tools :

sudo dnf install -y msr-tools :

  • rdmsr
  • wrmsr

Other interesting tools, not used in this article: i7z (sadly no more maintained), lshw, dmidecode, sensors.

The sensors tool is supposed to report the current CPU voltage, but it doesn’t provide this information on my computers. At least, it gives the temperature of different components, but also the speed of fans.

Example of Intel CPUs

My laptop CPU: /proc/cpuinfo

On Linux, the most common way to retrieve information on the CPU is to read /proc/cpuinfo. Example on my laptop:

"i7-3520M" CPU is a model designed for Mobile Platforms (see the "M" suffix). It was built in 2012 and is the third generation of the Intel i7 microarchitecture: Ivy Bridge.

The CPU has two physical cores, I disabled HyperThreading in the BIOS.

The first strange thing is that the CPU announces "2.90 GHz" but Linux reports 1.2 GHz on the first core, and 3.3 GHz on the second core. 3.3 GHz is greater than 2.9 GHz!

My desktop CPU: CPU topology with lscpu

The CPU i7-2600 is the 2nd generation: Sandy Bridge microarchitecture. There are 8 logical cores and 4 physical cores (so with Hyper-threading).

The lscpu renders a short table which helps to understand the CPU topology:

There are 8 logical CPUs (CPU 0..7 ), all on the same node (NODE 0) and the same socket (SOCKET 0). There are only 4 physical cores (CORE 0..3 ). For example, the physical core 2 is made of the two logical CPUs: 2 and 6.

Using the L1d:L1i:L2:L3 column, we can see that each pair of two logical cores share the same physical core caches for levels 1 (L1 data, L1 instruction) and 2 (L2). All physical cores share the same cache level 3 (L3).

P-states

A new CPU driver intel_pstate was added to the Linux kernel 3.9 (April 2009). First, it only supported SandyBridge CPUs (2nd generation), Linux 3.10 extended it to Ivybridge generation CPUs (3rd gen), and so on and so forth.

This driver supports recent features and thermal control of modern Intel CPUs. Its name comes from P-states.

The processor P-state is the capability of running the processor at different voltage and/or frequency levels. Generally, P0 is the highest state resulting in maximum performance, while P1, P2, and so on, will save power but at some penalty to CPU performance.

It is possible to force the legacy CPU driver (acpi_cpufreq) using intel_pstate=disable option in the kernel command line.

Idle states: C-states

C-states are idle power saving states, in contrast to P-states, which are execution power saving states.

During a P-state, the processor is still executing instructions, whereas during a C-state (other than C0), the processor is idle, meaning that nothing is executing.

  • C0 is the operational state, meaning that the CPU is doing useful work
  • C1 is the first idle state
  • C2 is the second idle state: The external I/O Controller Hub blocks interrupts to the processor.
  • etc.

When a logical processor is idle (C-state except of C0), its frequency is typically 0 (HALT).

The cpupower idle-info command lists supported C-states:

The cpupower monitor shows statistics on C-states:

Turbo Boost

In 2005, Intel introduced SpeedStep, a serie of dynamic frequency scaling technologies to reduce the power consumption of laptop CPUs. Turbo Boost is an enhancement of these technologies, now also used on desktop and server CPUs.

Turbo Boost allows to run one or many CPU cores to higher P-states than usual. The maximum P-state is constrained by the following factors:

  • The number of active cores (in C0 or C1 state)
  • The estimated current consumption of the processor (Imax)
  • The estimated power consumption (TDP — Thermal Design Power) of processor
  • The temperature of the processor

Example on my laptop:

The CPU base frequency is 2.9 GHz. If more than one physical cores is "active" (busy), their frequency can be increased up to 3.4 GHz. If only 1 physical core is active, its frequency can be increased up to 3.6 GHz.

In this example, Turbo Boost is supported and active.

Turbo Boost MSR

The bit 38 of the Model-specific register (MSR) 0x1a0 can be used to check if the Turbo Boost is enabled:

0 means that Turbo Boost is enabled, whereas 1 means disabled (no turbo). (The -f 38:38 option asks to only display the bit 38.)

If the command doesn’t work, you may have to load the msr kernel module:

Note: I’m not sure that all Intel CPU uses the same MSR.

intel_state/no_turbo

Turbo Boost can also be disabled at runtime in the intel_pstate driver.

Check if Turbo Boost is enabled:

where 0 means that Turbo Boost is enabled. Disable Turbo Boost:

CPU flag "ida"

It looks like the Turbo Boost status (supported or not) can also be read by the CPUID(6): "Thermal/Power Management". It gives access to the flag Intel Dynamic Acceleration (IDA).

The ida flag can also be seen in CPU flags of /proc/cpuinfo.

Read the CPU frequency

General information using cpupower frequency-info :

The frequency of CPUs is between 1.2 GHz and 3.6 GHz (the base frequency is 2.9 GHz on this CPU).

Get the frequency of CPUs: turbostat

It looks like the most reliable way to get a relialistic estimation of the CPUs frequency is to use the tool turbostat:

  • Avg_MHz: average frequency, based on APERF
  • Busy%: CPU usage in percent
  • Bzy_MHz: busy frequency, based on MPERF
  • TSC_MHz: fixed frequency, TSC stands for Time Stamp Counter

APERF (average) and MPERF (maximum) are MSR registers that can provide feedback on current CPU frequency.

Other tools to get the CPU frequency

It looks like the following tools are less reliable to estimate the CPU frequency.

In April 2016, Len Brown proposed a patch modifying cpuinfo to use APERF and MPERF MSR to estimate the CPU frequency: x86: Calculate MHz using APERF/MPERF for cpuinfo and scaling_cur_freq.

The tsc clock source logs the CPU frequency in kernel logs:

Conclusion

Modern Intel CPUs use various technologies to provide best performances without killing the power consumption. It became harder to monitor and understand CPU performances, than with older CPUs, since the performance now depends on much more factors.

It also becomes common to get an integrated graphics processor (IGP) in the same package, which makes the exact performance even more complex to predict, since the IGP produces heat and so has an impact on the CPU P-state.

I should also explain that P-state are "voted" between CPU cores, but I didn’t understand this part. I’m not sure that understanding the exact algorithm matters much. I tried to not give too much information.

Annex: AMT and the ME (power management coprocessor)

Computers with Intel vPro technology includes Intel Active Management Technology (AMT): "hardware and firmware technology for remote out-of-band management of personal computers". AMT has many features which includes power management.

Management Engine (ME) is the hardware part: an isolated and protected coprocessor, embedded as a non-optional part in all current (as of 2015) Intel chipsets. The coprocessor is a special 32-bit ARC microprocessor (RISC architecture) that’s physically located inside the PCH chipset (or MCH on older chipsets). The coprocessor can for example be found on Intel MCH chipsets Q35 and Q45.

More recently, the Intel Xeon Phi CPU (2016) also includes a coprocessor for power management. I didn’t understand if it is the same coprocessor or not.

CPU C-States — что это в биосе?

Приветствую уважаемые друзья! Сегодня мы рассмотрим предназначение одной опции, которая связана с работой процессора. Как всегда — я постараюсь написать все простыми словами, чтобы было понятно каждому, даже самому начинающему пользователю!

CPU C-States — что это в биосе?

Сразу короткий ответ: опция активирует поддержку энергосберегательных режимов процессора.

Кроме этого возможно будут доступны настройки активации типов режимов, то есть так бы сказать подрежимов. Просто C-States — это общее название энергосберегательных режимов, их существует несколько. В биосе может быть такая картина — после активации функции CPU C States Support могут стать доступные и другие опции, которые отвечают за поддержку немного разных режимов энергосбережения:

В биосе ASRock UEFI эта опция находится как видите в разделе Advanced\CPU Configuration.

Режимы работы процессора

Скажу сразу — что эти опции в биосе лучше не трогать или выставить значение Auto. Но вообще энергосберегающие режимы — это хорошо, потому что система будет меньше греться, меньше потреблять энергии, это особо актуально для ноутбуков.

Итак, я нашел информационную картинку-описание некоторых режимов работы процессора, смотрим (картинка правда большая, но зато инфа полезная):

PS: выше на картинке возможно данные уже устали, ведь появились новые процессоры, однако предназначение режимов — вряд ли изменилось.

Энергосберегающие режимы на практике

  1. Процессор в простое может снижать напряжение, из-за будет снижаться частота. Например у меня был проц Intel G3220, так его частота 3.00 ГГц, а мог скидывать до 800 МГц в простое.
  2. Минимальная частота процессора — это не только минимальное напряжение, но и низкий нагрев.
  3. В итоге — комп или ноутбук отдыхает. Температура падает, если это ноут — то его автономная работа в таком режиме увеличивается. Но частота может падать и немного, зависит от нагрузки, например при чтении она будет не полностью падать. Но даже в таком режиме снижается нагрев и потребление.
  4. При низкой частоте проца в принципе нагрузка на материнскую плату снижается, а это как бы увеличивает срок службы компьютера/ноутбука.
  5. Минус энергосберегающего режима. Есть мнение, что данный режим немного снижают производительность ПК. Незначительно. Как? Дело в том, что восстановление частоты занимает некие доли секунды, на практике это как микро-тормоза. Но чем мощнее проц, тем меньше таких тормоза, а то и вовсе могут отсутствовать. Но это не всегда, просто у меня так было — но почти незаметно, а если и есть, то длятся не более полсекунды. По факту мелочь.

Важно понимать, что все это может не работать. Почему? Из-за настроек электропитания Windows, в которых может в минимальном/максимальном состоянии процессора стоять 100%. Тогда проц будет постоянно работать на максимальной частоте. Открыть данные настройки можно так: Панель управления > значок Электропитание > напротив активной схемы нажимаем настройка > изменить дополнительные параметры > в самом низу раскрываем пункт Управление питанием процессора.

Заключение

  • CPU C-States — опция позволяет активировать энергосберегающие режимы процессора.

Надеюсь эта информация была полезной. Удачи и добра, до новых встреч друзья! и берегите себя!

Cpu c states что это в биосе

Процессоры Intel поддерживают несколько технологий для оптимизации энергопотребления. В этой статье (перевод [1]) дается обзор p-состояний (оптимизация напряжения питания и частоты CPU во время работы) и c-состояний (оптимизация потребления мощности, если ядро не выполняет ни одной инструкции).

[P-состояния]

Во время выполнения кода операционная система и CPU могут оптимизировать энергопотребление с помощью различных P-состояний (P это сокращение от «performance», что означает «производительность»). В зависимости от требований, CPU работает на разных частотах. Состояние P0 соответствует самой высокой частоте (с самым высоким напряжением питания).

Для процессоров Intel до архитектуры Haswell/Broadwell, желаемая частота (и соответствующее ей напряжение питания) указывается операционной системой путем записи соответствующих величин в специальные регистры процессора [2][3].

В архитектуре Skylake операционная система может оставить управление P-состояниями аппаратуру CPU (Speed Shift Technology, Hardware P-states [4]). С Kaby Lake эти функции были дополнительно оптимизированы [5].

processor P state vs speed shift

Speed Schift (сдвиг скорости). P-состояния определяются в BIOS, и управляются операционной системой. Технология Speed Schift дает полное или частичное управление частотой тактирования CPU (может осуществляться либо во всем диапазоне, либо в узком окне). Speed Schift требует поддержки со стороны операционной системы (Windows 10 с новыми обновлением эту функцию поддерживает), также требуется любой процессор Intel 6 Skylake. Сдвиг скорости означает ускоренный отклик на запросы изменения производительности со стороны ПО (JavaScript, инструменты офиса, веб-браузеры). Технология сдвига скорости обеспечивает увеличение производительности для обычных задач, при этом незначительно снижается общее энергопотребление, т. е. эффективность работы всей системы повышается.

[C-состояния]

В отличие от P-состояний, которые были разработаны для регулирования потребления мощности во время выполнения кода (т. е. в нормальном рабочем состоянии процессора), C-состояния используются для оптимизации энергопотребления в режиме ожидания (idle mode, т. е. когда никакой код процессором не выполняется).

Типовые C-состояния следующие:

C0 – Active Mode: код выполняется, это состояние соответствует одному из P-состояний.
C1 – Auto Halt (автоматическая приостановка).
C1E – Auto halt, low frequency, low voltage (автоматическая приостановка с пониженной частотой и напряжением питания).
C2 – Временное состояние перед переходом в C3. Память в рабочем состоянии.
C3 – Сброс кэшей L1/L2 (flush), выключение тактовых частот.
C6 – Сохранение состояний ядра перед выключением, и выключение PLL (т. е. прекращение синтеза тактовых частот).
C7 – C6, плюс может быть сброшен LLC (LLC означает кэш самого высокого уровня, т. е. самая медленная память кэш).
C8 – C7, плюс должен быть сброшен LLC.

processor C states

Примечание *: показано в грубом приближении.

C-состояния можно отличить друг от друга по C-состояниям ядра (Core C-states или CC-states), состояниям корпуса (Package C-states или PC-states) и логическим состояниям. В большинстве случаев операционная система устанавливает определенное состояние для ядра путем выполнения команды MWAIT.

processor Package and Core C States

Примечание: «состояние ядра» (core state) относится к ядру, которое находится в состоянии самого большого потребления энергии (наиболее активно).

[Запрет в BIOS функции CPU Power Saving]

В некоторых случаях рекомендуется деактивировать в BIOS настройки экономии питания CPU. Здесь показано, где найти эти опции и как их запретить, чтобы опции управления питанием (CPU P State Control и CPU C State Control) были полностью запрещены в BIOS (на примере материнской платы Supermicro X10DRi и процессора Intel Xeon E5 2620v4.

Читать:
Как проверить принадлежит ли точка отрезку

Как запретить CPU Power Saving:

1. Во время начального процесса загрузки (сразу после включения питания или сброса) нажмите специальную клавишу для входа в BIOS. Чаще всего это Del (Delete) или F2, для материнской платы Supermicro X10DRi это клавиша Delete.

BIOS CPU configuration

2. Перейдите в раздел настроек Advanced CPU Configuration -> Advanced Power Management Configuration.

BIOS Advanced Power Management Configuration

3. Поменяйте настройку Power Technology в состояние Custom и Energy Efficient Turbo в состояние Disable.

BIOS Power Technology, Energy Efficient Turbo

4. Перейдите в раздел CPU P State Control, деактивируйте EIST (P-States) and Turbo Mode.

BIOS EIST, Turbo Mode

5. Перейдите в раздел CPU C State Control, поменяйте Package C State Limit на C0/C1 state и деактивируйте CPU C3 Report, CPU C6 Report и Enhanced Halt State (C1E).

Краткое руководство по управлению питанием процессора

Как центральный процессор может сокращать собственное энергопотребление? Основы этого процесса — в статье.

Центральный процессор (CPU) спроектирован на бесконечно долгую работу при определенной нагрузке. Практически никто не проводит вычисления круглые сутки, поэтому большую часть времени он не работает на расчетном максимуме. Тогда какой смысл держать его включенным на полную мощность? Здесь стоит задуматься об управлении питанием процессора. Эта тема включает в себя оперативную память, графические ускорители и так далее, но я собираюсь рассказать только про CPU.

Если вы знаете про C-состояния (C-states), P-состояния (P-states) и то, как процессор переходит между ними, то, возможно, в этой статье вы не увидите ничего нового. Если это не так, продолжайте читать.

Я планировал добавить реальные примеры из ОС Linux, но статья становилась все больше, так что я решил приберечь это для следующей статьи.

Основные источники информации, использованные в этом тексте:

Особенности CPU

Согласно официальной странице продукта, мой процессор поддерживает следующие технологии:

  • состояния простоя (Idle States);
  • усовершенствованная технология Intel® SpeedStep (Enhanced Intel® SpeedStep Technology).

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

Как снизить энергопотребление процессора во время его работы?

На процессорах для массового использования (мы не берем в расчет вещи, которые возможны при их проектировании) для снижения потребляемой энергии можно реализовать один из сценариев:

  • Сократить энергопотребление подсистемы (ядра или другого ресурса, такого как тактовый генератор или кэш) путем отключения питания (уменьшив напряжение до нуля).
  • Снизить энергопотребление путем снижения напряжения и/или таковой частоты подсистемы и/или целого процессора.

Второй вариант требует чуть больше объяснений. Энергопотребление интегральной схемы, которой является процессор, линейно пропорционально тактовой частоте и квадратично напряжению.

Примечание для тех, кто разбирается в цифровой электронике: Pcpu = Pdynamic + Pshort circuit + Pleak. При работающем процессоре Pdynamic является наиболее важной составляющей, именно эта часть зависит линейно от частоты и квадратично от напряжения. Pshort circuit пропорционально частоте, а Pleak — напряжению.

Более того, напряжение и тактовая частота связаны линейной зависимостью.

Высокая производительность требует повышенной тактовой частоты и увеличения напряжения, что еще больше влияет на энергопотребление.

Каков предел энергопотребления процессора?

Это во многом зависит от процессора, но для процессора E3-1245 v5 @ 3.50 ГГц расчетная тепловая мощность (Thermal Design Power, TDP) составляет 80 ватт. Это среднее значение, которое процессор может выдерживать бесконечно долго (Power Limit, PL1 на изображении ниже). Системы охлаждения должны быть рассчитаны на это значение, чтобы быть надежными. Фактическое энергопотребление процессора может быть выше в течение короткого промежутка времени (состояния PL2, PL3, PL4 на изображении ниже). TDP измеряется при нагрузке высокой вычислительной сложности (худший случай), когда все ядра работают на базовой частоте (3.5 ГГц).

Как видно на изображении выше, процессор в состоянии PL2 потребляет больше энергии, чем заявлено в TDP. Процессор может находиться в этом состоянии до 100 секунд, а это достаточно долго.

Состояния питания (C-states) vs состояния производительности (P-states)

Состояния питания (C-states) vs состояния производительности (P-states)
Вот два способа снизить энергопотребление процессора:

  • отключить некоторые подсистемы;
  • снизить напряжение/частоту.
  • C-состояний;
  • P-состояний.

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 требует ощутимо большего времени.

Примечание: Из-за технологии 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: «Состояния C0..C7 для расширения MWAIT — это специфичные для процессора C-состояния, а не ACPI C-состояния». Поэтому не путайте эти состояния с ACPI C-состояниями, они явно связаны и между ними есть соответствие, но это не одно и то же.

Я создал гистограмму, представленную ниже, из исходного кода драйвера intel_idle для моего процессора (модель 0x5e). Подписи горизонтальной оси:

Имя C-состояния: специфичное для процессора состояние: специфичное суб-состояние.

Вертикальная ось обозначает задержку выхода и целевые резидентные значения из исходного кода. Задержка выхода используется для оценки влияния данного состояния в реальном времени (то есть сколько времени потребуется для возвращения в С0 из этого состояния). Целевое резидентное значение обозначает минимальное время, которое ядро должно находиться в данном состоянии, чтобы оправдать энергетические затраты на переход в это состояние и обратно. Обратите внимание на логарифмический масштаб вертикальной оси. Задержки и минимальное время нахождения в состоянии увеличивается экспоненциально с увеличением номера состояния.

Константы задержок выхода и целевых резидентных значении C-состояний в исходном коде intel_idle
Примечание: Хотя состояния С9 и С10 включены в таблицу, они имеют 0 суб-состояний и поэтому не используются в моем процессоре. Остальные процессоры из семейства могут поддерживать эти состояния.

Состояния питания ACPI

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

Источник: ACPI Specification v6.2
Также существует специальное глобальное состояние G1/S4, Non-Volatile Sleep, когда состояние системы сохраняется на энергонезависимое хранилище (например, диск) и затем производится выключение. Это позволяет достичь минимального энергопотребления, как в состоянии Soft Off, но возвращение в состояние G0 возможно без перезагрузки. Оно более известно как гибернация.

Существует несколько состояний сна (Sx). Всего таких состояний шесть, включая S0 — отсутствие сна. Состояния S1-S4 используются в G1, а S5, Soft Off, используется в G2. Краткий обзор:

  • 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.

    Комбинации состояний 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.

Похожие статьи