Быстрая загрузка Windows 8

Когда речь идет о «фундаментальных» возможностях, начать следует с времени загрузки — ни одна другая характеристика не вызывает столько разговоров и не измеряется так тщательно. Мы разработали Windows 8 таким образом, чтобы вам не приходилось так часто перезагружаться (и мы всегда будем работать над тем, чтобы максимально сократить число перезагрузок из-за исправления исполняемого кода). Но когда перезагрузка все-таки нужна, мы хотим, чтобы она происходила как можно быстрее. Это очень глубокая тема, и над ней работает много людей. В Windows 8 мы уделили такое внимание этой области, какое не уделяли уже долгое время, и в немалой степени это обусловлено необходимостью обеспечения взаимодействия всей «экосистемы». Эту статью (первую из серии статей, посвященных фундаментальным возможностям) написал Гейб Ол (Gabe Aul), директор отдела управления программой в группе разработчиков Windows.
--Стивен

Немногие операции в Windows исследуются, измеряются и обсуждаются так тщательно, как загрузка. Это вполне понятно — время загрузки представляет эффективный показатель общей производительности системы, и все мы знаем, что скорость загрузки очень важна для наших клиентов. Данные исследований показывают, что 57 % пользователей настольных ПК и 45 % пользователей ноутбуков завершают работу компьютеров, а не переводят их в спящий режим. То есть примерно половина всех пользователей завершают работу компьютеров, а не переводят их в спящий режим.

Круговая диаграмма режимов отключения ноутбуков с Windows 7, где 45 % пользователей используют спящий режим, 11 % используют гибернацию и 45 % применяют завершение работы (в том числе перезагрузку)
Круговая диаграмма режимов отключения настольных компьютеров с Windows 7, где 42 % пользователей используют спящий режим, 1 % используют гибернацию и 57 % применяют завершение работы (в том числе перезагрузку)

В качественном отношении пользователи говорят, что предпочитают завершение работы, так как хотят полностью выключить компьютер, чтобы он не потреблял энергию (для экономии заряда аккумулятора или сокращения расхода электроэнергии). Гибернация — также неплохой вариант с этой точки зрения, так как электроэнергия при этом почти не используется, и многие пользователи предпочитают гибернацию. Многие, но не все: мы также узнали, что многие пользователи хотят включать компьютер и видеть «чистый лист», а не систему с открытыми приложениями и документами из предыдущего сеанса. Спящий режим и возобновление работы — это лучший вариант для быстрого включения и выключения компьютеров, но он потребляет электроэнергию для сохранения содержимого оперативной памяти, что приводит к разрядке аккумулятора, пусть даже и медленной (в правильно настроенной системе). А теперь подумайте, как мы все используем мобильные телефоны: практически без перезагрузки и с постоянным использованием режима, очень близкого к спящему.

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

  • нулевое потребление энергии при отключении;
  • новый сеанс после загрузки;
  • очень короткое время между нажатием кнопки питания и готовностью компьютера к использованию.

В Windows 7 мы внесли много улучшений в способ загрузки, в том числе параллельную инициализацию драйверов устройств и службы, запускаемые определенными событиями, но было очевидно, что нам нужно использовать еще более креативный (и менее традиционный) подход, чтобы добиться скорости загрузки, хотя бы приблизительно соответствующей всем ожиданиям.

Нашим решением стал новый быстрый режим запуска, представляющий собой гибрид традиционной «холодной» загрузки и возобновления работы после гибернации.

Перед тем как я перейду к подробностям, будет полезно вспомнить, как завершение работы и загрузка реализованы в Windows 7.

Процедура завершения работы:

  1. Пользователь инициирует завершение работы, выбирая параметр «Выключить компьютер» в меню «Пуск» или нажимая кнопку питания, либо приложение инициирует завершение работы, вызывая функцию интерфейса API, например ExitWindowsEx() или InitiateShutdown().
  2. Windows транслирует сообщения запущенным приложениям, позволяя им сохранить данные и настройки. Приложения также могут запросить немного дополнительного времени на завершение своей работы.
  3. Windows закрывает сеансы каждого пользователя, вошедшего в систему.
  4. Windows отправляет сообщения службам, уведомляя их о начале завершения работы, а затем останавливает их. Упорядоченные службы с зависимостями отключаются последовательно, а остальные — параллельно. Если служба не отвечает, ее работа завершается принудительно.
  5. Windows передает сообщения устройствам, информируя их о необходимости завершения работы.
  6. Windows закрывает системный сеанс (который также называют «сеансом 0»).
  7. Windows записывает все данные, ожидающие записи, на системный диск, чтобы обеспечить их полное сохранение.
  8. Windows передает сигнал через интерфейс ACPI системе для отключения компьютера.

Процедура загрузки:

  1. После нажатия кнопки включения питания микропрограммное обеспечение компьютера запускает тест POST и загружает настройки. Этот предварительный процесс завершается после обнаружения допустимого системного диска.
  2. Микропрограммное обеспечение считывает основную загрузочную запись (MBR) и запускает программу Bootmgr.exe. Bootmgr.exe находит и запускает загрузчик Windows (Winload.exe) в загрузочном разделе Windows.
  3. Загружаются драйверы, необходимые для запуска ядра Windows, после чего начинает работать ядро, загружая в память куст системного реестра и дополнительные драйверы, отмеченные как BOOT_START.
  4. Ядро передает управление процессу диспетчера сеансов (Smss.exe), который инициализирует системный сеанс, загружает и запускает устройства и драйверы, не отмеченные как BOOT_START.
  5. Запускается Winlogon.exe, отображается экран входа пользователя в систему, диспетчер управления службами запускает службы, и выполняются заданные сценарии групповой политики. Когда пользователь входит в систему, Windows создает сеанс для этого пользователя.
  6. Запускается Explorer.exe, система создает процесс диспетчера окон рабочего стола (DWM), который инициализирует рабочий стол и отображает его.

На самом деле этот процесс намного более детальный; дополнительные сведения доступны здесь: https://msdn.microsoft.com/en-us/windows/hardware/gg463386

Главное — помнить, что при традиционном завершении работы мы закрываем все пользовательские сеансы, а в сеансе ядра мы закрываем службы и устройства для подготовки к полному выключению.

И вот основное отличие Windows 8: как и в Windows 7, мы закрываем пользовательские сеансы, но вместо того чтобы закрывать сеанс ядра, мы переводим его в режим гибернации. По сравнению с полной гибернацией, при которой сохраняется множество страниц памяти, используемых приложениями, объем данных гибернации сеанса 0 намного меньше, и они значительно быстрее записываются на диск. Если вы не знакомы с гибернацией, то в двух словах — система сохраняет свое состояние и содержимое памяти в файле на диске (hiberfil.sys), а затем читает его при возобновлении работы и восстанавливает содержимое памяти. Такой метод значительно сокращает время загрузки, так как чтение файла гибернации и повторная инициализация драйверов происходят значительно быстрее в большинстве систем (на 30-70 % быстрее в большинстве протестированных нами систем).

Линейная диаграмма со сравнением времени быстрой загрузки в Windows 8 с временем «холодной» загрузки в Windows 7 для 30 разных конфигураций ПК. Время запуска Windows 8 составляет от 15 до 33 секунд, а время «холодной» загрузки Windows 7 — от 25 до 72 секунд.
Пример результатов тестирования от System Integration.
Щелкните, чтобы увеличить диаграмму.

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

Линейная диаграмма с относительным временем для разных этапов загрузки системы. При «холодной» загрузке Windows 7 на тест POST и предварительные операции уходит 1/3 всего времени, на инициализацию системы — больше половины времени, а на инициализацию сеанса пользователя уходит около 1/5. При быстрой загрузке Windows 8 на тест POST и предварительные операции уходит 1/3 всего времени, затем читается файл гибернации и инициализируется сеанс пользователя, на что уходит по 1/4 всего времени; для инициализации драйверов требуется немного меньше времени, чем для чтения файла гибернации и инициализации сеанса пользователя.
Представление разных этапов «холодной» и быстрой загрузки.
Щелкните, чтобы увеличить диаграмму.

Возможно, следует упомянуть о том, как обрабатывается файл гибернации (если вы сейчас читаете эту статью и выполните команду dir /s /ah hiberfile.sys, вы узнаете, как много места на диске он занимает). По умолчанию размер файла гибернации составляет 75 % от объема физической оперативной памяти. Этот файл по сути резервирует место для данных гибернации, которые будут записаны при переходе системы в режим гибернации. Обычно используется намного меньше места на диске, а при использовании нашей быстрой загрузки размер файла обычно составляет около 10-15 % от объема физической оперативной памяти, но это зависит от установленных драйверов, используемых служб и других факторов. Кроме того, система обрабатывает файл гибернации не совсем так, как другие файлы на диске. Например, служба моментального снимка тома игнорирует его (что позволяет слегка увеличить производительность). Гибернацию можно отключить и освободить занимаемое место на диске, выполнив команду  powercfg /hibernate off в командной строке с повышенными привилегиями. Но помните: если сделать это, вы полностью отключите гибернацию, в том числе некоторые полезные функции, такие как быстрая загрузка и гибридный спящий режим, которые позволяют настольным системам одновременно переходить в спящий режим и режим гибернации, чтобы при отключении питания можно было возобновить работу из состояния гибернации. Можно также выполнить команду powercfg /hibernate /size и указать значение от 0 до 100 для объема физической оперативной памяти в процентах, зарезервированной для файла гибернации. Но будьте осторожны! Если указать слишком маленький размер, гибернация может привести к сбою. В общем случае я рекомендую использовать значение по умолчанию, если вы не работаете в системе с ограниченным местом на диске.

Еще одна важная отличительная черта быстрой загрузки Windows 8 состоит в том, что, хотя мы не и проводим полное перечисление драйверов устройств Plug & Play, мы все равно инициализируем драйверы в этом режиме. Те из вас, кто предпочитает «холодную» загрузку для «освежения» драйверов и устройств, будут рады узнать, что такой процесс действует и в новом режиме, хотя он и отличается от обычной «холодной» загрузки.

Новый режим быстрой загрузки дает преимущества почти во всех системах, как с традиционным жестким диском, так и с твердотельным диском (SSD-диском), но для новых систем с быстрыми SSD-дисками скорость загрузки просто потрясает! Посмотрите видео, приведенное ниже, чтобы убедиться самим:

Ваш браузер не поддерживает видео HTML5.

Загрузите это видео, чтобы просмотреть его в своем мультимедиа-проигрывателе:
MP4, высокое качество | MP4, низкое качество

В этом видео можно заметить, как быстро после выполнения проверки POST запускается Windows. В системах, использующих единый интерфейс EFI (UEFI), более вероятно достижение очень быстрой загрузки, чем в системах с традиционной системой BIOS. Это происходит не из-за того, что интерфейс UEFI быстрее сам по себе, а потому что разработчики UEFI начинают «с чистого листа» и могут лучше оптимизировать свои проекты по сравнению с функциями BIOS, которым уже очень много лет. Хорошие новости заключаются в том, что большинство производителей систем и материнских плат начали реализовывать UEFI, поэтому такая скорость загрузки будет доступна для большинства новых систем.

Конечно, бывают ситуации, когда требуется полное выключение компьютера, например если вы открываете системный блок, чтобы добавить или сменить оборудование. В пользовательском интерфейсе есть параметр, позволяющий вернуться в режим «холодной» загрузки Windows 7, или же (так как это будет происходить довольно редко) можно использовать новый параметр /full с командой shutdown.exe. В командной строке выполните следующую команду: shutdown /s /full / t 0, чтобы немедленно полностью выключить компьютер. Кроме того, если выбрать команду «Перезагрузка» в пользовательском интерфейсе, система полностью завершит работу, после чего будет осуществлена «холодная» загрузка.

Загрузкой системы в основном занимается группа разработчиков платформы ядра, но в случае Windows 8 несколько групп объединились, чтобы внести изменения в ОС для поддержки нового режима и некоторых других изменений, о которых мы с вами скоро поговорим. Нам очень нравится скорость загрузки Windows 8, и мы хотим, чтобы вы сами опробовали новый режим и рассказали нам, что вы об этом думаете.

Гейб Ол