Знакомое всем коварство утреннего включения. Рабочий стол появился, значки на месте, фоновая картинка нарисовалась, и человек радостно тычет в нужную программу. А она не открывается. Тычет снова, и снова тишина, лишь песочные часы крутятся. Меню вроде отзывается, а вот запустить хоть что-то не выходит ещё долгие секунды, а то и минуты. Возникает законное недоумение: стол же показался, почему машина не работает? Ответ кроется в фундаментальном различии, которое мало кто осознаёт. Появление рабочего стола и его готовность к работе это два разных момента, и между ними порой лежит мучительная пропасть.

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

Два времени загрузки и почему важно различать именно их

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

Именно вторая часть и есть источник того утреннего разочарования. Стол показан, первая часть завершена, но вторая ещё в разгаре: программы автозапуска грузятся, диск работает на пределе, и любая попытка что-то запустить встаёт в очередь за этой фоновой суматохой. Длительность второй части это и есть мера того, как долго после появления стола машина остаётся фактически непригодной для работы. На быстрой машине эта часть мелькает незаметно, на медленной растягивается в те самые мучительные минуты беспомощного тыканья в неоткликающиеся значки.

Различение двух частей переворачивает само понимание скорости загрузки. Можно гордиться быстрым появлением рабочего стола, но если после него машина ещё долго не отзывается, реальная готовность далека. И наоборот, чуть более долгое появление стола, за которым следует мгновенная готовность, на деле удобнее. Поэтому честная оценка скорости смотрит не на момент, когда показался стол, а на момент, когда им стало можно пользоваться. Это смещение фокуса с видимости на готовность и есть суть грамотного профилирования.

Где система прячет замер времени после появления стола

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

Добраться до неё можно через журнал событий, в разделе диагностики производительности, открыв событие итоговой загрузки и изучив его подробности. Сам журнал открывают короткой командой:

eventvwr.msc

Но удобнее вытащить нужные замеры сразу через PowerShell, который умеет разобрать событие итоговой загрузки на составляющие и показать обе интересующие величины, общее время и послестартовый период:

Get-WinEvent -LogName Microsoft-Windows-Diagnostics-Performance/Operational | Where-Object Id -eq 100 | Select-Object -First 1 | Format-List TimeCreated, Message

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

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

Глубокое профилирование через трассировку загрузки

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

xbootmgr -trace boot -resultPath C:\Trace

После перезагрузки в указанной папке останется файл трассы, который открывают в анализаторе производительности для разбора:

wpa C:\Trace\boot_BASE+CSWITCH_1.etl

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

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

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

Как система определяет момент настоящей готовности

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

typeperf "\PhysicalDisk(_Total)\Current Disk Queue Length" -si 1

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

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

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

Что делать с выявленной медленной готовностью

Профилирование само по себе лишь ставит диагноз, а лечение зависит от выявленной причины. Если профиль показал, что послестартовая суматоха растёт из перегруженного автозапуска, лечение очевидно: разгрузить старт. Сюда смыкаются все приёмы оптимизации автозапуска, от чистки лишних программ до их переноса на отложенный запуск и расписание. Чем меньше программ ломится к диску в послестартовый период, тем быстрее затихает суматоха и наступает готовность. Профиль тут служит и обоснованием чистки, и мерилом её успеха.

Если же узким местом оказался сам накопитель, который захлёбывается даже при умеренном автозапуске, направление другое. Тут помогает либо ускорение хранилища переходом на более быстрый накопитель, либо такая организация старта, чтобы программы обращались к диску не разом, а по очереди, не создавая затора. Отложенный запуск тут снова кстати, ведь разведённые во времени программы не душат диск одновременно. Профиль, указавший на диск как на виновника, направляет усилия именно туда, избавляя от бесплодных попыток лечить не ту причину.

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

Сравнение машин по готовности и выстраивание эталона

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

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

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

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

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