Измерение производительности браузера с помощью Windows Performance Tools
Недавно мы рассмотрели характеристики быстродействия веб-приложения Flying Images и аппаратно-ускоренного средства просмотра изображений Flickr на основе HTML5 в различных веб-браузерах. Внутри команды разработчиков Internet Explorer для измерения производительности браузера мы используем Windows Performance Tools. Windows Performance Tools входят в число самых точных средств оценки производительности, и именно поэтому эти средства широко используются во всей отрасли. В этой статье я приведу основные сведения об использовании Windows Performance Tools с Internet Explorer.
С помощью Windows Performance Tools вы можете измерить не только общее затраченное на операции время, но и время, затраченное отдельными компонентами браузера и операционной системы. В этой статье мы покажем, как использовать Windows Performance Tools для записи и анализа производительности различных браузеров. Мы рассмотрим, как разбирать события Windows, измерять активность центрального и графического процессора, определять работающие шаблонные комбинации и просматривать сетевую активность. Мы не советуем использовать Windows Performance Tools обычным пользователям; но эти инструменты представляют собой замечательный ресурс для разработчиков. Данная статья поможет вам приступить к работе с набором инструментов для освоения производительности браузера.
Основа
В Microsoft Windows Vista и Windows 7 имеется эффективная инфраструктура под названием трассировка событий Windows (Event Tracing for Windows), собирающая системные данные и сведения о производительности. Трассировка событий Windows или, сокращенно, ETW, позволяет операционной системе Windows и приложениям эффективно создавать события. Существуют сотни событий, которые могут быть записаны во время их исполнения и впоследствии проанализированы специальными инструментами.
Windows Performance Tools, или WPT, позволяют записывать, визуализировать и анализировать трассировки ETW в операционной системе. WPT входит в состав Windows 7 SDK и может быть загружен отсюда. Вы можете сократить установку, оставив только «Windows Performance Toolkit»:
Первый профиль
Сразу же по завершении установки инструментов WPT вы можете приступить к анализу производительности браузера.
Давайте начнем с измерения быстродействия Internet Explorer при переходе на веб-узел https://www.bing.com
1. Запустите Internet Explorer и зайдите на https://www.microsoft.com.
2. Запустите командную строку с повышенными привилегиями
3. Из командной строки выполните команду:
xperf -start mytrace -on PerfTrack
4. В IE перейдите на веб-узел https://www.bing.com и подождите пять секунд после того, как страница загрузится и браузер перейдет в состояния покоя.
5. Остановите трассировку, выполнив команду:
xperf -stop mytrace -d mytrace.etl
6. Теперь запустите Windows Performance Analyzer, входящий в состав набора инструментов WPT, выполнив:
xperfview mytrace.etl
Последняя команда запускает Windows Performance Analyzer и открывает файл mytracve.etl, содержащий события ETW, записанные во время трассировки.
В Windows Performance Analyzer отображаются записанные события. В нашем примере вы записали события из нескольких различных поставщиков. Раскрытие списка «ProviderIds» отобразит все 4 поставщика:
- PerfTrackMetadata
- WinSATAssessment
- Microsoft-PerfTrack-IEFRAME
- Microsoft-PerfTrack-MSHTML
Мы расскажем подробнее о поставщиках ниже.
Обратите внимание на приведенную ниже шкалу времени, показывающую время в секундах. Теперь мы перейдем к группе событий. Сделать это возможно двумя способами: а) Ctrl + прокрутка колесика мыши или б) щелчок + перетаскивание, чтобы выделить временной диапазон, затем правый щелчком мыши по выделению и выбор «Масштабировать выделенный фрагмент» (Zoom To Selection).
Далее необходимо навести указатель на событие, чтобы увидеть всплывающую подсказку со сведениями о событии. Например, наведение указателя на первую желтую точку отображает такую всплывающую подсказку:
Строка EventName указывает, что это событие – «Navigation – Start» (Начало перехода), являющееся началом перехода на веб-узел bing.com.
Всплывающая подсказка второй желтой точки определяет событие как «Navigation – Redirect» (Перенаправление). Перенаправление происходит из-за того, что мы указали веб-узел https://bing.com, и сервер ответил перенаправлением на https://www.bing.com. Как известно, перенаправление на основной URL-адрес общепринято для веб-узлов.
Третья желтая точка – событие «Navigation – Stop» (Окончание перехода), указывающее, что переход на www.bing.com завершен.
Чтобы получить представление о затраченном времени, измерим время перехода после перенаправления.
Удерживая кнопку мыши, переместите указатель от второй желтой точки к третьей. В момент перемещения всплывающая подсказка указывает время между двумя точками:
ПРИМЕЧАНИЕ: Время между событиями начала и конца не предназначено для сравнения с другими браузерами. Различные браузеры могут указывать и называть события по своему усмотрению. Сравнение прошедших промежутков времени имеет смысл только для одного браузера. Попытки сравнить их у разных браузеров (или даже разных версий одного браузера) смысла не имеют. Например, события ETW, зафиксированные в другом браузере, могут иметь те же названия «Navigation Start» и «Navigation End», но означать совершенно другие аспекты слишком общего термина «Navigation».
Тем не менее, затраченное время интересно сравнить с результатами других трассировок в тех же условиях и с тем же браузером. Например, интересно сравнить время перехода на bing.com и на другой веб-узел. Поскольку все страницы сильно отличаются друг от друга, затрачиваемое время также будет отличаться. Позже мы подробнее рассмотрим, на что именно уходит время.
На данный момент мы рассмотрели временную шкалу, отображающую все события, записанные во время трассировки. Мы можем углубиться в события, приближая их и просматривая сопровождающие их всплывающие подсказки. В Windows Performance Analyzer имеются и другие режимы просмотра, которые мы рассмотрим позже.
Поставщики
Ранее мы упомянули поставщиков (Providers), являющихся источником событий, захваченных при помощи Windows Performance Tool Kit. В предыдущем примере мы указали xperf захватывать события от поставщика «PerfTrack», указав «PerfTrack» в команде
Код:
xperf -start mytrace -on PerfTrack
Мы можем использовать Windows Performance Tool Kit для захвата и анализа каждого аспекта операционной системы Windows. Каждый компонент Windows фиксирует множество событий ETW, так что общее количество событий в Windows исчисляется тысячами. Кроме этого, каждое приложение может привнести еще больше событий, что легко ведет к информационной перегрузке.
В зависимости от конкретного сценария мы выбираем события из ряда поставщиков. Это позволяет сконцентрировать наше внимание на значимых событиях.
Перечень поставщиков выводится выполнением следующей команды:
xperf -providers
Полный перечень содержит множество поставщиков, включая Kernel Flags (Параметры ядра) и Kernel Groups (Группы ядра), расположенные в самом конце списка. Следующие поставщики наиболее интересны при работе с Internet Explorer:
- Microsoft-IE
- Microsoft-IEFRAME
- Microsoft-PerfTrack-IEFRAME
- Microsoft-PerfTrack-MSHTML
А также Kernel Group:
- Latency (Задержка)
Мы можем одновременно использовать несколько поставщиков пользовательского режима. Например:
xperf -start mytrace -on Microsoft-IE+Microsoft-IEFRAME+Microsoft-PerfTrack-IEFRAME+Microsoft-PerfTrack-MSHTML
Чтобы узнать, как одновременно использовать поставщиков пользовательского режима и режима ядра, обратитесь к Примеру 2, расположенному в середине страницы.
Скрипты трассировки
При анализе быстродействия любого компонента приходится запускать трассировку быстродействия многократно. Чтобы облегчить этот процесс и упростить захват одних и тех же трассировок, мы используем простой скрипт. Для примеров, приведенных этой статье, мы использовали trace.cmd:
@echo off
set session=mytrace
if not @%1@ == @@ set session=%1
xperf -start %session% -on PerfTrack
if not errorlevel 0 goto :eof
echo.
echo Performance Trace started.
echo.
echo When done with profile actions,
pause
echo.
xperf -stop %session% -d %session%.etl
if not errorlevel 0 goto :eof
echo.
start xperfview %session%.etl
Основной механизм работы скрипта:
- Запустите скрипт из командной строки с повышенными привилегиями
- Воспроизведите сценарий, который необходимо захватить, пока скрипт находится в режиме ожидания наших действий
- Нажмите любую клавишу в командной строке, чтобы скрипт завершил захват и отобразил результат
Ниже приведен несколько более сложный скрипт tracek.cmd, который также захватывает события режима ядра:
@echo off
set session=mytrace
if not @%1@ == @@ set session=%1
xperf -on Latency -f %session%kernel.etl -start %session% -on Microsoft-IE+Microsoft-IEFRAME+Microsoft-PerfTrack-IEFRAME+Microsoft-PerfTrack-MSHTML -f %session%user.etl
if not errorlevel 0 goto :eof
echo.
echo Performance Trace started.
echo.
echo When done with profile actions,
pause
echo.
xperf -stop %session%
if not errorlevel 0 goto :eof
xperf -stop
if not errorlevel 0 goto :eof
xperf -merge %session%user.etl %session%kernel.etl %session%combined.etl
if not errorlevel 0 goto :eof
echo.
start xperfview %session%combined.etl
Общий обзор
Когда мы выполняем трассировку с помощью второго, «более сложного» сценария, Windows Performance Analyzer во время захвата отображает более подробно всю систему, включая использование ЦП, использование ЦП по процессам, Disk I/O и использование диска, время жизни процессов, сбои в работе, а также общие события (Generic Events), которые мы рассмотрели выше. Каждый из этих элементов может оказаться столь же важным, как использование ЦП для определения быстродействия.
Мы можем выбрать, какие из графиков отображать, щелкнув по черной фигуре у левого края, открывающей список «Frame List»:
Также мы можем наложить друг на друга несколько графиков, чтобы получить совмещенный вид. Для этого произведите правый щелчок мыши по графику и выберите другой график в разделе «Overlay Graph» (Наложить график).
Сводная таблица
Теперь мы рассмотрим совершенно другой режим Windows Performance Analyzer, вид «Summary Table» (Сводная таблица). У каждого графика имеется режим сводной таблицы, основанный на данных графика. Приведем в качестве примера режим сводной таблицы графика событий «Generic Events». Для этого необходимо произвести правый щелчок мыши по графику и выбрать «Summary Table»:
Мы можем просмотреть события определенного поставщика и обнаружить счетчики отдельных событий и время, когда они произошли.
Проход стека
Проходы стека при исследовании профилей быстродействия открывают новые возможности, поскольку позволяют произвести анализ на основе «веса», понимая под этим приблизительное количество потребленных ресурсов ЦП. Поскольку данные профиля основаны на выборке, сведения об использовании ЦП всегда будут являться статистической аппроксимацией.
Чтобы разрешить проходы стека, необходимо включить их для нужных нам событий. В данном случае мы заинтересованы в событии, являющемся частью группы «Latency». Чтобы получить дополнительные сведения о включении проходов стека у события, обратитесь к соответствующему разделу в Xperf.
Целый мир для исследования
В команде разработчиков IE мы ежедневно используем Windows Performance Toolkit вместе с внутренними инструментами для измерения и отслеживания производительности Internet Explorer. Загружайте и вы этот набор инструментов и начинайте следить за производительностью браузера при помощи Windows Performance Toolkit на собственных системах.
Уолтер Вонкох (Walter vonKoch),
Руководитель группы разработчиков по производительности IE