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

7445
Waxhead

В 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 
10

1 ответ на вопрос

6
Breakthrough

Установка оперативного статуса ядра ЦП просто говорит планировщику процессов не использовать это ядро для каких-либо процессов. На аппаратном уровне ядро ​​просто бездействует (выполняет 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 12 лет назад 0
@ Waxhead, как только вы отключите питание процессора, весь компьютер будет логически «выключен» (и может быть включен только через внешнее прерывание), даже если другое оборудование все еще включено. Кроме того, вы можете быть правы относительно использования `HLT` вместо` NOP`, но это связано с использованием прерываний (то есть, как вывести процессор из остановленного состояния). Вместо отключения питания большинство процессоров динамически изменяют тактовую частоту и напряжение (добавили уравнение в мой ответ). Breakthrough 12 лет назад 0
Я провел еще несколько исследований по этому вопросу. Оказывается, что Linux на самом деле поддерживает горячее подключение процессора. В этом случае, если BIOS / материнская плата поддерживает его, вы можете фактически выключить ЦП и заменить их, например, вырвать ЦП из гнезда во время работы системы и заменить его. Ссылка: http://www.cyberciti.biz/faq/debian-rhel-centos-redhat-suse-hotplug-cpu/, если я не ошибаюсь, это приведет к отключению питания процессора, если BIOS / материнская плата его поддержит. Waxhead 12 лет назад 0
@Breakthrough Спасибо за ваш хороший пост. Можете ли вы предоставить некоторые справочные документы по деталям того, как мы можем перевести процессор в состояние низкого энергопотребления (без перезагрузки системы) и можем вернуть его при необходимости iDebD_gh 8 лет назад 0
@Breakthrough: «Ядро просто бездействует (выполняет NOP)», «Когда мы отключаемся от конкретного ядра ЦП, оно отклоняется от« / proc / interrupts ». Как вы можете сказать, что ядро ​​обрабатывает операции NOP? iDebD_gh 8 лет назад 0