Linux: выключение ядра процессора вместо состояния сна

10

В Linux вы можете выключить ядра ЦП (или физические ЦП) с помощью echo 0> / sys / devices / system / cpu / cpu1 / online. Предполагая, что аппаратное обеспечение полностью отключает ЦП и отключает питание, было бы лучше отключить его. ядра полностью, а не полагаться на различные состояния сна процессора?

Чтобы проиллюстрировать этот принцип, я подумал что-то вроде этого (псевдокод) для системы с четырьмя процессорами:

if(loadavg > 3.00) echo 1 > /sys/devices/system/cpu/cpu3/online
if(loadavg < 3.00) echo 0 > /sys/devices/system/cpu/cpu3/online

if(loadavg > 2.00) echo 1 > /sys/devices/system/cpu/cpu2/online
if(loadavg < 2.00) echo 0 > /sys/devices/system/cpu/cpu2/online

if(loadavg > 1.00) echo 1 > /sys/devices/system/cpu/cpu1/online
if(loadavg < 1.00) echo 0 > /sys/devices/system/cpu/cpu1/online
Waxhead
источник

Ответы:

6

Установка оперативного статуса ядра ЦП просто говорит планировщику процессов не использовать это ядро для каких-либо процессов. На аппаратном уровне ядро ​​просто бездействует (выполняет NOP), но все еще работает. Несмотря на то, что это экономит электроэнергию, она не будет экономить почти столько же энергии, сколько переводит компьютер в спящий режим. Почему?

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

Опять же, хотя я согласен, что это сэкономит электроэнергию, даже отключение половины процессорных ядер может вдвое сократить энергопотребление процессора (хотя в действительности вы можете сэкономить только 30-40%, поскольку эти ядра все еще должны сидеть без дела), но это далеко не единственный компонент в системе, использующий энергию. Даже если вы сэкономите 50 Вт, тем не менее весь компьютер потребляет гораздо больше энергии, чем просто ватт в режиме ожидания.


Заключительные мысли: хотя я согласен, что это отличная идея на практике, именно поэтому многие производители процессоров включают динамическое масштабирование частоты (Intel Step Speed ​​Speed) с поддержкой Linux. Вы можете повысить общую производительность и эффективность энергопотребления, настроив эти частоты в соответствии с вашими потребностями. Это может быть сделано как в аппаратном обеспечении (настройки BIOS), так и в программном обеспечении (ядро Linux позволяет вам изменять некоторые параметры ЦП, подробности см. По ссылке, которую я разместил выше, или на этом веб-сайте ).

Это работает, потому что следующее является общим уравнением для потребляемой мощности схемы CMOS:

P = CV 2 f, где C = емкость (предположим, фиксированная), V = напряжение и f = частота.

Таким образом, деление частоты на 2 будет вдвое меньше исходного энергопотребления. Деление напряжения на 2 снизит энергопотребление до 1/4 от исходного.

Прорвать
источник
По крайней мере, на x86 / amd64-совместимых процессорах я бы предположил, что если это возможно, инструкция HLT будет проще для CPU, чем для NOP. Я также имел в виду различные состояния сна (или правильно состояния процессора C0-C3 (ACPI)). Кроме того, я больше думал о системах, которые работают всегда, когда всю систему нельзя усыпить. В этом случае мне любопытно, будет ли аппаратное обеспечение фактически отключать питание процессора и реализовано ли это вообще в некоторых конфигурациях. Спасибо за ваш ответ, но я оставлю вопрос открытым еще немного.
Waxhead
@ После того, как вы отключите питание ЦП, весь компьютер будет логически «выключен» (и может быть включен только через внешнее прерывание), даже если другое оборудование все еще включено. Кроме того, вы можете быть правы относительно использования HLTвместо NOP, но это связано с использованием прерываний (то есть, как вывести процессор из остановленного состояния). Вместо отключения питания большинство процессоров динамически изменяют тактовую частоту и напряжение (добавили уравнение в мой ответ).
Прорыв
Я провел еще несколько исследований по этому вопросу. Оказывается, Linux на самом деле поддерживает горячее подключение процессора. В этом случае, если BIOS / материнская плата поддерживает его, вы можете фактически выключить ЦП и заменить их, например, вырвать ЦП из гнезда во время работы системы и заменить его. Ссылка: cyberciti.biz/faq/debian-rhel-centos-redhat-suse-hotplug-cpu, если я не ошибаюсь, это приведет к отключению питания процессора, если BIOS / материнская плата его поддержит.
Waxhead
@Breakthrough Спасибо за ваш хороший пост. Можете ли вы предоставить некоторые справочные документы о том, как мы можем перевести процессор в состояние низкого энергопотребления (без перезагрузки системы) и получить его обратно, когда это необходимо
iDebD_gh
@Breakthrough: «Ядро просто бездействует (выполняет NOP)», «Когда мы отключаемся от конкретного ядра ЦП, оно отклоняется от« / proc / interrupts ». Как вы можете сказать, что ядро ​​обрабатывает операцию NOP?
iDebD_gh