Модернизация приложений

Часть 9. Анализ приложений средствами утилиты XPerf. Команды утилиты Xperf

Алексей Федоров

Анализ приложений средствами утилиты XPerf

Команды утилиты XPerf

 

В предыдущих статьях данного цикла мы познакомились с утилитами XPerf и XPerfView. В настоящей публикации мы рассмотрим несколько примеров использования утилиты XPerf для выявления проблем в работе приложений.

Анализ приложений средствами утилиты XPerf

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

Откроем результат трассировки, включающий приложения, запущенные в данный момент на компьютере. Выберем график Disk I/O, выделим на нем весь регион и выполним команду Summary Table. Отметим, что утилита XPerf поддерживает создание протокола с использованием только буферов памяти, что позволяет исключить лишние операции записи на диск, но для большинства сценариев исключения операций ввода­вывода, производимых утилитой XPerf, вполне достаточно для корректного анализа.

График операций ввода­вывода для нашего примера представлен на рис. 1.

 

Рисунок

Рис. 1. График операций ввода-вывода

Таблица Summary Table покажет приложения, выполнявшие ввод-вывод (рис. 2).

 

Рисунок

Рис. 2. Приложения, выполнявшие ввод-вывод

Как видно из таблицы Summary Table, приложение periodic_write.exe выполнило 10 операций записи на диск блоков объемом в 4 Кбайт каждый за интервал в 22 с.

При изучении дисковой активности также можно использовать график Disk I/O в режиме отображения детальной информации — для этого надо щелкнуть правой кнопкой мыши на графике и выбрать команду Detail Graph. В левой панели мы можем выбрать интересующие нас физические диски, а в правой — процессы и их дисковые активности. Для нашего примера мы исключим все процессы, кроме periodic_write.exe (рис. 3).

 

Рисунок

Рис. 3. График дисковой активности

Из графика видно, что приблизительно каждые 2 с процесс periodic_write.exe записывает данные в одну и ту же область диска. Также на графике наглядно показаны все операции записи для данного временного интервала и даже перемещения головок диска.

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

Во втором примере мы определим, какие приложения отвечают за повышенное потребление ресурсов центрального процессора. Отметим, что даже небольшие изменения в использовании ресурсов процессора приводят к существенному росту потребления энергии — например 10-процентное увеличение в применении ресурсов процессора приводит к росту потребления на 2 Вт. Неконтролируемые всплески активности могут вызывать более существенное увеличение энергопотребления, особенно в случаях, когда процессор за короткое время переходит из состояния низкого энергопотребления в стандартное.

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

 

Рисунок

Рис. 4. График системы в состоянии покоя

Как видно из графика, в нашем примере в состоянии покоя происходили периодические всплески процессорной активности. Для нахождения их причин перейдем к графику CPU Sampling by CPU и выделим диапазон от 1-й до 31-й с — это необходимо для того, чтобы отсечь активность процессора, связанную с включением и отключением провайдеров для трассировки данных.

Выберем таблицу Summary Table и посмотрим на таблицу активности процессора (рис. 5).

 

Рисунок

Рис. 5. Таблица активности процессора

Обратите внимание на то, что более 11% процессорного времени было занято какой­то активностью. Как мы уже отметили, Microsoft рекомендует, чтобы это число составляло не более 2% для основной массы систем на базе двухъядерных процессоров.

Закроем таблицу и перейдем к графику CPU Usage by Process. На нем показана только активность интересующего нас приложения (рис. 6).

 

Рисунок

Рис. 6. Использование процессора отдельными процессами

Как видно из графика, в приложении реализован таймер, срабатывающий каждые 10 с и потребляющий порядка 50% ресурсов процессора в течение 2 с. На графиках CPU Frequency и CPU Idle States видно влияние этой активности на частоту работы процессора, а также переход процессора из одного состояния в другое.

Выше мы рассмотрели, как периодическая активность влияет на состояние процессора и, как следствие, на энергопотребление системы: в состоянии покоя процессор почти не потребляет электроэнергии, тогда как в активном состоянии — около 35 Вт. Таким образом, «лишняя» активность может существенно влиять на состояние системы.

И последний пример: выясним, как с помощью утилиты XPerf можно узнать, какие приложения используют ресурсы процессора. Рассмотрим график CPU Sampling by CPU. Выделим на нем регион с повышенной активностью работы процессора, выполним команду Load Symbols, подгрузим отладочные символы, а затем — команду Summary Table, в которой выберем колонки Process, Stack, Module и Function. В таблице мы увидим, что, помимо процесса System Idle, основным потребителем ресурсов процессора является приложение slow_shutdown.exe. Если включить колонки Weight и %Weight, то мы увидим, что этот процесс использовал порядка 48,5% ресурсов процессора в течение 5,2 с (рис. 7).

 

Рисунок

Рис. 7. График использования ресурсов процессора

Детальное изучение стека (рис. 8) покажет, что эта активность была вызвана 5-секундным циклом, реализованным внутри приложения. Такая задержка недопустима, например, при завершении работы всей системы.

 

Рисунок

Рис. 8. Анализ стека для процессов

Команды утилиты XPerf

В данном разделе мы рассмотрим основные команды утилиты XPerf, которые можно применять для управления сбором информации. Для получения справочной информации об утилите задайте команду:

C:\>xperf -help

Она выводит список дополнительных опций данной утилиты, позволяющих получить более детальную информацию (рис. 9).

 

Рисунок

Рис. 9. Справочная информация об утилите XPerf

Как мы отметили во введении к данному разделу, вся информация на уровне ядра операционной системы собирается с помощью так называемых провайдеров. Провайдеры — это компоненты операционной системы, генерирующие события. Например, на уровне ядра операционной системы существует несколько провайдеров, генерирующих события, связанные с переключением контекста. Подсистема ввода­вывода создает события, относящиеся к ошибкам страничной памяти (page fault). При анализе производительности необходимо включение провайдеров, поставляющих релевантную для данного анализа информацию.

Для получения информации по провайдерам используется команда:

C:\>xperf –help providers

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

[Installed|I] — установленные провайдеры;

[Registered|R] — зарегистрированные провайдеры;

[KernelFlags|KF] — флаги ядра;

[KernelGroups|KG] — группы ядра;

[Kernel|K] — флаги и группы ядра.

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

C:\>logman query providers

Сокращенный результат выполнения этой команды показан на рис. 10.

 

Рисунок

Рис. 10. Список провайдеров

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

Собранную в разных сессиях информацию можно объединить с помощью команды merge:

C:\>xperf –merge kernel.etl user.etl system.etl

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

C:\>xperf –help processing

Список доступных команд показан на рис. 11.

 

Рисунок

Рис. 11. Список доступных команд

Например, для вывода информации об активности процессора и диска нужно использовать команду:

C:\>xperf –I trace.etl -a cpudisk

Вывод будет осуществлен на экран консоли. Для сохранения информации в файле предназначена команда:

C:\>xperf –I trace.etl –o cpudisk.txt -a cpudisk

***

Последняя утилита, которую мы рассмотрим в рамках обсуждения Windows Performance Toolkit, — XBootMgr. Она позволяет собирать информацию в процессе загрузки компьютера, его выключения, перехода в режим Standby и выхода из него. Подробнее о ней мы поговорим в следующей части данной статьи.

 

В начало В начало

КомпьютерПресс 06'2012

Наш канал на Youtube

1999 1 2 3 4 5 6 7 8 9 10 11 12
2000 1 2 3 4 5 6 7 8 9 10 11 12
2001 1 2 3 4 5 6 7 8 9 10 11 12
2002 1 2 3 4 5 6 7 8 9 10 11 12
2003 1 2 3 4 5 6 7 8 9 10 11 12
2004 1 2 3 4 5 6 7 8 9 10 11 12
2005 1 2 3 4 5 6 7 8 9 10 11 12
2006 1 2 3 4 5 6 7 8 9 10 11 12
2007 1 2 3 4 5 6 7 8 9 10 11 12
2008 1 2 3 4 5 6 7 8 9 10 11 12
2009 1 2 3 4 5 6 7 8 9 10 11 12
2010 1 2 3 4 5 6 7 8 9 10 11 12
2011 1 2 3 4 5 6 7 8 9 10 11 12
2012 1 2 3 4 5 6 7 8 9 10 11 12
2013 1 2 3 4 5 6 7 8 9 10 11 12
Популярные статьи
КомпьютерПресс использует