Найти тему
It-Assistant

Изучение автозагрузки Windows с помощью Windows Performance Analyzer

Оглавление

Вы видели новый диспетчер задач Windows? Сегодня я раскрою вам тайное знание о нем и покажу, как копаться в Windows с помощью разных диагностических программ.

Неделю назад Холмс без особых усилий вычислил причину автоматического запуска Skype с помощью Process Monitor. В Windows 8 и более новых ОС история об автозагрузке могла бы выйти немного другой. И дело тут даже не в том, что в этой ОС не устанавливается ОЕМ-утилита производителя ноутбука, ставшая причиной проблемы. Все намного интереснее!

Управление автозапуском в Windows

Для управления программами, стартующими вместе с системой, в Windows исторически служила утилита msconfig. Список программ формировался на основе содержимого папки «Автозагрузка» (shell:startup) и нескольких разделов реестра:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run

В Windows 8 этот принцип сохранился, но функция перешла к диспетчеру задач.

Новинкой же стало отображение информации о влиянии на скорость загрузки системы. Вероятно, по замыслу создателей Windows, эти сведения должны помочь людям при расчистке автозапуска. Я предлагаю вам залезть под капот Windows и разобраться, как все это работает.

Как присваивается степень влияния на запуск Windows

Диспетчер задач слегка приоткроет вам завесу над тайной, если навести курсор на заголовок столбца.

-2

Конкретные параметры влияния на скорость запуска Windows таковы:

  • Высокое – приложение использует более 1 секунды времени процессора или свыше 3MB дисковых операций I/O
  • Среднее – приложение использует от 300 до 1000 мс времени процессора или от 300KB до 3MB дисковых операций I/O
  • Низкое – приложение использует менее 300 мс времени процессора и менее 300KB дисковых операций I/O

Давайте посмотрим, откуда диспетчер задач берет эти сведения.

Где хранятся результаты измерений

Найти источник данных оказалось очень легко. Настроив фильтр Process Monitor на процесс taskmgr, я включил отслеживание файловой активности и перешел в диспетчере задач на вкладку «Автозагрузка». Результат не заставил себя ждать — нашлась папка %WinDir%\System32\wdi\LogFiles.


Увеличить рисунок
Увеличить рисунок

Имя папки StartupInfo недвусмысленно намекало на ее содержимое. По указанному пути, действительно, обнаружилось несколько XML-файлов с примерно такими данными.


Увеличить рисунок
Увеличить рисунок

Очевидно, при запуске диспетчера задач происходит анализ XML-файла, соответствующего последней загрузке Windows. Затем сведения выводятся в упрощенном виде на вкладке «Автозагрузка». Если файлы удалить, степень влияния будет указываться как «Не измерено».

Как выполняются измерения

Уровнем выше, в папке LogFiles, оказались отчеты в формате ETL, в которых наряду с отчетом о загрузке Windows сохраняет также сведения о выключении системы и входе в нее.

-5

В принципе, даже исходя из названия папки wdi, можно догадаться, как создаются отчеты. Аббревиатура означает Windows Diagnostics Infrastructure, т.е. инфраструктура диагностики Windows. Чтобы проверить предположение, я снова обратился к Process Monitor, на сей раз натравив его на папку wdi.

Мне даже не понадобилось перезагружать систему, поскольку утилита сразу зафиксировала в папке активность svchost.exe, хост-процесса для служб. Открыв в диспетчере задач вкладку «Подробности», я щелкнул правой кнопкой мыши по процессу с идентификатором 1144 и выбрал «Перейти к службам».

-6

Служба политики диагностики запускается автоматически, а ее полное описание вы можете посмотреть в оснастке services.msc. При каждой загрузке Windows эта служба дожидается окончания автозапуска и сохраняет свежий отчет в формате ETL в папке C:\Windows\System32\wdi\LogFiles. Файл может называться BootCKCL.etl или BootPerfDiagLogger.etl в зависимости от версии Windows. На его основе создаются записи в журнале Diagnostics-Performance. Кроме того, в Windows 8+ наряду с ETL появляются XML-файлы для диспетчера задач.

Откроем отчет?

Знакомство с новой версией Windows Performance Analyzer

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


Увеличить рисунок
Увеличить рисунок

Впрочем, графический интерфейс WPA может отпугнуть новичков, поэтому я кратко расскажу о его основных функциях.

Загрузка и установка

Скачайте Windows ADK и установите средства для оценки производительности (выделены синим на рисунке).


Увеличить рисунок
Увеличить рисунок

После этого отчеты в формате ETL начнут открываться в WPA двойным щелчком.

Выбор графика и изменение вида отображаемых данных

Входящие в отчет графики отображаются в Graph Explorer, который можно переключать сочетанием клавиш Ctrl + G. Щелчок по заголовку графика открывает список дочерних графиков.

-9

Кстати, чтобы открыть график, можно перетащить его из панели Graph Explorer на кнопку новой вкладки.

В новом WPA появилась панель инструментов, упрощающая настройку вида графика и открывающая доступ к дополнительным параметрам.


Увеличить рисунок
Увеличить рисунок
  1. Выбранный вами график.
  2. Тип представления данных на графике. Звездочка указывает на то, что выбранный тип отличается от стандартного.
  3. Вид диаграммы.
  4. Редактор вида графиков, где можно задать отображаемые столбцы, а также параметры сортировки и группировки для них. Там же вы можете настроить фильтры, о которых я расскажу ниже.
  5. Вид окна, где у вас есть выбор между таблицей, диаграммой и их совместному отображению.

Выбор данных для отображения в таблице

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

С большим количеством процессов можно справиться при помощи фильтров. Самый простой способ — это фильтр в контекстном меню. Выбрав Filter to Selection, вы исключите из списка все процессы кроме выбранных.

-11

В сложных ситуациях помогут расширенные фильтры, набор которых соответствует списку доступных в таблице столбцов.


Увеличить рисунок
Увеличить рисунок

Учтите, что фильтры работают кумулятивно, т.е. стандартно используется условие AND. Показанный на рисунке выше набор бесполезен, но его легко скорректировать, добавив между фильтрами условие OR.


Увеличить рисунок
Увеличить рисунок

С помощью этого фильтра я и получил сокращенный список процессов, показанный на картинке выше с контекстным меню. Кстати, поиск запускается привычным сочетанием клавиш Ctrl + F, и условия в нем задаются аналогично.

В заключение этого мини-обзора отмечу, что вид открытого ETL-файла, включая все текущие настройки вкладок, можно сохранить из меню FileExport Session. Теперь вы вооружены для изучения автозапуска Windows!

Автозагрузка Windows сквозь призму WPA

В файле BootCKCL.etl содержится краткий отчет о загрузке, протоколирующий три компонента.

-14

Напомню, что влияние программ на скорость запуска Windows оценивается на основе процессорного времени и объема дисковой активности.  Отмечу, что я не нашел в отчете ETL именно тех значений, что указаны в XML-файлах для диспетчера задач, хотя картина аналогична. Остается предположить, что перед записью в XML производятся какие-то дополнительные вычисления.

Использование процессора

В графике CPU Usage (precise) я выбрал представление Utilization by Process, Thread, после чего отфильтровал ненужные процессы из таблицы и добавил столбец CPU Usage (ms).

-15

Сравните эту картину с диспетчером задач на первом рисунке статьи. Выделенные процессы символизируют границы между тремя степенями влияния программ на скорость загрузки Windows. Похоже, не правда ли?

Дисковая активность

В графике Disk Usage я выбрал представление Utilization by Process, IO Type и добавил в таблице столбец Size.

-16

Обратите внимание на процессы itype.exe (драйвер клавиатуры Microsoft) и Snagit32.exe. По нагрузке на CPU влияние этих программ на скорость запуска Windows можно оценивать как среднее. Однако именно из-за высокой дисковой активности им присвоена высокая степень влияния.

Дело об автозагрузке Windows в новом ракурсе

Помните, как Холмс просил Ватсона сделать лог загрузки с помощью Process Monitor? Если бы мисс Финли работала в Windows 8 или более новой системе, детектив смог бы дать ответ не просто быстрее, а моментально. Он бы сразу попросил прислать ему последний XML-файл с отчетом о загрузке!

Родительский процесс

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


Увеличить рисунок
Увеличить рисунок

Согласитесь, что прислать крошечный текстовый файл можно намного быстрее, чем большой журнал загрузки Process Monitor. В принципе, чтобы решить проблему мисс Финли в Windows 7, Холмс мог бы обойтись и отчетом BootCKCL.etl, также находившемся на диске.

На графике Lifetime by Process можно добавить столбцы Process ID и Parent Process ID, т.е. идентификаторы процесса и родительского процесса соответственно.

-18

Поскольку ИД 2024 принадлежит процессу explorer.exe, выделенные программы запускаются классической оболочкой Windows из стандартных расположений автозагрузки.

Отложенная автозагрузка

В Windows 8 в очередной раз предпринята попытка снизить влияние программ в автозагрузке на скорость запуска системы. Достаточно перезагрузить систему, чтобы увидеть, как программы из автозагрузки начинают появляться только после отображения начального экрана и даже перехода на рабочий стол.

WPA очень наглядно отображает распределение автозагрузки программ по времени. Стоит добавить столбец Start Time (s), отфильтровать лишнее, и все будет видно как на ладони.

-19

Процесс explorer.exe запустился через 21 секунду после старта Windows, но лишь спустя 15 секунд после него начали стартовать программы из автозагрузки, причем последняя из них запустилась только через 42 секунды.

Такое поведение невозможно нейтрализовать полностью, но можно значительно сократить задержку запуска программ, используя секретный параметр StartupDelayInMSec в пользовательском разделе реестра.

Конечно, найдутся люди, которых и это не устроит, но у них никто не отбирает возможность распределить автозагрузку по времени с помощью планировщика заданий! Холмс наглядно проедмонстрировал это в деле об автозагрузке Windows.

Рекомендации Microsoft разработчикам программ

Заканчивая тему автозагрузки, я хотел бы отметить еще один момент. Появление в диспетчере задач сведений о влиянии на скорость запуска Windows – это еще и сигнал разработчикам о том, что при чистке первыми под нож вероятнее попадут более требовательные к ресурсам программы.

Microsoft может придумывать разные трюки, стараясь нивелировать влияние программ на скорость загрузки Windows. Но компания бессильна в другом аспекте – энергопотреблении классических программ!

В Windows 8 появились различные улучшения, призванные продлить работу ноутбуков, ультрабуков и планшетов от батарей. Пожалуй, самым заметным новшеством являются современные приложения, которые отправляются «в сон», когда вы переключаетесь в другое окно. И да, эти приложения нельзя поместить в автозагрузку ;)

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

Я еще раз хочу подчеркнуть, что эти советы – для авторов программ. Если вы хотите добавить классическую программу в автозагрузку, это ваше личное дело, и никто этому не препятствует. Однако Microsoft не рекомендует разработчикам наполнять автозапуск своими творениями, дублирующими функции Windows, либо имеющими альтернативные возможности реализации с более экономичным энергопотреблением.

Источник