Enable smx bios что
В этом разделе описываются практически все (по мере создания) параметры, устанавливаемые в программе SETUP для BIOS фирмы AWARD Software International Inc. В конкретной материнской плате каких-то из описываемых параметров может и не быть. Одни и те же параметры могут называться по разному в зависимости от производителя материнской платы, поэтому здесь в некоторых случаях приведено несколько вариантов.
Для просмотра и корректировки установок chipset в BIOS вашего компьютера рекомендуем воспользоваться прелестной программой TweakBIOS. С помощью этой программы можно изменять установки в BIOS "на лету", а также увидеть, правильно ли программа SETUP выполнила установки.
ПРИМЕЧАНИЕ: Программа запускается и под различными Windows, но использовать ее можно только в DOS.
Содержание:
Раздел BIOS FEATURES SETUP
Раздел CHIPSET FEATURES SETUP
Раздел PnP/PCI Configuration Setup
Раздел Power Management Setup
- Enabled - разрешено
- Disabled - запрещено
- Enabled - разрешено
- Disabled - запрещено
- Enabled - разрешено
- Disabled - запрещено
- Enabled - разрешено
- Disabled - запрещено
- Yes - освободить IRQ 6
- No — не освобождать (независимо от того, есть ли флоппи-дисковод или нет)
- Enabled - разрешено
- Disabled - запрещено
Раздел CHIPSET FEATURES SETUP
Установка параметров для FPM DRAM, EDO DRAM и Synchronous DRAM
Конфигурирование шин PCI, AGP, портов ввода/вывода и установка параметров IDE контроллера
-
(Режим кэширования для видеопамяти) — параметр действителен только для процессоров архитектуры Pentium Pro (Pentium II, Deshutes и т.п.). В процессоре Pentium Pro была предусмотрена возможность изменять режим кэширования в зависимости от конкретной области памяти через специальные внутренние регистры, называемые Memory Type Range Registers — MTRR. С помощью этих регистров для конкретной области памяти могут быть установлены режимы UC (uncached — не кэшируется), WC (write combining — объединенная запись), WP (write protect — защита от записи), WT (write through — сквозная запись) и WB (write back — обратная запись). Установка режима USWC (uncached, speculative write combining — не кэшировать, режим объединенной записи) позволяет значительно ускорить вывод данных через шину PCI на видеокарту (до 90 MB/c вместо 8 MB/c). Следует учесть, что видеокарта должна поддерживать доступ к своей памяти в диапазоне от A0000 — BFFFF (128 kB) и иметь линейный буфер кадра. Поэтому лучше установить режим USWC, но в случае возникновения каких-либо проблем (система может не загрузиться) установить значение по умолчанию UC. Может принимать значения:
- UC - uncached — не кэшируется
- USWC — uncached, speculative write combining — не кэшировать, режим объединенной записи.
- Enabled - разрешено
- Disabled - запрещено
- Enabled - разрешено
- Disabled - запрещено
- Enabled - разрешено
- Disabled - запрещено
- Enabled - разрешено
- Disabled - запрещено
- Enabled - разрешено
- Disabled - запрещено
- Enabled - разрешено
- Disabled - запрещено
- Normal — обычный интерфейс принтера, также называется SPP
- ECP — порт с расширенными возможностями
- EPP — расширенный принтерный порт
- ECP + EPP- можно использовать оба режима
- SPP — обычный интерфейс принтера, также называется SPP
- ECP — порт с расширенными возможностями
- EPP — расширенный принтерный порт
- EPP 1.9 — версия 1.9 исполнения интерфейса
- EPP 1.7 — версия 1.7 исполнения интерфейса
- 1 — канал 1
- 3 - канал 3
- Disabled - запрещено использовать DMA
- Primary - разрешена работа только первого канала
- Secondary - разрешена работа только второго канала
- Both - разрешена работа обеих каналов
- Disable - запрещена работа обеих каналов
- Enable - контроллер разрешен
- Disable - контроллер запрещен
- PNP OS Installed(установлена ли операционная система с поддержкой режима Plug&Play?) - Установить Yes, если операционная система поддерживает Plug&Play (например, Windows 95) и No в противном случае.
- Resources Controlled By(как управляются ресурсы) - Если выбрано AUTO, то BIOS сам автоматически назначит прерывания и каналы DMA всем устройствам, подключенным к шине PCI и эти параметры не будут появляться на экране. В противном случае все эти параметры следует установить вручную. В некоторых вариантах BIOS этот параметр может устанавливаться индивидуально для каждого PCI слота и выглядеть так: Slot 1 IRQ, Slot 2 IRQ и т.д. (сброс конфигурационных данных) — Рекомендуется устанавливать его в Disabled. При установке Enabled BIOS будет очищать область Extended System Configuration Data (Расширенные данные о конфигурации системы — ESCD), в которой хранятся данные о конфигурировании BIOS`ом системы, поэтому возможны аппаратные конфликты у "брошенных" таким образом на произвол судьбы устройств. (прерывание с номером n назначено на. ) — Каждому прерыванию системы может быть назначен один из следующих типов устройств:
- Legacy ISA (классические ISA карты) — Обычные карты для ISA, такие как модемы или звуковые карты без поддержки Plug&Play. Эти карты требуют назначения прерываний в соответствии с документацией на них.
- PCI/ISA PnP (устройства для шины PCI или устройства для шины ISA с поддержкой Plug&Play) — этот параметр устанавливается только для устройств на шине PCI или ISA карт с поддержкой Plug&Play.
- Legacy ISA (классические ISA карты) — Обычные карты для ISA, такие как модемы или звуковые карты без поддержки Plug&Play. Эти карты требуют назначения каналов DMA в соответствии с документацией на них.
- PCI/ISA PnP (устройства для шины PCI или устройства для шины ISA с поддержкой Plug&Play) — этот параметр устанавливается только для устройств на шине PCI или ISA карт с поддержкой Plug&Play.
- Level (уровень) — контроллер прерываний реагирует только на уровень сигнала.
- Edge (перепад) - контроллер прерываний реагирует только на перепад уровня сигнала.
- PCI IDE IRQ mapping (используется для PCI IDE)
- PC AT (ISA) (используется для ISA)
- Enabled - разрешено
- Disabled - запрещено
- No/ICU (нет/конфигурационная утилита для ISA) — если установлено это значение, то BIOS может распоряжаться этим прерыванием по своему усмотрению. Для DOS настройка параметров в этом случае может также выполняться с помощью программы ISA Configuration Utility от Intel.
- Yes (да) - означает принудительное освобождение прерывания для какой-либо карты на шине ISA, не поддерживающей режим Plug&Play. Рекомендуется всегда указывать Yes для таких карт и нужных им прерываний, так как в противном случае BIOS может назначить прерывание, жестко используемое какой-либо картой на ISA, другой карте, что может вызвать даже прекращение нормальной работы компьютера.
- No/ICU (нет/конфигурационная утилита для ISA) — если установлено это значение, то BIOS может распоряжаться этим каналом DMA по своему усмотрению. Для DOS настройка параметров в этом случае может также выполняться с помощью программы ISA Configuration Utility от Intel.
- Yes (да) - означает принудительное освобождение канала DMA для какой-либо карты на шине ISA, не поддерживающей режим Plug&Play. Рекомендуется всегда указывать Yes для таких карт и нужных им каналом DMA, так как в противном случае BIOS может назначить канал, жестко используемый какой-либо картой на ISA, другой карте, что может вызвать даже прекращение нормальной работы компьютера.
- No/ICU (нет/ICU) - оставляет управление этим параметром на усмотрение BIOS или программы ICU.
- C800, CC00, D000, D400, D800 и DC00 - указывается адрес блока памяти. Кроме этого, появляется дополнительный параметр ISA MEM Block SIZE (размер блока памяти), который нужен в том случае, если таких ISA карт несколько и этот параметр может принимать значения 8K, 16K, 32K, 64K
- AUTO (автоматически) — Разрешен поиск SCSI контроллера Adaptec и запуск BIOS для него.
- Disabled (запрещено) — Устанавливается в это значение при отсутствии SCSI карты.
- Yes - разрешено
- No — запрещено
- Enabled - разрешено
- Disabled - запрещено
- Enabled - разрешено
- Disabled - запрещено
- AUTO (автоматически) — Разрешен поиск SCSI контроллера и запуск BIOS для него.
- Disabled (запрещено) — Устанавливается в это значение при отсутствии SCSI карты.
- Enabled - разрешено
- Disabled - запрещено
- PCI/AGP - сначала BIOS PCI видеокарты, затем AGP
- AGP/PCI - сначала BIOS AGP видеокарты, затем PCI
- OS — поддержка через операционную систему
- BIOS - поддержка через BIOS
Раздел Power Management Setup
- Power Management(управление энергопотреблением) — позволяет либо разрешать BIOS'у снижать энергопотребление компьютера, если за ним не работают, либо запрещать. Может принимать значения:
- User Define (определяется пользователем) — при установке этого параметра вы можете самостоятельно установить время перехода в режим пониженного энергопотребления.
- Min Saving (минимальное энергосбережение) — при выборе этого параметра компьютер будет переходить в режим пониженного энергопотребления через время от 40 мин. до 2 часов (зависит от конкретного BIOS материнской платы)
- Max Saving (максимальное энергосбережение) — компьютер перейдет в режим пониженного энергопотребления через 10 — 30 с. после прекращения работы пользователя с ним.
- Disable (запрещение энергосбережения) — запрещает режим энергосбережения.
- Enabled - разрешено
- Disabled - запрещено
- Susp, Stby -> Off (выключение в режиме Suspend И Standby) — монитор перейдет в режим пониженного энергопотребления при наступлении либо режима Suspend, либо Standby.
- All modes -> Off (выключение во всех режимах) — монитор будет переведен в режим пониженного энергопотребления в любом режиме.
- Always On (всегда включен) — монитор никогда не будет переведен в режим пониженного энергопотребления
- Suspend -> Off (выключение в режиме Suspend) — монитор перейдет в режим пониженного энергопотребления при наступлении режима Suspend.
- DPMS OFF - снижение энергопотребления монитора до минимума
- DPMS Reduce ON - монитор включен и может использоваться
- DPMS Standby - монитор в режиме малого энергопотребления
- DPMS Suspend — монитор в режиме сверхмалого энергопотребления
- Blank Screen - экран пуст, но монитор потребляет полную мощность
- V/H SYNC+Blank - снимаются сигналы разверток — монитор переходит в режим наименьшего энергопотребления.
- Enabled - разрешено
- Disabled - запрещено
-
(частота процессора в режиме Standby) - определяет коэффициент деления тактовой частоты в режиме Standby (ожидания работы).
- HDD Power Down(выключение жесткого диска) - устанавливает либо время, через которое при отсутствии обращения жесткий диск будет выключен, либо запрещает такое выключение вообще. Параметр не оказывает влияние на диски SCSI. Может принимать значения:
- От 1 до 15 минут
- Disabled - запрещено
- 30 Sec, 1 Min, 2 Min, 4 min, 8 Min, 20 Min, 30 Min, 40 Min, 1 Hour - время перехода (Sec — секунды, Min — минуты, Hour — час)
- Disabled - запрещено
- 30 Sec, 1 Min, 2 Min, 4 min, 8 Min, 20 Min, 30 Min, 40 Min, 1 Hour - время перехода (Sec — секунды, Min — минуты, Hour — час)
- Disabled - запрещено
- 30 Sec, 1 Min, 2 Min, 4 min, 8 Min, 20 Min, 30 Min, 40 Min, 1 Hour - время перехода (Sec — секунды, Min — минуты, Hour — час)
- Disabled - запрещено
-
— разрешение этого параметра приведет к "пробуждению" компьютера от модема или мыши, подключенных к COM2. Может принимать значения:
- Enabled - разрешено
- Disabled - запрещено
- Enabled - разрешено
- Disabled - запрещено
- Enabled - разрешено
- Disabled - запрещено
- Enabled - разрешено
- Disabled - запрещено
- Enabled - разрешено
- Disabled - запрещено
- Enabled - разрешено
- Disabled - запрещено
- Enabled - разрешено
- Disabled - запрещено
- Enabled - разрешено
- Disabled - запрещено
- Enabled - разрешено
- Disabled - запрещено
- Enabled - разрешено
- Disabled - запрещено
- Enabled - разрешено
- Disabled - запрещено
- Enabled - разрешено
- Disabled - запрещено
- Enabled - разрешено
- Disabled - запрещено
- Enabled - разрешено
- Disabled - запрещено
- Enabled - разрешено
- Disabled - запрещено
- Enabled - разрешено
- Disabled - запрещено
- Enabled - разрешено
- Disabled - запрещено
- Soft Off (программное выключение) — кнопка работает как обычная кнопка включения/выключения питания компьютера, но при этом разрешается программное выключение компьютера (например, при выходе из Windows 95).
- Suspend (временная остановка) — при нажатии на кнопку питания на время менее 4 секунд компьютер переходит в стадию Suspend снижения энергопотребления.
- No Function (нет функций) — кнопка Power становится обычной кнопкой включения/выключения питания.
- Enabled - разрешено
- Disabled - запрещено
- Enabled - разрешено
- Disabled - запрещено
- Enabled - разрешено
- Disabled - запрещено
- Enabled - разрешено
- Disabled - запрещено
- Enabled - разрешено
- Disabled - запрещено
- Everday (ежедневно) — при вводе времени компьютер будет включаться ежедневно в назначенное время. Время вводится в поле Time (hh:mm:ss) Alarm в порядке часы:минуты:секунды либо клавишами PgUp, PgDn, либо непосредственным вводом чисел.
- By Date (по дате) - компьютер включится в заданный день и в заданное время. При выборе этого параметра появляется поле для ввода времени (такое же, как и для Everyday) и поле для ввода дня месяца Date of Month Alarm — день месяца — в этом поле вводится число в месяце. Это автоматически означает, что запрограммировать включение компьютера можно только внутри одного месяца.
- Disabled - запрещено
- состояния простоя (Idle States);
- усовершенствованная технология Intel® SpeedStep (Enhanced Intel® SpeedStep Technology).
- Сократить энергопотребление подсистемы (ядра или другого ресурса, такого как тактовый генератор или кэш) путем отключения питания (уменьшив напряжение до нуля).
- Снизить энергопотребление путем снижения напряжения и/или таковой частоты подсистемы и/или целого процессора.
- отключить некоторые подсистемы;
- снизить напряжение/частоту.
- C0: Active, процессор/ядро выполняет инструкции. Здесь применяются P-состояния, процессор/ядро могут работать в режиме максимальной производительности (P0) или в режиме энергосбережения (в состоянии, отличном от P0).
- C1: Halt, процессор не выполняет инструкций, но может мгновенно вернуться в состояние С0. Поскольку процессор не работает, то P-состояния не актуальны для состояний, отличных от С0.
- C2: Stop-Clock, схож с C1, но требует больше времени для возврата в C0.
- С3: Sleep. Возврат в C0 требует ощутимо большего времени.
- Нормальная работа при C0.
- Сначала останавливается тактовый генератор простаивающего ядра (С1).
- Затем локальные кэши ядра (L1/L2) сбрасываются и снимается напряжение с ядра (С3).
- Как только все ядра отключены, общий кэш (L3/LLC) ядер сбрасывается и процессор (почти) полностью может быть обесточен. Я говорю «почти», потому что, по моим предположениям, какая-то часть должна быть активна, чтобы вернуть процессор в состояние С0.
- 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)?
Это возможно, но не рекомендуется. В даташите (секция 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.
Если в системе 4 банка, то CPU может в идеале посылать один запрос данных к каждому из банков SDRAM последовательными периодами синхроимпульсов (consecutive clock cycles). Это значит, что в первом периоде CPU пошлет один адрес к Bank 0 и затем пошлет следующий адрес к Bank 1 во втором периоде, перед тем как пошлет третий и четвертый адреса к Banks 2 и 3 в третьем и четвертом периодах соответственно. Такая последовательность будет иметь примерно следующий вид:
В результате, данные из всех четырех запросов последовательно поступят от SDRAM без задержек между ними. Но, если чередование не было активизировано, та же самая 4-х адресная транзакция примет следующий вид:
Как видите, с чередованием, первый банк начинает перенос данных к CPU в том же самом цикле при котором второй банк получает адрес от CPU. Без чередования, CPU посылал бы этот адрес к SDRAM, получал бы требуемые данные и затем ждал бы пока обновится SDRAM, перед тем как начать вторую транзакцию данных. На все это тратится множество периодов синхроимпульсов. Вот почему пропускная способность SDRAM увеличивается при включенном чередовании (interleaving enabled).
Однако, чередование банков (bank interleaving) работает только в том случае если последовательно запрошенные адреса не находятся в одном и том же банке. Иначе транзакции данных происходят так, словно эти банки не чередуются. CPU придется подождать пока не очистится первая транзакция данных, а этот банк SDRAM не обновится, и только затем CPU сможет послать еще один запрос к этому банку.
Каждый SDRAM DIMM состоит либо из 2-х банков, либо 4-х банков. Двухбанковые SDRAM DIMM используют 16Mbit SDRAM чипы и обычно бывают 32MB или менее в размере. Четырехбанковые SDRAM DIMM, с другой стороны, обычно используют 64Mbit SDRAM чипы, хотя SDRAM плотность может достигать 256Mbit на один чип. Все SDRAM DIMMs размером хотя бы 64MB или более по природе своей являются 4-банковыми. Если вы используете отдельный 2-bank SDRAM DIMM, то устанавливайте значение этой опции на 2-Bank. Но если вы используете пару 2-bank SDRAM DIMMs, то можно также применить 4-Bank опцию. С 4-bank SDRAM DIMMs, вы можете использовать любую из опций чередования (interleave options).
Читайте также:
-
— при разрешении этого параметра компьютер не "засыпает", если подключенное к порту COM2 устройство используется. Может принимать значения:
-
(он же Soft-of By PWR-BTTN) (кнопка питания нажата менее 4 секунд) - управляет функциями кнопки Power на системном блоке компьютера. Может принимать значения:
В следующих секциях BIOS только сообщает характеристики некоторых устройств компьютера. Разрешение параметров в этих секциях позволяет отслеживать BIOS'у эти параметры и сообщать об их выходе за пределы допустимого.
Секция Voltage Monitor (наблюдение за напряжениями питания). В этой секции индицируются как напряжения питания, подаваемые на материнскую плату источником питания, так и вырабатываемые на материнской плате. Разъяснения эти параметры не требуют, кроме VCORE — это напряжение питания ядра процессора. Это напряжение вырабатывается, как правило, на материнской плате.
Не секрет, что современные процессоры работают очень быстро. Работа их заключается в постоянном извлечении из памяти инструкций и выполнения предписанных в них действий. Однако оказывается, по тем или иным причинам часто требуется притормозить этот процесс. В прикладных программах редко приходится задумываться о том, что при этом происходит с процессором. Но вот для создателей системного софта это далеко не праздный вопрос.
Неактивным процессор может быть не только для экономии энергии, но и в результате возникновения особых ситуаций, в процессе выполнения протоколов инициализации или как итог намеренных действий системных программ. Почему это интересно? При написании программных моделей (в том числе виртуальных машин) компьютерных систем, необходимо корректно моделировать переходы между состояниями виртуальных процессоров. В работе системных программ регулярно возникают ситуации, когда по тем или иным причинам ЦПУ должен «притормозить». Умение корректно использовать и моделировать эти ситуации зависит от знания и понимания спецификаций.
В статье фокус делается на программной стороне вопроса состояний процессора. Я не буду концентрироваться на деталях реализации (напряжения, пины, частоты и т.д.), так как 1) они существенно различаются между поколениями и моделями процессоров даже одной архитектуры, тогда как программный интерфейс остаётся обратно совместимым; 2) они не видны напрямую программам и ОС. Это попытка просуммировать информацию, разбросанную по многим страницам справочника Intel IA-32 and Intel 64 Software Developer Manual.
Начнём с простой и всем знакомой ситуации — процессор включён, бодр и весел.
Активное состояние
Самое обычное состояние процессора, в котором он продолжает исполнять инструкции одну за другой. При этом современные процессоры могут динамически варьировать частоту своего тактового генератора для нужд управления энергопотреблением. Используя принятую терминологию, в активном режиме логический процессор остаётся в состоянии C0, но может изменять P-состояния.
Частично этим процессом можно управлять программно, из BIOS, ОС или прикладных программ. Однако последнее слово в управлении при этом остаётся вне контроля программ, запущенных на центральном процессоре.
Во всех остальных режимах, описываемых дальше, процессор не исполняет инструкции.
Первый из неактивных режимов, появившихся ещё в родоначальнике серии Intel 8086, связан с одноимённой инструкцией процессора. Исполнив эту инструкцию, процессор останавливает свою работу, уже не исполняя следующую команду. Начиная с Intel 80486 DX4 в этом режиме энергопотребление ЦПУ уменьшается по сравнению с активным режимом. Как конкретно это делается — зависит от реализации.
Сам по себе выйти из подобного сонного состояния процессор не может. Требуется внешнее событие. Это может быть обычное прерывание от устройства, немаскируемое прерывание (NMI), прерывание системного режима (SMI) или же варианты инициализирующих сигналов — INIT или RESET.
Можно ли полностью подвесить систему с помощью HLTДа, если выполнить HLT в режиме SMM (system management mode), в котором по умолчанию блокируются все прерывания и немаскируемые прерывания. После этого только RESET сможет вновь запустить обработку машинных команд.
Формально режим после HLT обозначается как C1.
MWAIT и другие энергосберегающие режимы
Идея с особым режимом для энергосбережения центрального процессора получила дальнейшее развитие в виде новой инструкции MWAIT. В отличие от HLT, которая не имеет операндов, MWAIT принимает два значения в регистрах EAX и ECX. При этом в EAX содержится описание желаемого энергосберегающего состояния, численные значения для C-state и C-substate.
Регистр ECX определяет необязательные подсказки (hints) для указанного в команде варианта неактивного режима. В настоящий момент описывается только один такой хинт — флаг в нулевом бите. О его назначении будет сказано чуть ниже.
В остальном поведение процессора после исполнения аналогично HLT: процессор останавливает работу до прибытия внешних сигналов. В отличие от HLT, достигаемая в случае MWAIT экономия энергии может быть больше. Если HLT — это состояние C1, то с помощью MWAIT можно запросить переход процессора в более глубокий сон — состояния C2, C3… C6 и т.д. Каждое такое состояние может иметь под-состояния. Конкретные допустимые комбинации варьируются, и для конкретной модели процессора описываются в пятом листе инструкции CPUID.
Кроме тонкого управления энергопотреблением неактивного состояния, более интересное назначение MWAIT состоит в том, что она повышает эффективность синхронизационных процессов на многопроцессорных системах.
Типичная ситуация в параллельных алгоритмах: поток А ожидает сигнала о готовности от потока Б, после чего оба они могут продолжить вычисления. В многопроцессорных системах А и Б будут исполняться на разных логических процессорах. Каким образом можно передать этот сигнал? Два варианта:
Поместить А в неактивный режим (например, с помощью HLT). Затем Б использует межпроцессорное прерывание, которое выводит А из состояния сна. Однако посылка и обработка такого прерывания довольно дорога в терминах времени, т.к. она потребует нескольких переходов между режимами ядра и пользователя, да и путь сигнала прерывания будет неблизким.
MWAIT в паре с инструкцией MONITOR призвана устранить недостаток второго подхода. Команда MONITOR принимает адрес в памяти в качестве своего аргумента, после чего процессор начинает «мониторить» его, ожидая записи из других потоков. Если такая запись произойдёт в то время, пока процессор находится в сонном состоянии из-за MWAIT, то он будет выведен из него.
Таким образом, состояние сна, созданное с помощью MWAIT, может быть прервано по двум причинам: внешние прерывания или запись в ячейку памяти, помеченную с помощью MONITOR. Но что будет, если прерывания были запрещены на момент исполнения MWAIT?
В первых реализациях MONITOR/MWAIT прибытие прерывания не привело бы к выходу из состояния сна. Оказалось, что такое поведение не очень удобно. Поэтому на современных процессорах MWAIT реализует расширение, включаемое с помощью бита ECX[0], которое позволяет даже запрещённым прерываниям выводить процессор из неактивного состояния.
Хочу подчеркнуть несколько «необязательный» характер поведения MWAIT. Выход из неактивного состояния может происходить по различным, не всегда контролируемым текущим приложением причинам. Программы, использующие её, должны быть спроектированы так, чтобы корректно работать, даже если выходы из сонного состояния будут происходить спонтанно. Поэтому в первом приближении MWAIT можно считать вариантом NOP — ничего не делающей инструкции. Это довольно типично для синхронизационных примитивов класса условная переменная (conditional variable). Алгоритмы, их использующие, обязаны корректно работать в условиях возможности паразитных пробуждений.
На этом закончим с функциональностью управления энергопотреблением. Перейдём к особенностям работы процессора в первые и последние моменты перед его включением и перезагрузкой. Как оказывается, при этом он также может находиться в неактивных режимах.
Wait-for-SIPI
Эта довольно неловкое название расшифровывается как «ожидание сигнала SIPI». SIPI, в свою очередь, является аббревиатурой для «Start-up IPI». Наконец, IPI — это «inter-processor interrupt», межпроцессорное прерывание. Чтобы понять, зачем было введено состояние wait-for-SIPI, нужно иметь общее представление о том, как происходит инициализация в многопроцессорной системе. Проблема следующая: если все ядра, потоки и процессоры после включения питания бросятся исполнять один и тот же загрузочный код, то наступит бардак. В общих чертах довольно сложный и варьирующийся в деталях на разных платформах процесс можно описать следующим образом.
После включения питания все логические процессоры включаются в гонку, в результате которой определяется один главный, т.н. загрузочный процессор (boot-strap processor, BSP). Все остальные процессоры обозначаются как прикладные процессоры (application processor, AP).
BSP начинает исполнять загрузочный код из ROM по адресу 0xfffffff0.
В состоянии wait-for-SIPI процессор не исполняет инструкции. Кроме того, он игнорирует внешние прерывания от устройств, сигналы INIT и NMI, задерживает SMI-прерывания. Фактически, единственное, что должно выводить его из этого состояния — это сигнал SIPI. Отмечу, что спецификации ничего не говорят про энергопотребление в этом режиме.
Хочу отметить, что при дальнейшей загрузки системы, все AP могут снова быть выключены и включены несколько раз. Например, загрузчик ОС может быть написан только для одного потока, да и сами ОС обычно предпочитают вводить процессоры в бой по одному. При этом состояние wait-for-SIPI уже не используется — в дело идёт HLT или просто бесконечный цикл на AP.
Большинству программистов, даже системным, не придётся встречать режим wait-for-SIPI в своей практике, просто потому что он случается однократно и довольно рано в процессе работы любой системы. Однако у этого правила есть исключение. Что произойдёт, если запускается виртуальная машина, использующая аппаратную поддержу виртуализации Intel VT-x, с несколькими логическими процессорами? Оказывается, что в режиме VMX non-root (гостевая система) процессор также можно помещать в различные режимы. Кроме активного, поддерживаются неактивные режимы HLT, Shutdown (о нём чуть дальше) и wait-for-SIPI. В этом состоянии поведение процессора очень похоже на то, что происходит и при обычной инициализации AP. А именно: он ничего не делает, игнорирует многие приходящие сигналы, и только при появлении SIPI выходит из гостевого режима в хозяйский (происходит VM-exit). Отмечу, что решение о том, использовать ли механизм SIPI, зависит от конкретного монитора виртуальных машин; на практике, некоторые их них реализуют собственный протокол пробуждения BSP и AP внутри ВМ.
Shutdown
Увы, код, который пишут люди, не безупречен. Серьёзные ошибки в прикладных программах чаще всего приводят к их завершению под зорким надзором операционной системы. Но вот кто позаботится о самой ОС, если она оступится? В качестве её «надзирателей» могут выступать программные мониторы вирутальных машин или, если они не используются, сама аппаратура, т.е. процессор и его особые состояния. О них и поговорим.
Типичная ситуация при работы любой программы — возникновение исключительной ситуации (interruption). Она далеко не всегда и вовсе не обязательно обозначает ошибку; прерывание текущей программы может быть временным, связанным с работой внешних устройств, или быть инициированно самим приложением намеренно, чтобы запросить у ОС некоторые сервисы (см. классификацию таких ситуаций в моём комментарии).
При возникновении исключительной ситуации происходит переключение состояния процессора, в чём-то похожее на очень усложнённый вызов процедуры. Нас сейчас не интересуют его детали (эта статья не об исключениях), важен лишь факт, что в этом процессе что-то может пойти не так — возникнуть исключение при попытки обработки исключения. В спецификации Intel IA-32 этот случай именуется Double Fault — двойной промах. Как и другие исключения, он имеет свой номер (8) и свою запись в системной таблице прерываний. ОС может настроить для него свой собственый програмный обработчик.
Но что будет, если и при попытке перехода в обработку Double Fault возникнет исключение? Гадать не нужно — такая ситуация зовётся Triple Fault, тройной промах. Вот только для него обработчика уже не предусмотрено; вместо этого процессор переводится в режим shutdown — останов.
Этот режим похож на состояние после HLT. В нём процессор прекращает исполнение инструкций до прибытия сигналов NMI, SMI, RESET или INIT. Что на самом деле произойдёт с системой в состоянии shutdown, зависит от реализации. Например, может быть включен световой индикатор на передней панели, сгенерировано немаскируемое прерывание для того, чтобы записать диагностическую информацию, проведена перезагрузка системы (горячая или холодная), или сгенерирован сигнал SMI.
Пожалуй, самая частая реакция на переход процессора в режим shutdown — это перезагрузка всей системы. В Linux намеренное переведение процессора в режим останова — это один из шести методов (последний, как самый отчаянный) обработать запрос на reboot.
Как и в случае с wait-for-SIPI, виртуализация добавляет ньюансов в поведение процессора в режиме shutdown. Тройной промах в режиме non-root, конечно же, не перезагружает всю систему. Он вызывает VM-exit, позволяя монитору ВМ обработать ситуацию в «глючной» гостевой системе. Кроме того, монитор может запускать гостя в режиме non-root в состоянии shutdown (уж не знаю, зачем это может понадобиться).
Ещё про Shutdown
Очень внимательный читатель документации может обнаружить, что некоторые выходы VM-exit с нарушенным состоянием процессора могут перевести процессор в так называемый режим VMX-abort shutdown. Он настолько суров, что из него процессор может вывести только RESET; все остальные сигналы он игнорирует.
Хочу отметить, что обычный Triple Fault в системном коде вызвать достаточно просто, достаточно просто не настраивать системные таблицы и немного подождать. Первое же разрешённое прерывание приведёт к (не)желаемому эффекту и перезагрузке.
А вот событие VMX-abort с последующим остановом получить не так просто. Возникнуть оно может только во время выхода из гостя в монитор (переход из non-root в root). Прежде чем выйти, надо войти (осуществить VM-entry). Но только при входе в non-root проводится огромное число проверок, в том числе таких, что запрещают работу с неконсистентным состоянием. Если что-то было настроено неверно, то попытка входа в гостевую ВМ сразу вернётся с кодом ошибки. Во время работы гость значительно ограничен в правах и самостоятельно разрушить системные структуры обычно не может. Другими словами, обычно ошибка в программе монитора проявляется раньше, при входе. Необходимо быть очень изобретательным (например, напортачить с изоляцией памяти или модель-специфичными регистрами), чтобы получить ошибку именно при VM-exit.
Экзотика: SENTER sleep и TXT shutdown
Напоследок, стоит упомянуть о расширении SMX (safer mode extensions), являющимся программным интерфейсом к набору платформенных технологий Intel TXT (trusted execution technology). Процессоры, поддерживающие SMX, получают ещё два неактивных режима.
Первоочередная задача любой технологии, связанной с безопасностью — это установить, каким сущностям (коду, элементам среды исполнения) можно доверять, то есть выделить корень доверия. Проще всего это сделать, если в системе активен только один процессор, — в этом случае на оставшихся процессорах не сможет остаться недоверенных программ.
Исполнение инструкции GETSEC[SENTER] на одном логическом процессоре вводит остальные процессоры в новое неактивное состояние SENTER Sleep. После этого программа, исполняющаяся на оставшемся активном процессоре, должна перевести систему в так называемое «заверенное» окружение (measured environment), Как только заверенное окружение готово, в нём могут работать и остальные процессоры. Для этого они выводятся из состояния SENTER sleep с помощью инструкции GETSEC[WAKEUP].
Как всегда, в процессе работы доверенного кода возможны ошибки, связанные с доступом к неправильным ресурсам, исключениями или несхождениям результатов криптографических проверок. Возникают они или по вине нерадивых программистов, или из-за намеренных попыток нарушить работу заверенного окружения извне. Во втором случае целью является компрометация окружения с подстановкой недоверенного кода или получением секретов.
При детектировании недопустимых событий в заверенном окружении процессор переводится в новое состояние — TXT-shutdown. Его отличительная особенность состоит в том, что информация о причине останова сохраняется в платформенных регистрах и выживает после перезагрузки, что позволяет проанализировать её впоследствии. Эх, вот бы и для обычного Triple Fault было бы что-то такое! Заметно помогло бы с диагностикой проблем.
Как центральный процессор может сокращать собственное энергопотребление? Основы этого процесса — в статье.
Центральный процессор (CPU) спроектирован на бесконечно долгую работу при определенной нагрузке. Практически никто не проводит вычисления круглые сутки, поэтому большую часть времени он не работает на расчетном максимуме. Тогда какой смысл держать его включенным на полную мощность? Здесь стоит задуматься об управлении питанием процессора. Эта тема включает в себя оперативную память, графические ускорители и так далее, но я собираюсь рассказать только про CPU.
Если вы знаете про C-состояния (C-states), P-состояния (P-states) и то, как процессор переходит между ними, то, возможно, в этой статье вы не увидите ничего нового. Если это не так, продолжайте читать.
Я планировал добавить реальные примеры из ОС Linux, но статья становилась все больше, так что я решил приберечь это для следующей статьи.Основные источники информации, использованные в этом тексте:
Особенности CPU
Согласно официальной странице продукта, мой процессор поддерживает следующие технологии:
Теперь выясним, что значит каждое из этих определений.
Как снизить энергопотребление процессора во время его работы?
На процессорах для массового использования (мы не берем в расчет вещи, которые возможны при их проектировании) для снижения потребляемой энергии можно реализовать один из сценариев:
Второй вариант требует чуть больше объяснений. Энергопотребление интегральной схемы, которой является процессор, линейно пропорционально тактовой частоте и квадратично напряжению.
Примечание для тех, кто разбирается в цифровой электронике: 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)
Вот два способа снизить энергопотребление процессора:P-состояния описывают второй случай. Подсистемы процессора работают, но не требуют максимальной производительности, поэтому напряжение и/или тактовая частота для этой подсистемы может быть снижена. Таким образом, P-состояния, P[X], обозначают, что некоторая подсистема (например, ядро), работает на заданной паре (частота, напряжение).
Так как большинство современных процессоров состоит из нескольких ядер, то С-состояния разделены на С-состояния ядра (Core C-states, CC-states) и на С-состояния процессора (Package C-states, PC-states). Причина появления PC-состояний очень проста. Существуют компоненты с общим доступом (например, общий кэш), которые могут быть отключены только после отключения всех ядер, имеющих доступ к этому компоненту. Однако мы в роли пользователя или программиста не можем взаимодействовать с состояниями пакета напрямую, но можем управлять состояниями отдельных ядер. Таким образом, управляя CC-состояниями, мы косвенно управляем и PC-состояниями.
Состояния нумеруются от нуля по возрастанию, то есть C0, C1… и P0, P1… Большее число обозначает большее энергосбережение. C0 означает, что все компоненты включены. P0 означает максимальную производительность, то есть максимальные тактовую частоту, напряжение и энергопотребление.
С-состояния
Вот базовые С-состояния (определенные в стандарте ACPI).
Примечание: Из-за технологии Intel® Hyper-Threading существуют также С-состояния потоков. Хотя отдельный поток может работать с С-состояниями, изменения в энергопотреблении происходят, только когда ядро входит в нужное состояние. В данной статье тема C-состояний на потоках рассматриваться не будет.
Вот описание состояний из даташита:
Примечание: LLC обозначает Last Level Cache, кэш последнего уровня и обозначает общий L3 кэш процессора.
Визуальное представление состояний:
Источник: Software Impact to Platform Energy-Efficiency White Paper
Последовательность C-состояний простыми словами:
Однако если ядро работает (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_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. Краткий обзор: