Управление питанием и реализация ACPI в Windows 2000 — теория и практика


Пользоваться возможностями управления питанием могут не только пользователи ноутбуков, где возможность гибкого управления режимами работы компьютера просто необходима, но и пользователи настольных компьютеров, которым тоже пригодится, например, режим Hibernate. Данная статья попытается ответить на вопросы о том, как оптимизировать применение системы Windows 2000 в случае необходимости или желания использовать различные "спящие" режимы, а также рассказать о том, что такое ACPI в понимании и исполнении Microsoft Windows 2000. Материал может оказаться особенно полезным тем пользователям, которые хотят приобрести современный ноутбук и планируют установить на него систему Windows 2000 (или же она уже предустановлена на вашем компьютере).

1. ACPI

ACPI расшифровывается как Advanced Configuration and Power Interface — расширенный интерфейс конфигурирования компьютера и управления питанием. ACPI — та основа, вокруг которого построен, по идее, любой современный компьютер на аппаратном уровне. В системе с ACPI именно этот свод стандартов и правил используется для конфигурирования и работы аппаратных средств — например, для назначения прерываний и ресурсов устройствам на современных шинах (PCI и AGP), для получения информации о работе устройств, для работы дополнительных "энергосберегающих" кнопок и датчиков, или, например, для получения данных об оставшейся в аккумуляторах энергии. Сам стандарт ACPI имеет уже многолетнюю историю и большинство систем теоретически с ним совместимо. Практика, как ни жаль, очень сильно отстала от реальности, и полную поддержку ACPI, которой реально можно пользоваться, имеют лишь системы, выпущенные в последние год-полтора. Даже некоторые материнские платы на известном наборе микросхем i440BX, например, иногда не имеют поддержки ACPI. Основное условие совместимости системы с ACPI — поддержка ACPI материнской платой. Чаще всего сама аппаратная поддержка (возможность такой поддержки) есть даже в не очень новых платах, но второй обязательный компонент этой поддержки — ACPI-совместимый BIOS — может и отсутствовать. В таком случае вам может помочь прошивка новой версии BIOS, если плата все же достаточно продвинута сама по себе, хотя рассчитывать на то, что производитель озаботился написанием такой прошивки, можно далеко не всегда.

Преимущества и недостатки ACPI систем с точки зрения конфигурирования аппаратуры

Законный и самый первый вопрос — какие преимущества получили пользователи обычных систем при переходе на операционные системы, поддерживающие ACPI. Что изменилось в обычной работе компьютера? На данный вопрос можно довольно смело отвечать — ничего. Пока все работает нормально, и ACPI, и традиционная система совершенно равнозначны — по производительности, надежности и вообще почти по всем реальным показателям. Основное практическое отличие ACPI систем — система назначения и разделения прерываний шин PCI и AGP теперь работает немного по-другому. Хуже или лучше — сказать трудно, но можно смело отметить один, скорее неприятный, чем полезный момент: автоматизация всех конфигурационных процессов в Windows 2000 достигла слишком высокого уровня, и разрешить какой-нибудь конфликт вручную стало трудно. Слишком часто драйвера Windows 2000, идейно рассчитанные на работу в ACPI режиме, не дают изменить прерывания, используемые PCI и AGP устройствами. Имеется, например, нехорошая тенденция ACPI систем назначать многим устройствам одно прерывание даже в случае наличия свободных ресурсов — просто потому, что платы "согласились" работать в кооперативном режиме. Будет ли реально работать подобная связка — вопрос далеко не такой однозначный, и иногда хочется просто биться головой об стену от своего бессилия разнести три устройства, получившие 9-е прерывание и вешающие компьютер при попытке работы с одним из них, на разные — свободные! — ресурсы.

Есть ли какие-то положительные моменты от присутствия ACPI в системе работы с прерываниями? Да, какой-то плюс в этом есть в том случае, если ваша система имеет все-таки намного больше устройств, чем прерываний. Если коса не найдет на камень, то, как показывает практика, у системы в ACPI-режиме есть больше шансов удачно сконфигурировать прорву потенциально конфликтующих устройств.

Подводя итог, можно отметить такой момент: сложная система, сама по себе имеющая поддержку ACPI, может оказаться не совсем совместимой и корректно заработать в Windows 2000 только лишь в ACPI режиме — или, наоборот, только в традиционной конфигурации. Какой из двух вариантов лучше — для обычной работы компьютера не важно: лишь бы устройства работали так, как вам нужно. Мне приходилось переводить компьютеры из ACPI-конфигурации в традиционную или наоборот просто потому, что вариант разделения прерываний той или иной системы работы был предпочтительнее — например, потому, что звуковая карта вдруг получала таки отдельное прерывание и переставала заикаться при работе модема, и т.п. Возьмите на заметку: коренным образом изменить конфигурацию системы можно, выключив ACPI режим. Иногда это к тому же даст возможность вручную изменять некоторые прерывания и ресурсы, которые ранее конфигурировались исключительно автоматом. Переход из ACPI в стандартную конфигурацию — это хоть и глобальная, но, обычно, не представляющая опасности операция, которую можно осуществить так: зайти в менеджер устройств, и в разделе Computer (Компьютер) изменить "драйвер" для единственного подпункта — вашего компьютера — на Standard PC (или на подходящий многопроцессорный тип, если у вас более серьезная машина).

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

Подводя некоторый итог — ACPI в Windows 2000 хоть и работает вполне корректно, но по-прежнему не является обязательным для полноценного функционирования системы. Я наблюдал работу многих портативных и стационарных компьютеров и в ACPI-режиме, и без него, и пришел к выводу, что за поддержкой ACPI гнаться в настоящий момент все еще не стоит. Улучшенные возможности конфигурирования оборудования могут выйти боком с той же вероятностью, с какой могут реально решить конфликт устройств, а управление питанием неплохо работает и по старинке — через APM. Некоторые компьютеры, впрочем, могут потерять какие-то функции — например, блок питания ATX может перестать сам выключаться без ACPI. А может и не перестать. Ноутбуки, например, продолжают функционировать в этом плане совершенно нормально, так что это зависит лишь от вашего компьютера.

2. Управление питанием

В смысле управления питанием и режимами работы компьютера стандарт ACPI является дальнейшим развитием стандарта APM (Advanced Power Management). ACPI разрабатывалась, в частности, специально для поддержки технологии OnNow — идеология устройства компьютера, который готов быстро проснутся и приступить к работе в любое время. К счастью, в Windows 2000 большинство возможностей по управлению питанием реализовано и в APM-режиме, поэтому пользователям более старых или не работающих в ACPI-режиме машин не придется жалеть об упущенных возможностях. К слову, APM уже не используется в Windows 2000 в системах на основе ACPI.

Windows 2000 имеет два режима сна.

  • Режим Hibernate — сброс всех данных из памяти на диск и полное выключение компьютера. При следующем запуске система просто восстанавливает вашу работу там, где вы ее закончили. Основная ценность данного режима заключается в том, что компьютер действительно полностью выключается.
  • Режим Stand by — "ждущий режим" — менее кардинальное действие, полезное, в основном, лишь пользователям портативных компьютеров. Компьютер останавливает жесткий диск, выключает экран и большинство периферийных устройств и как может понижает энергопотребление процессора. Реализация данного режима зависит от аппаратуры, но общая и главная характеристика режима Stand by — компьютер остается работать, а ваши данные находятся в памяти. Настольные системы часто не предоставляют режима Stand by, так как он работает там не очень эффектно — основной вентилятор блока питания остается работать, и компьютер по прежнему нельзя считать спящим хотя бы по уровню шума.

Поговорим подробнее об этих режимах и о том, какие практические трудности могут возникнуть при желании их применить.

Hibernate

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

При входе в режим Hibernate производится остановка большей части устройств компьютера — при этом драйвера устройств сохраняют режим их работы, чтобы затем восстановить его в то же состояние. Если какой-то драйвер не может сделать этого — например, во время работы модема — он откажет системе в переходе в состояние Hibernate. Продолжительность данной фазы ("Preparing to hibernate") зависит от аппаратуры и драйверов, но в среднем она продолжается не более 5-10 секунд. Вторая фаза процесса — сброс данных памяти на диск — зависит от скорости диска и емкости ОЗУ, и может длиться в районе 10 — 40 секунд. Файл, в который сохраняется память системы, называется hiberfil.sys и располагается в корневом каталоге системного диска.

Выход из режима Hibernate осуществляется примерно с той же скоростью, что и вход в него — вместо загрузки системы с нуля на текстовом экране с полоской внизу идет прогресс восстановления памяти системы, а потом — еще 5 — 10 секунд на восстановление состояния устройств компьютера, и вы снова готовы к работе. Что случится, если система не сможет восстановить свое состояние? Это будет эквивалентно перезагрузке, т.е. вы потеряете ваши данные, с которыми работали в момент входа в Hibernate. Стоит отметить, что содержимое дисковых кэшей на запись сбрасывается на диск при входе в Hibernate, но это не поможет вам вернуть данные программ. Если система сможет определить, что восстановление прошло неудачно, то при следующем запуске она предложит вам попробовать еще разок. Альтернативой будет обычная загрузка с нуля с потерей ваших данных. Если вы не сможете устранить причину неудачи, вам придется так и поступить.

Что может помешать компьютеру грамотно выйти из режима Hibernate? Причин может быть две. Первая — это неудачный вход в Hibernate или повреждение данных, необходимых для выхода, что, в общем-то, одно и то же, причем фатально. Вторая причина (более реальная) — изменение в промежутке между засыпанием и просыпанием каких-то параметров компьютера, которые не позволят восстановить работу в исходное состояние:

  • Изменение конфигурации дисков. Общее правило такое — в режиме Hibernate в общем случае можно добавлять дисковые устройства. Это, конечно, неграмотно — компьютер по идее не должен изменять свою конфигурацию, но добавление лишнего диска Windows 2000 переварит, или хотя бы не заметит (до нормальной перезагрузки). Но будьте внимательны — если добавление диска вдруг изменит конфигурацию оборудования (например, контроллеров), то может оказаться, что вы не сможете восстановиться, поэтому будьте осторожны и с добавлением дисков. Отключать диски не рекомендуется: даже если это простой IDE CD-ROM, который не используется системой, вы с вероятностью близкой к 100% повисните сразу после восстановления из Hibernate. Постарайтесь также не изменять параметры дисков или файлов из других операционных систем. Windows 2000 при восстановлении из режима Hibernate блокирует загрузку других систем своим загрузчиком, но если вы все-таки умудрились получить доступ к этому диску — не трогайте его, иначе вы можете устроить серьезную аварию файловой системы, вплоть до фатальной.
  • Отключение и подключение плат. Очень сильно постарайтесь этого не делать, хотя, в общем-то, эта операция может быть выполнена корректно. Но такая практика, к сожалению, слишком часто приводит к сбою. Вам нужна лотерея с вашими данными?
  • Постарайтесь не изменять параметры BIOS. Изменение некоторых настроек может быть еще "круче", чем добавление аппаратной конфигурации компьютера (или, собственно, приводить к тому же — к изменению режимов работы chipset-а материнской платы, например).

По умолчанию Hibernate в системе Windows 2000 выключен. Это сделано, видимо, потому, что файл, необходимый для сохранения всего состояния системы, равен объему оперативной памяти компьютера. В некоторых ситуациях автоматическое создание такого файла на этапе инсталляции может быть нежелательно. Включить поддержку Hibernate можно через панель управлением: Power, закладка Hibernate. Если у вас нет этой закладки, то, к сожалению, придется констатировать факт: ваша система не поддерживает режим Hibernate. Есть, в общем-то, одна причина, которая может привести к этому — наличие драйверов, которые не поддерживают технологию OnNow:

  • Драйвера аппаратуры, не поддерживающие OnNow в принципе, т.е. не знающие, как приостановить или выключить свое устройство, сохранив его состояние. Причины могут быть разные: например, специфическое оборудование, которое действительно не позволяет выполнить подобную операцию. Чаще случается, впрочем, что драйвер просто не умеет этого делать из-за того, что поленились программисты. Решение проблемы: попробовать отключать драйвера плат или аппаратов (если вы не имеете понятия о том, какое именно устройство виновато) и смотреть, не появилась ли закладка Hibernate (возможно, придется перезагружаться). Если вы сможете понять, в чем дело, то постарайтесь либо достать новый драйвер, либо… новое/другое устройство. Возможность работы режима Hibernate (т.е. комфортабельность вашей работы) часто стоит таких денег; особенно это касается работы с ноутбуком.
  • Драйвера аппаратуры от Windows NT4.0 — любой из них принесет вышеописанные трудности.
  • Драйвера, не имеющие прямого отношения к аппаратуре, тоже могут вызвать невозможность входа в Hibernate. К программам, использующим подобные драйвера, можно отнести всякие системные утилиты: в основном, мониторы или драйвера программной поддержки абстрактны аппаратных решений. Например, системы поддержки CD-RW от Hewlett Packard ранних версий не имели завязки на аппаратуру CD-RW, но, тем не менее, препятствовали входу в Hibernate. Были пойманы на невозможности войти в Hibernate некоторые ранние мониторы из очень удачного набора от System Internals, но, к счастью, к последующим версиям эта проблема исправилась. Как вывод: если драйвер не имеет отношения к аппаратуре, его всегда можно переписать для поддержки Hibernate, так что просто поищите новую версию программ. Прямая поддержка Windows 2000 будет почти гарантировать правильную работу. Как отловить драйвер, не дающий вам этой возможности? Скорее всего, вам поможет такой алгоритм работы: пойти в менеджер устройств, зайти там в меню View — Show Hidden Devices, и в разделе Non-Plug and Play Drivers поискать виноватого. В данном разделе изначально присутствуют десятки системных драйверов, оставшихся от архитектуры NT4.0, поэтому ищите что-то такое, что называется созвучно с установленными у вас пакетами. К сожалению, не получается придумать более конкретного алгоритма поиска виноватых драйверов — могу добавить только, что название не-P&P драйвера в подавляющем большинстве случаев соответствует имени файла с расширением .sys, который должен лежать где-то на диске (например в winnt\system32\drivers). В информации о версии файла (правой щелчок мыши — свойства) проводника вы сможете посмотреть, за что отвечает каждый конкретный драйвер этого раздела, и найти "лишний" драйвер, чтобы затем уже отследить сам продукт.

Стоит учесть еще такой момент — если вы в какой-то момент потеряли возможность Hibernate, файл hiberfil.sys все равно останется на вашем диске. Вы не сможете стереть его — вам придется отключить мешающий драйвер, отключить Hibernate, а потом уже снова поставить драйвер. К сожалению, более простых путей, кажется, нет — даже если физически удалить таки файл, он появится снова. Будьте осторожны перед добавлением устройств, которые, как вы наверняка знаете, отключат Hibernate.

Надежность Hibernate

К сожалению, вход в режим Hibernate — довольно ответственная операция, которая вместо ожидаемого результата может привести к потере всех ваших данных. Ни в коем случае не рекомендуется надеяться на Hibernate, если вы работаете с важными документами и думаете, что сможете продолжить работу с ними позже — даже в случае успешного входа есть реальная возможность потерять данные уже при восстановлении работы (см. выше). Некоторые конфигурации оборудования в принципе выполняют Hibernate, но виснут в процессе подготовки устройств к нему — скажем, один раз из сотни. Как бороться с такой неприятной проблемой? Основной подход: отключать лишние драйвера и устройства. Первые кандидаты на выключение — мультимедийные драйвера (джойстики (game port), MIDI порты (MPU/401…), ненужные синтезаторы, и т.д. Мне встречались ситуации, к примеру, когда отключение MPU-401 Compatible MIDI device делало возможным правильный вход в Hibernate для тех компьютеров, где корректного драйвера (от производителя) для этого устройства не находилось. Можно отключить также контроллеры USB, IrDA, PCMCIA (если вы ими, конечно, не пользуетесь). Кроме повышения надежности процесса часто это приводит и к существенному ускорению сохранения состояния компьютера — ну, по крайней мере, на пару секунд. Если у вас все хорошо, то, скорее всего, будет разумнее оставить все как есть, но в случае возникновения проблем с Hibernate возьмите этот метод на заметку.

К сожалению, приходится констатировать — перед Hibernate желательно все-таки сохранить все документы и закончить работу. Шанс повиснуть вместо входа в Hibernate в отлаженной системе хоть и очень мал, но по-прежнему вполне реален. Видимо, эта проблема сойдет на нет с появлением более качественных драйверов, компьютеров и устройств/плат, но пока приходится быть хоть слегка, но осторожным с использованием Hibernate (по крайней мере, до тех пор, пока вы не убедитесь, что на вашем компьютере он работает как часы). Даже в таком случае, впрочем, все равно есть шанс все угробить, сделав невозможным корректное восстановление. Не думайте, что я вас слишком сильно пугаю — я сам с некоторых пор активно пользуюсь Hibernate, но этот процесс, несмотря на свое огромное удобство, все-таки дает порой неприятные сбои.

Ну и в заключение — совет: операционная система работает немного лучше, если ее чаще перезагружать. После недель суммарной времени без перезагрузки (ведь Hibernate — это просто пауза в работе) ваша система потеряет на различный шлак довольно много памяти. Для систем с, скажем, более чем 64 Мбайт памяти, это не очень критично, а вот пользователям систем с дефицитом памяти советую иногда перезагружаться и реально.

Hibernate и ACPI

Какие преимущества дает здесь ACPI? К сожалению, практически никаких. Опыт показывает, что Windows 2000 работает с Hibernate и с ACPI, и без ACPI примерно одинаково. Единственный момент, который можно отметить на большинстве машин — ACPI-конфигурации делают вход в Hibernate немного быстрее, но эта разница не представляет решающего значения. Приходится констатировать, что ACPI, несмотря на то, что разрабатывался он специально для технологии OnNow, не приносит никаких внятных преимуществ ни в надежности, ни в скорости процессов засыпания и пробуждения. Жаль, но очередной шаг стандартов явно не принес облегчения — даже ACPI-совместимая система, все компоненты которой в отдельности совместимы с OnNow, порой без этого самого ACPI работает намного лучше.

Stand by

Режим Stand by полезен в основном пользователям ноутбуков, так как при использовании Stand by на ноутбуках создается иллюзия полного выключения компьютера, а на большом компьютере часто продолжает работать основной вентилятор блока питания. Основное достоинство режима Stand by — вход и выход осуществляется практически мгновенно (основное время, которое на это затрачивается — остановка и раскрутка жестких дисков). Основной недостаток — данные остаются в памяти, процессор продолжает хоть и спать, но скорее работать, чем нет. В режиме Stand by нельзя полностью отключать питание: данные будут потеряны, и ваша рабочая сессия тоже. Данные, к примеру, можно потерять и простым статическим разрядом или любым другим сбоем, который повредит данные памяти (в таком случае вы тоже потеряете свою сессию). Это особенно актуально для ноутбуков — как показывает практика, транспортировка ноутбука в режиме Stand by может быть очень неудачна, причем сразу по нескольким причинам:

  • · Не очень качественные ноутбуки обладают повышенной чувствительностью к тряске — она не повредит аппаратуре, но сможет вызывать сбой в памяти (например, плохой контакт в модуле расширения памяти), которая работает в режиме Stand by.
  • Компьютер может сам выйти из режимa Stand by, восприняв какой-то внешний раздражитель — сигнал от модема, от сетевой карты (эти два типа устройств могут выдать ложные срабатывания), от многих других устройств или даже просто по программным мотивам — всего не перечислить и все причины "пробудки" не найти и не отключить. Опять же, не хочу вас пугать, но если ноутбук, к примеру, вдруг проснется во время транспортировки и жесткий диск начнет работать, вы можете запросто его угробить: в работающем режиме жесткие диски ноутбуков боятся тряски, ударов и вибраций, вполне нормальных для выключенного диска. Настоятельно рекомендую убедиться, что компьютер не выходит из режима Stand by сам по себе без внятных причин — только после этого можно быть уверенным в надежности Stand by. На настольных машинах это не столь критично, так как практика показывает, что, сделав свои дела, компьютер обычно через 20-30 секунд засыпает вновь, но, как я уже говорил выше, для ноутбука и это может быть фатально.

При чем тут ACPI? Я бы не сказал, опять же, что ACPI хоть как-то улучшил этот процесс. Компьютеры входили в Stand by c незапамятных времен, уж ноутбуки так точно. К сожалению, ACPI принес в этот процесс только одно — некоторые компьютеры в APM-режиме не видят собственных кнопок-детекторов состояний закрытости крышки дисплея и т.д., тогда как ACPI-совместимая система имеет поддержку этих кнопок в хорошо проработанном стандарте и не требует различных драйверов и программ производителя. В остальном же — полный ноль реальных отличий.

Выводы

К сожалению, приходится говорить, что система энергосбережения в Windows 2000 не очень далеко ушла, скажем, от Windows 98. Основной шаг вперед — реально работающий Hibernate, которого раньше на практике просто не было. Основные трудности так и остались — надежность всех процессов осталась на прежнем, довольно низком, уровне. Не побоюсь сделать вывод — ноутбуки многих распространенных производителей до сих пор не имеют Windows 2000 по умолчанию именно потому, что заставить их надежно работать с этой ОС не поможет ни ACPI, ни даже сам господь бог. Повезло — грандиозно: на эту модель тут же ставится Windows 2000. Нет? Проблемы с драйверами, с кодом BIOS, с сочетанием программных компонент, с самой ОС, в конце концов — и появляются подобные мысли, и приходится долго рассуждать над проблемами соответствующих процессов. Даже сам производитель не может порой заставить свой портативный или очень сложный настольный компьютер работать с Windows 2000, и ACPI, порой, только добавляет проблем.

Если вы решились устанавливать Windows 2000 на подобный компьютер сами, на компьютер, от которого вы хотите работы полного потенциала средств "энергосбережения" — вам почти гарантированы различные проблемы. Единственный реальный плюс спецификации ACPI — это то, что вам не понадобятся драйвера к энергосберегающей части вашей системы. Если вам повезет, Windows 2000 сама разберется со всем имеющимся оборудованием и функциональностью через ACPI. Если же нет…

Что же, только несколько лет назад производители компьютеров пришли к идее стандартизации самого понятия компьютер. Компьютер как нечто глобальное. И только совсем недавно они смогли сделать первые реальные шаги. Спецификации типа PC-2001, да и тот же ACPI — первые робкие инициативы по стандартизации самих основ. Может быть, кто-то все-таки прислушается к PC-2001.. может быть, кто-то реализует и тот же ACPI — реализует нормально, причем претензии по текущему состоянию дел можно предъявлять как Microsoft, так и производителям железа. Пока же мы наблюдаем типичную для систем Windows картину: "сама ничего сделать не могу, но и вам не дам". Даже если решения проблем очевидны, добиться простейших изменений алгоритма работы от ACPI-системы стало воистину невозможно, и это первый реальный минус. Будут ли плюсы? Да, будут. Какие-то плюсы есть и сейчас… основная же их масса, наверное, так и будет оставаться в мечтах разработчиков стандартов, по крайней мере, еще несколько лет.





Дополнительно