28 Фев 20118
Составить
полное представление о загрузке Windows 7 и Vista можно с помощью
набора Windows Performance Toolkit. Утилиты командной строки xbootmgr и xperf
позволяют создать подробный отчет о запуске системы и представить его в
графическом и текстовом виде для всестороннего анализа загрузки.
Эта статья продолжает серию материалов о загрузке Windows. Вы уже знаете, как получить подробный отчет о загрузке и устранить основные системные проблемы, а также ускорить загрузку системы, не прилагая особых усилий. Вы также познакомились со способом диагностики загрузки с помощью журнала событий. Я уверен, что после изучения этих статей и применения полученных знаний на практике ваша система стала загружаться быстрее.
Однако эти простые способы не позволяют выявить скрытые факторы или
проблемы, замедляющие загрузку Windows. Теперь настало время
познакомиться поближе со всеми этапами загрузки Windows и провести их
детальный анализ с помощью Windows Performance Toolkit (WPT).
На этой странице:
Загрузка и установка WPT
Поскольку набор Windows Performance Toolkit 4.7 для Windows 7 и Vista
недоступен для отдельной загрузки, этому вопросу придется уделить чуть
больше внимания, чем обычно. Самый простой и экономичный с точки зрения
трафика способ – это скачать его с помощью веб-установщика Windows 7 SDK. Пройдя все приветственные окна установщика, вы увидите страницу с выбором компонентов.
Увеличить рисунок
Здесь нужно снять все флажки кроме одного, показанного на рисунке и продолжить установку.
Решения некоторых проблем с установкой SDK вы найдете здесь.
Вы, наверное, обратили внимание, что WPT присутствует в двух узлах.
Если вам нужны пакеты MSI, их можно скачать, отметив флажок в узле Redistributable Packages.
После установки вы найдете пакеты для различных архитектур в папке
Program Files\Microsoft SDKs\Windows\v7.1\Redist. Если вы выбрали только
этот вариант (вместо рекомендуемого выше), запустите установку двойным щелчком по MSI-пакету.
Подготовка к работе
Следуя трем простым правилам, вы застрахуете себя от возможных
проблем, обеспечите правильную работу всех команд и точно измерите
длительность загрузки.
- Прежде чем выполнить первую команду, создайте точку восстановления системы и убедитесь, что у вас есть под рукой установочный диск / флэшка или диск восстановления. Предупреждение вовсе не дежурное, ибо случаи неадекватного поведения WPT были отмечены у нас на форуме, да и сам я их видел.
- Включите автоматический вход в систему, чтобы задержка на ввод пароля не влияла на измерения.
- Убедитесь, что на разделе есть несколько гигабайт свободного
пространства, поскольку при анализе могут создаваться файлы большого
размера.
Все команды выполняйте в командной строке, запущенной от имени администратора. Там же можно добавить в меню пункт для ее запуска в нужной папке – пригодится.
Сбор данных
Все логи загрузки лучше хранить в одной папке, допустим, C:\Trace. Откройте командную строку с полными правами и введите:
Здесь и далее я буду использовать пути применительно к этой папке и
стандартной установке WPT в 32-разрядной Windows 7. При необходимости
изменяйте пути на свои.
Закройте все программы и сохраните все документы. Процесс сбора данных о загрузке системы запускается одной командой:
1 | xbootmgr -trace boot -traceFlags BASE+CSWITCH+DRIVERS+POWER -resultPath C:\Trace
|
Аналогичные команды можно использовать для диагностики гибернации:
1 | xbootmgr -trace hibernate -traceFlags BASE+CSWITCH+DRIVERS+POWER -resultPath C:\Trace
|
и сна:
1 | xbootmgr -trace standby -traceFlags BASE+CSWITCH+DRIVERS+POWER -resultPath C:\Trace
|
Примечание. Если при выполнении
команд вы видите сообщение «xbootmgr не является внутренней или внешней
командой», установка была неудачной. Вы найдете решение в этой теме форума.
Вернемся к загрузке, однако. Компьютер будет перезагружен. Если после
входа в систему вы увидите запрос UAC от xbootmgr, разрешите утилите
продолжить работу. Через две минуты вы увидите примерно такое окно.
Когда оно исчезнет, в папке C:\Trace должно быть три файла, как показано на рисунке ниже.
Если вы вместо файла boot_BASE+CSWITCH+DRIVERS+POWER_1.etl
видите там два других файла с расширением ETL, это может означать, что
утилита еще работает, над их объединением в один – подождите несколько
минут. При отсутствии изменений выполните в командной строке
и перезагрузите систему. После чего попробуйте заново запустить сбор данных.
Файлы, используемые для анализа
Я думаю, что вы уже успели дважды щелкнуть файл boot_BASE+CSWITCH+DRIVERS+POWER_1.etl
и полюбоваться красивыми графиками и диаграммами. В левой панели
графики можно отображать и скрывать, а также переходить к ним двойным
щелчком мыши.
График Boot Phases отражает длительность основных этапов
загрузки, которые мы будем рассматривать подробнее дальше. На нем видно,
что последний этап, Post Boot занял 26 секунд (Duration), а общее время загрузки составило 64 секунды (End Time).
Увеличить рисунок
Для определения длительности основных этапов загрузки можно выделять
их мышью, как показано в нижней части рисунка. Можно также щелкнуть на
графике правой кнопкой мыши и выбрать из меню пункт Summary Table, чтобы получить отчет в табличном режиме (верхняя часть рисунка).
Для удаленной диагностики по почте или в форуме можно создать текстовый отчет в виде XML-файла. Выполните команды:
1 2 | cd c:\trace
xperf /tti -i boot_BASE+CSWITCH+DRIVERS+POWER_1.etl -o summary_boot.xml -a boot
|
Первая переходит в папку с логами, а вторая — создает требуемый XML-файл. Для его просмотра отлично подойдет Internet Explorer!
Увеличить рисунок
Сложите узлы, как показано на рисунке, чтобы лучше видеть общую картину. В узле timing
указано время в миллисекундах, и там можно увидеть длительность двух
больших, условно говоря, частей загрузки (выделены зеленым):
- bootDoneViaExplorer – время загрузки операционной системы вплоть до появления рабочего стола, в данном примере 37 секунд
- bootDoneViaPostBoot – полное время загрузки системы, рабочего
стола и всех программ в автозагрузке, в данном примере 64 секунды (из
этой цифры следует вычесть 10 секунд, в течение которых определяется
полное бездействие системы)
Время первой части складывается из основных этапов загрузки
операционной системы (обведены синим), вплоть до начала загрузки
рабочего стола. В уже знакомом вам событии 100 журнала Diagnostics-Performance длительность этого этапа записывается в параметре MainPathBootTime.
Разница между этими двумя частями – это время от начала загрузки рабочего стола, до его полной готовности. В событии 100 журнала Diagnostics-Performance — это BootPostBootTime.
Этапы загрузки Windows и их диагностика
Для анализа загрузки нужно представлять, не только в какой
последовательности эти этапы идут, но и что происходит на каждом из них.
К сожалению, официальная документация не дает ответа на этот вопрос, но
мне удалось найти на MSFN замечательное руководство
на английском, которое содержит необходимую и достаточную информацию по
этому вопросу. Далее я предлагаю вам его в своем изложении, с
дополнениями и в сопровождении собственных примеров диагностики.
На рисунке ниже представлены три основных этапа загрузки, причем главный из них состоит из четырех фаз.
Увеличить рисунок
Давайте рассмотрим все этапы подробно.
Этап OSLoader
Этап OSLoader следует сразу после инициализации BIOS.
Визуально он начинается после заставки и диагностических экранов BIOS, а
заканчивается примерно с появлением экрана «Загрузка Windows».
На этапе OSLoader:
- загрузчик Windows (winload.exe) загружает основные системные драйверы, которые необходимы для считывания минимально необходимого набора данных с диска
- затем загрузчик инициализирует систему до момента, с которого становится возможной загрузка ядра
- когда ядро начинает загружаться, winload.exe помещает в оперативную память системный раздел реестра и дополнительные драйверы, помеченные в качестве BOOT_START
Длительность этапа отражает значение параметра osLoaderDuration в узле timing XML-файла. Обычно, она в находится в пределах 2-3 секунд.
Этап MainPathBoot
Визуально этап MainPathBoot начинается с экрана «Загрузка
Windows» и завершается при появлении рабочего стола. Если не настроен
автоматический вход в систему, длительность этого этапа увеличивается за
счет времени, которое требуется для ввода пароля.
Во время этапа MainPathBoot происходит основная работа по загрузке операционной системы:
- инициализируется ядро
- происходит определение устройств Plug and Play (PnP)
- запускаются службы
- выполняется вход в систему
- инициализируется Explorer, т.е. система готовится к загрузке рабочего стола
Этап состоит из четырех фаз, каждая из которых обладает собственными
характеристиками и может по-своему влиять на длительность загрузки
системы.
Фаза PreSMSS
Визуально фаза PreSMSS начинается примерно с экрана «Загрузка Windows», но ее окончание невозможно определить на глаз.
Фаза PreSMSS (в графическом представлении WPT она обозначена как Pre Session Init) начинается с инициализации ядра. Во время нее:
- ядро инициализирует структуры данных и компоненты, а затем запускает диспетчер PnP
- диспетчер PnP в свою очередь инициализирует драйверы BOOT_START, которые были загружены с помощью winload.exe на этапе OSLoader
- когда диспетчер PnP обнаруживает устройство, он загружает необходимый драйвер и выполняет его инициализацию
Диагностика
Если фаза занимает много времени, ищите в XML-файле в узле <PNP> драйвер, который долго загружается. Диагностику в графическом режиме я покажу на примере следующей фазы.
Фаза SMSSInit
Визуально начало фазы SMSSInit невозможно определить. Ее
частью является пустой экран, который отображается между заставкой и
экраном входа в систему, чье появление сигнализирует о завершении фазы.
Фаза SMSSInit (в графическом представлении WPT она обозначена как Session Init) начинается с того, что ядро передает контроль диспетчеру сессий (smss.exe). Во время этой фазы система:
- инициализирует реестр
- загружает и запускает устройства и вторую волну драйверов, которые не помечены как BOOT_START
- запускает процессы подсистемы
Фаза завершается с передачей контроля процессу winlogon.exe.
Диагностика
Наиболее
распространенной причиной задержек в этой фазе являются драйвер
видеокарты. Он инициализируется сначала во время системной сессии, а
затем во время пользовательской. При этом инициализация во время
пользовательской сессии занимает меньше времени, потому что в течение
системной параллельно выполняется запуск других задач.
Сократив время запуска драйвера видеокарты, можно уменьшить длительность загрузки системы. Таким образом, если фаза SMSSInit затягивается, обновите драйвер видеокарты.
Более точную диагностику можно провести с помощью графиков Boot Phases и Driver Delays примерно так:
- На графике Boot Phases выделите фазу Session Init и выберите из контекстного меню команду Clone Selection. Выбранный период будет выделен на всех активных графиках.
- На графике Driver Delays щелкните правой кнопкой мыши и выберите из меню команду Set Delay Threshold.
Она позволяет отфильтровать драйверы по времени задержки. Введите,
например 2000, чтобы отобразить драйверы, загружавшиеся дольше двух
секунд.
Увеличить рисунок
Вы увидите все драйверы, загружавшиеся в фазе Session Init
дольше заданного времени. У меня вся фаза занимает 6 секунд, и
двухсекундная задержка драйверов является нормальной. Но если у вас
проблемы в этой фазе, с помощью фильтра вы сразу увидите, какой драйвер
их вызывает.
Фаза WinLogonInit
Визуально фаза WinLogonInit начинается перед появлением экрана приветствия, а завершается перед появлением рабочего стола.
Фаза WinLogonInit начинается сразу после запуска winlogon.exe. Во время этой фазы:
- отображается экран приветствия
- диспетчер управления службами запускает сервисы
- происходит запуск сценариев групповой политики
Фаза завершается запуском оболочки Windows — процесса explorer.exe.
Диагностика
Во время фазы WinLogonInit
выполняется множество параллельных операций. На многих системах она
характеризуется нагрузкой на процессор и большим количеством операций
ввода-вывода (I/O). Длительность фазы во многом зависит от поведения
служб.
Чтобы обеспечить плавную загрузку системы, службы могут объявлять
зависимости или использовать порядковые группы загрузки. Windows
обрабатывает группы загрузки в последовательном порядке. Поэтому
задержка даже одной службы в ранней группе может затягивать загрузку
следующей группы служб и тормозить весь процесс загрузки.
Для выявления проблемной службы удобнее всего использовать
графические возможности WPT. Откройте ETL-файл двойным щелчком мыши и
прокрутите отчеты вниз до графика запуска служб.
Увеличить рисунок
Зачастую проблема вызвана не системными, а сторонними службами. На
рисунке хорошо видно, что среди автоматически стартующих служб дольше
всего загружаются три:
- Apache 2.2
- MySQL
- TeamViewer
При этом Apache блокирует загрузку следующей группы служб (очевидно, в ее отсутствие это сделала бы служба TeamViewer).
Поскольку ни одна из этих служб не является системной, проблему легко
решить. Можно в оснастке «Службы» изменить тип ее запуска на отложенный и
посмотреть, будет ли она быстрее запускаться на более позднем этапе.
Если это не дает эффекта, можно вовсе отключить службу и запускать ее
вручную при необходимости. Во второй волне служб, имеющих отложенный тип
запуска, видна задержка WSearch, отвечающей за поиск Windows, но я не стал ее трогать пока.
Чтобы увидеть время запуска каждой службы, щелкните точку
начала запуска и растяните диапазон до ее конца. Для изменения масштаба
графика крутите колесо мыши, удерживая нажатой клавишу CTRL.
Отключение трех вышеперечисленных служб позволило сократить общее
время загрузки почти на 40 секунд! Обратите внимание, что группа
автоматического запуска служб теперь стартовала намного быстрее
(смотреть нужно относительно шкалы времени, т.к. масштаб графиков
разный).
Wsearch все равно запускается дольше других служб, но уже
всего 8 секунд вместо 30, что не мне дает достаточно оснований к ней
придираться.
Если задержку вызывает антивирусная программа, отложенный запуск
службы может понизить уровень защиты, а ручной запуск или отключение
службы могут нарушить работу программы. В этом случае можно лишь
посоветовать обновить антивирус до последней версии. Если это не дает
эффекта, вам придется сделать выбор между любимой программой и
длительностью загрузки.
Фаза ExplorerInit
Визуально фаза ExplorerInit начинается перед загрузкой рабочего стола, но ее окончание определить на глаз невозможно.
В фазе ExplorerInit:
- сначала запускается процесс explorer.exe
- затем система создает процесс диспетчера окон рабочего стола (DWM)
- DWM инициализирует рабочий стол и отображает его
Инциализация DWM и рабочего стола происходит на переднем плане, но в
это же время в фоне диспетчер управления службами (SCM) запускает
службы, а диспетчер памяти кеширует данные. Поэтому на многих системах
эта фаза сопровождается нагрузкой на процессор, и нередко задержки при
загрузке на этом этапе можно отнести на счет слабости аппаратных
ресурсов.
Диагностика
В течение фазы ExplorerInit ресурсы процессора могут
потреблять программы, работающие в качестве служб (например, защитные
программы или серверы приложений). Они запускаются либо в этой фазе,
либо продолжают свою загрузку, будучи запущенными в более ранних фазах. С
другой стороны, некоторые службы (например, с отложенным запуском)
могут быть еще не запущены на момент окончания фазы ExplorerInit.
Этап PostBoot
Этап PostBoot начинается после появления рабочего стола и завершается после того, как будет определено бездействие системы.
На этапе PostBoot рабочий стол уже загружен, и с ним можно
взаимодействовать. Но при этом параллельно в фоне выполняется различная
активность. Например, продолжается запуск служб и программ автозагрузки,
что может сопровождаться появлением их значков в области уведомлений.
Средства WPT определяют бездействие системы по следующему алгоритму.
Каждые 100 мс проверяется наличие активности в системе. Если бездействие
системы составляет не менее 80% (за исключением низкоприоритетных
процессов и дисковой активности), считается, что в этом интервале
система бездействует. Проверка продолжается до тех пор, пока не
наберется 10 секунд бездействия. Поэтому, определяя общее время загрузки
системы, вычитайте из значения bootDoneViaPostBoot 10000 мс, т.е. 10 секунд.
Диагностика
На этапе PostBoot запускаются приложения, находящиеся в автозагрузке. Чтобы сократить длительность этого этапа, нужно навести там порядок. В графическом представлении WPT используйте график Process Lifetimes, чтобы увидеть все процессы, которые запускаются или продолжают запуск на данном этапе.
Безусловно, диагностика загрузки с помощью WPT требует навыка, и с
наскоку разобраться в этом вопросе непросто. Но от вас и не требуется
профессиональных знаний, поскольку текстовый отчет в XML файле вкупе с
полным графическим представлением всех этапов загрузки позволяет быстро
определить причину задержек при запуске Windows. Мне будет очень
интересно узнать, полезна ли эта статья, помогла ли она выявить и
устранить задержки с помощью WPT, а также насколько ускорилась загрузка
системы в результате.
Тема ускорения загрузки еще не исчерпана — из моей книги вы узнаете,
как выжать максимум из системы с помощью Windows Performance Toolkit.
Вы прочли главу из электронной книги «Ускорение загрузки Windows». Подпишитесь на уведомления о новых записях по почте и получите книгу в подарок.
Источник: http://www.outsidethebox.ms/11287/ |