Wake On Lan после сбоя питания (или из состояния G3)
Wake-on-LAN (WOL; в переводе с англ. — «пробуждение по [сигналу из] локальной сети») — технология, позволяющая удалённо включить компьютер посредством отправки через локальную сеть специальной последовательности байтов. wiki
И все бы хорошо, если бы не одно но. После сбоя питания ваш компьютер не включится.
Согласитесь, это будет «приятной» неожиданностью, особенно если вы находитесь за пару тысяч километров от него.
Одно из решений написано здесь, но оно аппаратно-программное, а ведь можно обойтись без дополнительного железа.
Про WOL на Хабре можно найти уже две станицы. Поэтому в этой статье не будет рассматриваться включение wol на карточке.
Введение
Для начала разберемся, почему компьютер не включится. Для понимания этого стоит обратится к ACPI.
ACPI — англ. Advanced Configuration and Power Interface — усовершенствованный интерфейс управления конфигурацией и питанием). В ACPI описаны состояния — как глобальные, так и конкретных устройств в частности. (wiki)

- G2 (S5) (soft-off) — мягкое (программное) выключение; система полностью остановлена, но под напряжением, готова включиться в любой момент. Системный контекст утерян.
- G3 (mechanical off) — механическое выключение системы; блок питания ATX отключен.

В большинстве [новых] биосов есть опция «After Power Failure». Принимать она может одно из трех значений:
- «Stay Off» – при потере питания в сети и его восстановлении для включения ПК необходимо нажать кнопку питания.
- «Turn On» – восстановление питания вызывает автоматическое включение системы.
- «Last State» – Восстановление системы в то состояние, в котором она находилась на момент пропадания питания. Если была выключены — остается выключена, иначе включается.
Выбрав «Turn On», останется вопрос лишь в том, как выключить компьютер, когда он включился после сбоя питания, а не от запроса по сети или штатного запуска кнопкой на корпусе. Делать эти проверки мы будем в initrd.
Initrd (сокращение от англ. Initial RAM Disk, диск в оперативной памяти для начальной инициализации) — временная файловая система, используемая ядром Linux при начальной загрузке. (wiki_ru) (wiki_en)
Расположение файлов для initrd в Ubuntu/Debian можно посмотреть в man на initramfs-tools (онлайн с сайта Ubuntu).
Для Centos все немного по другому — там dracut.
Для обеспечения проверки, как был включен компьютер, после посылки wol пакета мы будем пинговать его. Но так как пакет WOL у нас «магический», пусть пинги будут тоже «магическими». Пусть наши пинги будут размером в 48 байт, а не в 84.

Итого вся идея в виде блок-схемы:
Реализация
Модули
В /etc/initramfs-tools/modules добавим необходимые модули для работы iptables и сети.
Модуль для вашей сетевой карты
r8169 (у вас может быть другая)
Модули iptables
xt_length iptable_filter ip_tables x_tables
Скрипт
В /etc/initramfs-tools/scripts/local-top/ добавим файл checkboot с содержимым:
#!/bin/sh PREREQ="" prereqs() < echo "$PREREQ" >case $1 in prereqs) prereqs exit 0 ;; esac [ `cat /proc/cmdline | grep nocheckboot | wc -l` -eq 1 ] && exit 0 iptables -A INPUT -p icmp --icmp-type echo-request -m length --length 48 -j ACCEPT modprobe r8169 ifconfig eth0 192.168.0.2 up sleep 3 C=`iptables -L INPUT -v | grep 'icmp echo-request length 48' | cut -f5 -d' '` [ $C -gt 0 ] && exit 0 poweroff -f exit 0
И делаем его исполняемым:
chmod +x /etc/initramfs-tools/scripts/local-top/checkboot
Скрипт реализует блок-схему, приведенную выше.
Хук
В /etc/initramfs-tools/hooks/ добавим файл checkboot с содержимым:
#!/bin/sh PREREQ="" prereqs() < echo "$PREREQ" >case $1 in prereqs) prereqs exit 0 ;; esac cp /sbin/ifconfig "$/sbin" cp /sbin/iptables "$/sbin" cp /lib/libip4tc.so.0 "$/lib" cp /lib/libip6tc.so.0 "$/lib" cp /lib/libxtables.so.7 "$/lib" cp /lib/i386-linux-gnu/i686/cmov/libm.so.6 "$/lib" mkdir "$/lib/xtables" cp "/lib/xtables/libipt_icmp.so" "$/lib/xtables" cp "/lib/xtables/libxt_length.so" "$/lib/xtables" cp "/lib/xtables/libxt_standard.so" "$/lib/xtables" exit 0
И делаем его исполняемым:
chmod +x /etc/initramfs-tools/hooks/checkboot
Этот файл указывает, что необходимо добавить в initrd для корректной работы нашего скрипта.
В нем после копирования утилит iptables и ifconfig необходимо так же скопировать библиотеки для iptables.
Слинкованные библиотеки можно получить, выполнив ldd /sbin/iptables.
Но в процессе работы также будут использоваться динамически подгружаемые модули. Их список можно увидеть, выполнив команду:
# strace iptables -A INPUT -p icmp --icmp-type echo-request -m length --length 48 -j ACCEPT 2>&1 | grep ^open | grep '.so' | grep -v ENOENT | grep -o '"[^"]*"'
Что позволит получить остальные подгружаемые библиотеки:
"/lib/xtables/libipt_icmp.so" "/lib/xtables/libxt_length.so" "/lib/xtables/libxt_standard.so"
Update initrd
Перед обновлением initrd хорошей идеей является скопировать стабильный вариант в /boot с другим именем, чтобы в случае каких-либо ошибок в скрипте/хуке загрузка системы не представляла сложности.
Обновляем initrd командой:
# update-initramfs -u
Grub
Добавляем новые строчки в grub с nocheckboot.
Делаем это либо непосредственным редактированием /boot/grub/grub.cfg с созданием нового пункта с добавлением nocheckboot в строке параметров к ядру, либо изменяя /etc/grub.d/10_linux, что лучше, так как после update-grub2 наши изменения не исчезнут, как случится, если мы будем редактировать grub.cfg.
Для этого в /etc/grub.d/10_linux добавляем:
linux_entry "$ nockeckboot" "$" simple \ "$ $ $ nocheckboot"
linux_entry "$" "$" simple \ "$ $ $"
# update-grub2
Запуск
Осталось только написать скрипт запуска.
И вот он:
!#/bin/sh wol -i 192.168.0.255 ping -s 20 -c 50 -W 1 192.168.0.2
Здесь «-c 50» — это 50 пакетов, 1 пакет в секунду, а значит 50 секунд — время, за которое должны пройти все этапы до «Проверка счетчика правила iptables». А «-s 20» делает размер пакета равным 48 байтам. 48 — 20 = 28 байт — заголовки IP и ETHERNET.
Вместо заключения
Вот и все, теперь вы не потеряете доступ к машинам из-за сбоя питания.
Конечно, здесь ещё можно поговорить про UPS, но задача состояла в поиске решения без использования UPS.
Такая схема полезна в том случае, если вам нужен доступ к вашим компьютерам (доступ к данным, проведение вычислений), которые основное время прибывают в выключенном состоянии и ждут вас.
- *nix
- Сетевые технологии
State after g3 что это в биосе
Настройка в биосе является одним из самых важных аспектов компьютерной системы, который позволяет пользователю изменять определенные параметры работы системы. Одним из наиболее значимых действий в биосе является настройка государственного состояния после восстановления из глубокого сна (g3). В данной статье мы рассмотрим все аспекты, связанные с этой операцией и поделимся полезными советами, которые помогут вам правильно настроить ваш биос и достичь оптимальной производительности вашей системы.
Первым шагом для эффективной настройки состояния после g3 является понимание, что именно представляет собой это состояние. G3 (глубокий сон) — это режим энергосбережения, в котором компьютер полностью отключается, потребляя минимальное количество энергии. При входе в это состояние, компьютер сохраняет свое состояние в памяти, и затем полностью отключается. При последующем включении, компьютер восстанавливает сохраненное состояние и продолжает работу с того момента, на котором он остановился.
Однако, настройка состояния после g3 может иметь существенное влияние на производительность компьютера. Поэтому, при настройке биоса, важно учесть особенности вашей системы и выбрать оптимальные настройки. Во-первых, вам следует определить, требуется ли вам быстрое восстановление компьютера после сна, или вы готовы подождать некоторое время для полной загрузки системы. Во-вторых, вам нужно решить, насколько важна для вас экономия энергии. Некоторые настройки могут существенно увеличить энергопотребление вашей системы, но при этом обеспечить более быстрое восстановление.
State after g3: смысл и значение для настройки в биосе
Когда компьютер находится в режиме g3, он находится в полностью отключенном состоянии, потребляя минимальное количество энергии. Этот режим также называется «Soft Off». В этом состоянии компьютер не может быть включен нажатием кнопки питания, а только путем подачи электричества в систему или сигнала с внешнего устройства.
State after g3 позволяет настроить, как компьютер будет вести себя после выключения. Доступны следующие варианты:
- Stay Off (остаться выключенным) – компьютер останется выключенным и не будет автоматически включаться. Это полезно, например, если компьютер используется несколькими пользователями и вы не хотите, чтобы кто-то случайно включил его.
- Last State (последнее состояние) – компьютер восстановит состояние, в котором он находился перед выключением. Например, если компьютер был в спящем режиме или в режиме ожидания, он автоматически вернется в это состояние.
- Power On (включение питания) – компьютер автоматически включится после выключения. Это может быть полезно, если компьютер используется в качестве сервера или если вам требуется удаленный доступ к нему.
Выбор правильной настройки State after g3 в BIOS важен, так как он определяет, как компьютер будет реагировать на выключение. Это позволяет удобно настроить компьютер в соответствии с вашими потребностями и предотвратить случайные включения или сохранить текущее состояние системы.
Понятие и общее описание
В биосе можно изменить различные параметры компьютера, включая процессор, оперативную память, жесткий диск, видеокарту и другие компоненты. Настройка в биосе позволяет оптимизировать работу компьютера в соответствии с потребностями пользователя.
| Параметр | Описание |
|---|---|
| Процессор | Позволяет изменить такие параметры, как тактовая частота и напряжение процессора. Это может повлиять на производительность и стабильность работы компьютера. |
| Оперативная память | Позволяет настроить такие параметры, как тактовая частота и тайминги оперативной памяти. Это может повысить производительность системы при использовании различных приложений. |
| Жесткий диск | Позволяет настроить режим работы жесткого диска (IDE, AHCI, RAID) и задать порядок загрузки операционной системы. |
| Видеокарта | Позволяет настроить параметры видеокарты, включая разрешение экрана, глубину цвета и частоту обновления. |
| Другие компоненты | В биосе также можно настроить параметры других компонентов компьютера, таких как звуковая карта, сетевая карта и т. д. |
Настройка в биосе является одним из способов повышения производительности компьютера и разрешения некоторых проблем, связанных с аппаратными компонентами. Однако, необходимо быть осторожными при изменении параметров, так как неправильные настройки могут привести к неработоспособности компьютера.
Возможности настройки в биосе для state after g3
Настройка параметров BIOS (Basic Input Output System) позволяет оптимизировать работу компьютера в состоянии after g3. Выбор определенных настроек может повлиять на энергопотребление, производительность и стабильность системы.
Вот некоторые из возможных настроек в BIOS, которые можно использовать для состояния after g3:
- Power On By RTC Alarm: Эта опция позволяет установить время, в которое компьютер автоматически включится, используя Real Time Clock (RTC). Это может быть полезно, если вам нужно, чтобы система включилась в определенное время, например, для выполнения запланированных задач.
- Power On By Keyboard/Mouse: Эта настройка позволяет включать компьютер при нажатии определенных клавиш на клавиатуре или движении мыши. Она может быть удобна, если вам нужно включить компьютер из режима ожидания без необходимости нажимать кнопку питания.
- AC Recovery: Эта опция определяет поведение компьютера при восстановлении питания после его сбоя. Вы можете выбрать, чтобы компьютер автоматически включался после сбоя питания или оставался выключенным.
- Wake On LAN: Эта функция позволяет компьютеру прослушивать сеть и включаться при получении специального сигнала от другого компьютера или устройства. Она может быть полезной, если вы хотите удаленно включать компьютер.
- Boot Device Priority: Эта настройка позволяет выбирать порядок загрузки устройств, таких как жесткие диски, оптические приводы или USB-накопители. Вы можете настроить BIOS таким образом, чтобы компьютер автоматически запускался с определенного устройства.
Обратите внимание, что доступные настройки и их названия могут отличаться в зависимости от производителя и модели биоса. Чтобы изменить настройки BIOS, обычно необходимо нажать определенную клавишу (например, Del или F2) при включении компьютера и зайти в меню BIOS.
Будьте осторожны при внесении изменений в BIOS, так как неправильные настройки могут привести к неполадкам системы. Если вы не уверены в том, какая настройка лучше подходит для вас, рекомендуется обратиться к руководству пользователя или связаться с производителем компьютера.
Как правильно установить state after g3 в биосе
Чтобы правильно установить state after G3 в BIOS, выполните следующие шаги:
- Перезагрузите компьютер и во время загрузки нажмите нужную клавишу для входа в BIOS (обычно это клавиша Del или F2).
- Используя клавиши на клавиатуре, перейдите в раздел Power или Power Management.
- Найдите настройку State after G3 или S5.
- Выберите опцию Enabled или On, чтобы включить режим state after G3. Если вы хотите отключить этот режим, выберите опцию Disabled или Off.
- Сохраните изменения и выйдите из BIOS, нажав кнопку Save and Exit или аналогичную.
После выполнения этих шагов, режим state after G3 будет правильно установлен в BIOS вашего компьютера. Учтите, что настройки в BIOS могут отличаться в зависимости от производителя вашей материнской платы, поэтому внимательно изучайте инструкции пользователя или обратитесь к документации к вашей системе.
Преимущества использования state after g3 в биосе
Использование state after g3 в биосе имеет несколько преимуществ:
- Экономия энергии: state after g3 полностью выключает компьютер, что позволяет снизить энергопотребление в положении ожидания. Это особенно полезно для ноутбуков и систем, работающих на аккумуляторе.
- Быстрый старт: благодаря сохранению текущего состояния, компьютер может быстро возобновить работу после выключения. Это может быть полезно, если вы часто выключаете и включаете компьютер или если у вас есть ограниченное время на восстановление работы.
- Удобство использования: в отличие от полной перезагрузки, при использовании state after g3 сохраняются все открытые приложения, документы и файлы, что позволяет продолжать работу с того же места, где вы остановились.
- Снижение износа компонентов: поскольку компьютер полностью выключается в режиме state after g3, это помогает уменьшить износ жесткого диска и других компонентов компьютера, так как они не работают, когда компьютер выключен.
Хотя state after g3 имеет свои преимущества, важно помнить, что некоторые приложения или операционные системы могут не поддерживать эту функцию, и вам может потребоваться провести полную перезагрузку компьютера, чтобы избежать возможных проблем.
Недостатки и ограничения использования state after g3 в биосе
- Количество поддерживаемых устройств: Некоторые системы могут иметь ограничение на количество устройств, которые могут сохранять свое состояние в режиме «state after g3». Поэтому, если у вас подключено множество устройств, возможно, придется ограничить количество устройств, сохраняющих состояние в этом режиме.
- Требования к питанию: Режим «state after g3» требует постоянного питания для поддержания сохраненного состояния. Это может привести к потреблению электроэнергии, даже когда компьютер выключен. Если вы стремитесь к более эффективной работе в режиме энергосбережения, это может быть недостатком для вас.
- Не все устройства поддерживают эту функцию: Некоторые старые или более простые устройства могут не иметь возможности сохранять свое состояние в режиме «state after g3», поэтому сохранять их состояние может быть невозможно. Если у вас есть такие устройства, вам может потребоваться изменить настройки или выбрать альтернативный режим энергосбережения.
- Потенциальная несовместимость: В некоторых случаях возможно конфликт между этой функцией и другими функциями в системе или программным обеспечением. Это может привести к неправильной работе или непрогнозируемому поведению системы. В таких случаях может потребоваться отключить режим «state after g3» и выбрать другую настройку энергосбережения.
При настройке системы в режиме «state after g3» важно учитывать эти недостатки и ограничения, чтобы выбрать оптимальную конфигурацию и достичь наилучшей производительности и энергосбережения.
State after g3 – что это в биосе?

State after G3 (состояние после глубокой остановки) – это функция в биосе компьютера, которая отвечает за управление энергопотреблением после полного выключения системы. Эта функция позволяет вашему компьютеру быть более энергоэффективным и экологически чистым, сохраняя данные и настройки после полного выключения.
Когда ваш компьютер находится в состоянии после G3, он потребляет очень мало энергии. Это особенно полезно для ноутбуков и других портативных устройств, поскольку позволяет значительно продлить время автономной работы. Кроме того, функция после G3 позволяет вам быстро включать компьютер после полного выключения, не теряя данные и настройки.
Но как настроить состояние после G3 в биосе? Для этого вам потребуется зайти в настройки биоса вашего компьютера. Процедура может немного отличаться в зависимости от производителя и модели компьютера, но обычно требуется нажать определенную клавишу во время запуска системы.
После входа в настройки биоса, найдите раздел, отвечающий за управление энергопотреблением. Там вы найдете опцию «State after G3» или что-то похожее. После выбора этой опции, вам нужно будет указать, какое состояние вы хотите установить после G3 – полное выключение или глубокую остановку. Выберите наиболее подходящий вариант для ваших потребностей.
После того, как вы выбрали нужное состояние после G3, сохраните изменения и выйдите из настроек биоса. Теперь ваш компьютер будет управлять энергопотреблением после полного выключения в соответствии с вашими настройками. Учтите, что не все компьютеры поддерживают функцию после G3, поэтому убедитесь, что ваш компьютер имеет такую возможность перед изменением настроек.
Определение State after G3
State after G3, также известное как память после выключения, — это состояние компьютера, в котором все его компоненты оставляются отключенными, но сохраняют свое состояние перед выключением. Это позволяет быстро возобновить работу компьютера после выключения или перезагрузки без потери данных.
State after G3 обычно используется для энергосбережения в периоды, когда компьютер не используется или находится в режиме ожидания. Вместо полного отключения питания, компьютер переходит в режим низкого энергопотребления, при этом сохраняется состояние операционной системы, запущенных приложений и открытых документов.
State after G3 достигается с помощью технологий BIOS (Basic Input/Output System) и UEFI (Unified Extensible Firmware Interface), которые управляют работой компьютера при включении, выключении и перезагрузке.
Настройка State after G3 может быть осуществлена через BIOS или UEFI, в зависимости от используемой системы. Обычно она находится в разделе, связанном с энергопотреблением или управлением питанием. В этом разделе можно выбрать режим работы компьютера после выключения, такой как полное выключение, режим ожидания или State after G3.
Переключение на State after G3 позволяет быстрее возобновить работу компьютера, так как не требуется запуск операционной системы и приложений заново. Однако, следует учитывать, что в режиме State after G3 компьютер по-прежнему потребляет энергию, хотя и в значительно меньшем объеме, чем в обычном режиме работы.
Возможности настройки State after G3
State after G3 — функция, которая определяет поведение системы после отключения питания и последующего включения.
В биосе можно настроить различные варианты данной функции:
- Power On — при включении питания система будет автоматически запущена.
- Last State — после отключения и последующего включения питания, система будет включена в то же состояние, в котором она была перед отключением.
- Always Off — система не будет включаться после отключения питания. Для включения необходимо нажать кнопку питания на корпусе компьютера.
- Always On — система будет всегда включена, даже после отключения и последующего включения питания.
Данные настройки позволяют пользователю управлять поведением системы после отключения и последующего включения питания. Выбор конкретного варианта зависит от индивидуальных предпочтений и требований пользователя.
Чтобы настроить State after G3, необходимо зайти в настройки биоса. Для этого при включении компьютера нужно нажать определенную клавишу (обычно это F2 или Del), чтобы попасть в биос. Далее нужно найти соответствующий раздел с настройкой State after G3 и выбрать нужный вариант.
| Настройка | Описание |
|---|---|
| Power On | Система будет автоматически запущена при включении питания. |
| Last State | Система будет включена в то же состояние, в котором она была перед отключением. |
| Always Off | Система не будет включаться после отключения питания. Для включения необходимо нажать кнопку питания на корпусе компьютера. |
| Always On | Система будет всегда включена, даже после отключения и последующего включения питания. |
После выбора нужного варианта State after G3, нужно сохранить изменения и выйти из биоса. После этого выбранные настройки будут применены, и система будет работать согласно выбранному варианту.
Применение State after G3
State after G3 (состояние после G3) – это функция, доступная в настройках BIOS (Basic Input/Output System), которая позволяет сохранять и восстанавливать состояние компьютера после выключения.
Применение State after G3 может быть полезным в следующих случаях:
- Снижение времени загрузки: сохранение состояния компьютера перед выключением позволяет быстрее загрузиться при следующем включении. Вместо полной загрузки, компьютер будет восстанавливать сохраненное состояние.
- Сохранение рабочей среды: если вы работаете над проектом и вам нужно временно выключить компьютер, то использование State after G3 позволит вам сохранить текущее состояние работы. При включении компьютера снова, вы сможете продолжить работу с точки, на которой остановились.
- Защита от потери данных: если компьютер неожиданно отключается или происходит сбой электропитания, State after G3 поможет избежать потери важных данных. Компьютер восстановит состояние до момента отключения.
Для настройки State after G3 необходимо зайти в настройки BIOS. Как это сделать, зависит от производителя вашей материнской платы. Обычно, при включении компьютера нужно нажать определенную клавишу (например, Del, F2 или F10), чтобы войти в BIOS. Внутри BIOS нужно найти раздел, связанный с энергосбережением или гибернацией.
В настройках State after G3 обычно есть несколько опций:
- Disable: отключение State after G3, компьютер будет загружаться с нуля каждый раз.
- Fast: использование State after G3 для быстрой загрузки компьютера.
- Full: использование State after G3 для полной загрузки состояния компьютера.
После выбора нужной опции, нужно сохранить изменения и выйти из BIOS. После этого компьютер будет использовать выбранное состояние после выключения.
Но следует заметить, что не все компьютеры и материнские платы поддерживают функцию State after G3. Поэтому перед настройкой необходимо проверить совместимость вашего оборудования.
| Опция | Описание |
|---|---|
| Disable | Отключение State after G3, компьютер будет загружаться с нуля каждый раз. |
| Fast | Использование State after G3 для быстрой загрузки компьютера. |
| Full | Использование State after G3 для полной загрузки состояния компьютера. |
Настройка State after G3
State after G3 (состояние после G3) — это режим энергосбережения в биосе компьютера. В этом режиме компьютер потребляет минимум энергии и может быть полностью отключен.
Настройка State after G3 позволяет задать, какое действие должно произойти после того, как компьютер выйдет из этого режима:
- Power Off (Выключение) — компьютер полностью выключается после выхода из режима G3. Все процессы и приложения будут закрыты, и компьютер перейдет в выключенное состояние.
- Last State (Последнее состояние) — компьютер восстанавливает последнее состояние, в котором он находился перед входом в режим G3. Возможно восстановление сеанса работы или открытие последнего активного приложения.
- Restore on AC Power Loss (Восстановление после потери питания) — компьютер восстанавливает последнее состояние после потери электропитания. В данном случае компьютер автоматически включается после восстановления электропитания.
State after G3 может быть настроено в биосе компьютера. Для этого необходимо зайти в настройки биоса, обычно доступные при запуске компьютера клавишей Delete или F2.
Примеры настроек State after G3 в разных биосах:
Рекомендуется оставить настройку State after G3 в режиме Power Off (Выключение), если вы не планируете использовать возможность автоматического включения компьютера после потери электропитания.
Преимущества State after G3
State after G3 — это функция, включаемая в BIOS компьютера, которая позволяет сохранять некоторую информацию о состоянии системы после выключения питания. Это позволяет быстрее загружать компьютер и восстанавливать настройки системы без необходимости проходить все этапы загрузки и настройки заново.
Преимущества использования State after G3:
- Быстрая загрузка — благодаря сохранению информации о состоянии системы после выключения, компьютер может быстро загрузиться, минуя некоторые этапы и процедуры и перейдя непосредственно к работе. Это выгодно для пользователей, которым часто приходится перезагружать компьютер.
- Сохранение настроек — если вы вносите определенные настройки в BIOS или операционную систему, State after G3 позволяет сохранить эти настройки даже после выключения питания. Это удобно для пользователей, которым приходится часто изменять настройки и не хотелось бы делать это каждый раз при загрузке системы.
- Экономия времени — благодаря быстрой загрузке и сохранению настроек, State after G3 позволяет сэкономить время пользователя при каждой последующей загрузке компьютера.
Для включения и настройки State after G3 обычно следует зайти в BIOS компьютера и найти соответствующий пункт в настройках. Точное местоположение и название этого пункта могут отличаться в зависимости от производителя BIOS.
State after G3 является полезной функцией для всех пользователей, которым важно быстро включать компьютер и сохранять его настройки для последующих загрузок.
Краткое руководство по управлению питанием процессора

Как центральный процессор может сокращать собственное энергопотребление? Основы этого процесса — в статье.
Центральный процессор (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 на Википедии;
- Linux Kernel Sources версии 4.13.0.
Особенности 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 выводит следующую информацию:
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
Прежде чем говорить про 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.
Вот какую информацию можно получить (это не весь вывод).
$ ./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