Основные сведения о данных ссылочного набора
Как упоминалось ранее, ссылочный набор представляет память, которая была затронута во время выполнения интересующего сценария. В этой связи эталонный набор представляет собой фактическую стоимость выполнения рабочей нагрузки и представляет собой наиболее точный учет объема памяти рабочей нагрузки.
Как правило, вас интересует объем памяти определенного процесса, поэтому вам потребуется начать с таблицы » Невыполненные» ссылочного набора по процессу. Вам потребуется изучить места, в которых потребление памяти увеличилось или уменьшилось, а также где оно достигло пика и где оно было устойчивым.
Теоретические основы службы трассировки Windows
Event Tracing for Windows (ETW) — это служба, которая позволяет получать события от одного или нескольких поставщиков событий в режиме реального времени или из файла *.etl за некоторый временной период. Не понятно? Сейчас разберемся!
Для того, чтобы понять принцип работы ETW, необходимо разобраться со структурой этой службы
Архитектура ETW включает в себя 4 элемента
- поставщики событий (providers)
- потребители событий (consumers)
- контроллеры ETW (controllers)
- сессии ETW (event tracing sessions)
Принцип работы состоит в следующем.
В системе зарегистрировано некоторое число поставщиков событий, т.е. приложений, которые могут делиться своими событиями с сессиями ETW. Так же в этой системе есть некоторое число активных сессий ETW, которые могут потреблять события от одного или нескольких поставщиков и предоставлять их пользователю либо в режиме реального времени, либо записывать все события от поставщиков в файл логирования (*.etl). И управляют всем этим движением контроллеры.
А теперь рассмотрим каждый элемент рассмотренной выше архитектуры подробнее, чтобы окончательно разобраться с принципом работы!
Поставщики событий (providers)
Поставщики событий — это приложения, содержащие инструменты отслеживания событий. После того, как поставщик зарегистрировался, контроллер может включить или отключить отслеживание событий в поставщике. Поставщик определяет свою интерпретацию включения или выключения. Как правило, включенный поставщик генерирует события, а отключенный поставщик нет. Это позволяет добавлять отслеживание событий в наше приложение, не требуя, чтобы оно генерировало события все время.
Один поставщик может делиться своими событиями сразу с несколькими сессиями ETW.
Каждое событие состоит из двух элементов: заголовка и данных! Заголовок события включает информацию о событии: идентификатор провайдера, идентификатор события, временную метку и т.д. Остальные данные определяются конкретным провайдером: ETW принимает любые данные и записывает их в буфер, а их интерпретация возлагается на потребителей информации. Существует четыре основных типа провайдеров:
поставщики MOF (классические) провайдеры WPP провайдеры на основе манифеста провайдеры TraceLogging.
Поставщики событий различаются по типам полей, которые они хранят в полезных нагрузках событий.
С поставщиками событий вроде разобрались. Идем дальше!
Контроллеры
Контроллер — это приложение, которое отвечает за функционирование одной или нескольких сессий ETW. Именно контроллер определяет размер и местоположение файла журнала, запускает и останавливает сеансы трассировки событий (сессии ETW), позволяют поставщикам регистрировать события в сеансе. Как уже было сказано ранее, именно контроллер разрешает провайдеру делиться своими событиями!
Потребители
Потребители — это приложения, которые получают и обрабатывают события от одного или нескольких сеансов трассировки одновременно. Потребители могут получать события, хранящиеся в файлах журналов или из сеансов, которые доставляют события в режиме реального времени. Как мы уже знаем, у одной сессии ETW может быть несколько поставщиков. Возникает вопрос: а не будет ли путаницы? Как события из различных сессий ETW будут располагаться друг относительно друга? События сортируются по времени их появления, т.е. система доставляет события в хронологическом порядке!
Сессии ETW
Сеансы отслеживания событий (сессии ETW) записывают события от одного или нескольких провайдеров, которые разрешает контроллер. Сессия также отвечает за управление и очистку буферов.
Трассировка событий поддерживает до 64 сеансов трассировки событий, выполняющихся одновременно. Из этих сессий есть две сессии специального назначения. Остальные сеансы доступны для общего пользования. Две сессии специального назначения:
- Global Logger Session
- NT Kernel Logger Session
Сеанс трассировки событий Global Logger записывает события, которые происходят в начале процесса загрузки операционной системы, например, генерируемые драйверами устройств. Сеанс трассировки событий NT Kernel Logger записывает заранее определенные системные события, сгенерированные операционной системой, например, события дискового ввода-вывода или сбоя страницы.
Итак, а теперь переходим к практике!!!
учиться
xperfДаОдин инструмент
xperfЭто набор инструментов, эти инструменты в настоящее время содержат одинXperf Tool,Один Xperfview Virtualization Tool(Также известный как анализатор производительности) и одинXbootmgr начинает отслеживать и захватывать инструментСущность Эти инструменты используются для анализа большого количества проблем с производительностью, включая количество запуска приложений, проблемы запуска, задержку вызовов процесса и действия прерывания (DPC и ISR), проблемы с ответом на систем, использование ресурсов приложений и штормы прерывания.
xperfОтслеживание на основе события WindowsСтроительство инфраструктуры. Он использует ETW для предоставления программы для записи события ядра, а затем отобразить их в графическом формате
ETW Позвольте Windows и приложениям эффективно генерировать события. Событие и отключение событий могут быть включены в любое время без повторного запуска системы или процесса. ETW собирает запрошенные события ядра и сохраняет их в файлах с именем «Файлы трассировки» или «следы». Эти события ядра предоставляют много подробностей об эксплуатации системы. Наиболее важными и наиболее полезными событиями ядра, используемыми для захвата и анализа: переключение контекста, прерывание, DPC, создание и разрушение и разрушение потоков, диск ввод -вывод, жесткий сбой, преобразование статуса процессора P, операция регистрации и многие и многие, и много много. Другие операции.
Преимущества эталонного набора
Напротив, ссылочный набор — это измерение системного набора страниц памяти, к которым обращается любой процесс или действие в системе во время заданного сценария. Он включает все страницы, к которым осуществляется доступ от имени исследуемого компонента, независимо от того, какой процесс обращается к странице.
Ссылочный набор не зависит от размера ОЗУ, нехватки памяти или политик обрезки ОС. Измерение эталонного набора — это чрезвычайно точный способ оценки использования памяти в системе для любой рабочей нагрузки, так как страницы, находящиеся в рабочем наборе любого процесса или доступные системным процессам или драйверам, включаются в эталонный набор. Ссылочный набор зависит от сценария, а не к моменту: не является допустимым спросить, какой ссылочный набор моего процесса на данный момент? Тем не менее, можно спросить, что такое ссылочный набор системы в этом сценарии? Или что такое ссылочный набор моего процесса в этом сценарии?
Идея эталонного набора проста: дать точное представление о памяти, на которую ссылается система во время сценария, страницы учитываются при доступе и при освобождении. Этот метод предоставляет комплексное представление о пиках использования памяти, а также о том, что выдается в конце сценария (т. е. устойчивое использование).
Ссылочный набор может рассматриваться примерно как мера объема памяти, который может быть удален из остальной части системы во время выполнения сценария или, аналогичным образом, объем памяти, который должен быть сбой и считываться с диска для выполнения сценария (если другие части системы привели к размыканию памяти). Поэтому ссылочный набор ценен для определения влияния на производительность использования памяти.
Измерения времени производительности
Большинство приложений ожидают плавного выполнения и реагирования на ввод данных пользователем. Однако в зависимости от нужного сценария один аспект производительности может быть более важным, чем другой. Например, для приложения читателя новостей, работающего на сенсорном планшетном пк, наиболее важным аспектом является просмотр одной статьи за раз, а также сдвиг/ масштабирование или прокрутка той же или другой статьи. В этом сценарии возможность отрисовки всего содержимого каждого кадра не требуется. Однако возможность прокручивать статью плавно на сенсорном жесте крайне важна.
В другом случае игра или приложение для отрисовки видео, использующее большое количество эффектов анимации, если кадры удаляются
В этом случае очень важно представить содержимое на экране без взаимодействия с вводом пользователем
Чтобы понять, какая часть приложения является проблемной, первым шагом является выбор наиболее важных сценариев. Как только основные аспекты приложения будут поняты и как они будут осуществляться, поиск проблем с использованием инструментов становится проще.
Ниже приведены некоторые из наиболее распространенных метрик времени производительности.
Время запуска
Время от запуска процесса до первого попадания на экран. Это измерение более полезно, если система тепло означает, что измерение выполняется после запуска приложения несколько раз.
Время ЦП на кадр
Время, для которого ЦП активно обрабатывает рабочую нагрузку приложения для одного кадра. Если приложение работает гладко, все операции обработки, необходимые для одного кадра, выполняются в течение одного интервала синхронизации виртуальных машин. При частоте обновления монитора 60Гц это составляет 16 мс на кадр. Если время или кадр ЦП больше 16 мс, для создания простого интерфейса приложения может потребоваться оптимизация ЦП.
Время GPU на кадр
Время, для которого GPU активно обрабатывает рабочую нагрузку приложения для одного кадра. Приложение привязано к GPU, если время, затраченное на обработку кадра, составляет более 16 мс.
Возможность понять, является ли приложение привязанным к ЦП или GPU, сузит проблемную часть кода.
Improvements I’d like to see
I have to confess that I don’t use wprui. I wrote my own trace recording UI which is tuned to my own needs and wprui is not good enough to tempt me to switch. Some of the features that wprui needs to acquire before I’ll consider switching include:
- an (optional) input monitor to insert input events into traces – key loggers are very helpful. This could always be done as an external program
- a way to manage (rename, annotate, view) the traces it has recorded
- transparent compression and decompression of traces
- one-click changing of the CPU sampling frequency
- a way to adjust the buffer size, since on large-memory machines wprui’s buffers are excessively huge (2 GB? Really?)
- Trace file names with the year before the date so that they sort sensibly
Adding these features, and perhaps a few others, would get rid of the existing clunkiness which makes wprui slightly frustrating to use.
wprui does have some great advantages however. It supports symbols for managed code and JavaScript, and it’s a huge improvement over using xperf from the command-line to record traces. Recommended.
Step 1 – get the latest version of xperf
A web search on “windows performance toolkit installer” finds a lot of discussions on how to install various old versions of WPT/xperf. Even the Microsoft download pages for old versions of WPT have not been updated to acknowledge the existence of newer versions. It’s easy to accidentally install an obsolete version.
As of today (March, 2015) what you need to do is install the Windows Software Development Kit for Windows 8.1 RTM. The installer, available here, will let you install whatever components you want. In addition to Windows Performance Toolkit I also recommend installing Application Verifier and Debugging Tools:
The redistributable installers for these three components also get installed – you can find them (on 64-bit machines) in C:\Program Files (x86)\Windows Kits\8.1. Apparently the confusingly named “WPTx64-x86_en-us.msi” is a 32-bit installer that installs the 64-bit version of WPT. Wacky. The redistributables can be handy for sharing WPT with your coworkers, or even customers.
I’m sure that new versions will continue to be released, probably in the Windows SDK, so check for newer SDKs. You can check what version you have installed by running WPA and looking at the about box. Here is the about box for the 8.0 version of WPA, which is no longer the latest.
Собственные провайдеры ETW
Как и при использовании счетчиков производительности, у вас может появиться желание внедрить в свое приложение поддержку возможности сбора и передачи информации, предлагаемой инфраструктурой ETW.
До появления версии .NET 4.5, экспортирование информации ETW из управляемых приложений было весьма непростым делом. Необходимо было учитывать массу тонкостей, связанных с определением манифеста провайдера ETW для вашего приложения, созданием его во время выполнения и регистрацией событий. С выходом .NET 4.5, создание собственных провайдеров ETW стало легче некуда. Для этого достаточно унаследовать класс от EventSource из пространства имен System.Diagnostics.Tracing, и вызвать метод WriteEvent() базового класса для вывода событий ETW. Все рутинные операции по регистрации провайдера в системе и форматированию информации в событиях выполняются автоматически.
Ниже приводится пример реализации провайдера ETW в управляемом приложении:
Для получения информации из такого приложения можно использовать инструмент PerfMonitor. Запустить с его помощью приложение, произвести сбор
perfmonitor monitorDump myApp.exe
Существует еще один инструмент мониторинга производительности и состояния систем, который еще не упоминался: инструментарий управления Windows (Windows Management Instrumentation, WMI). WMI — инфраструктура контроля и управления (command-and-control, C&C), интегрированная в Windows, но ее рассмотрение далеко выходит за рамки этой статьи. Ее можно использовать для получения информации о состоянии системы (например, о версии установленной системы, версии программного обеспечения BIOS или о свободном пространстве на диске), регистрации интересующих событий (таких как запуск и завершение процессов) и вызова управляющих методов, изменяющих состояние системы (таких как создание сетевых разделяемых ресурсов или выгрузка драйверов).
collect
1. Use the command line to record information:
In the run command
latency Is a special provider name, used to open some predefined kernel providers, check the providers option through xperf -provides KF, seeAppendix 1
-stackwalk ProfileCapture a stack for each profile event, seeAppendix 2
You can also combine providers yourself:
DiagEasy Included by default PROC_THREAD, LOADER, DISK_IO, HARD_FAULTS, DPC, INTERRUPT, CSWITCH and PERF_COUNTER
2. Use WPR (Windows Performance Recorder) to record information
● Select the data items that need to be recorded according to your needs, then generally select File in the «Logging mode», and then click Start to start event tracking:
●Click Save to stop event tracking and save the .etl file to the specified path
Note: If you need to track detailed stack information, it is recommended to check Verbose for Detail level
Сбор данных с помощью Xperf
При использовании Xperf для сбора трассировок памяти укажите одинаковый размер как для минимальных, так и максимальных буферов, чтобы обеспечить согласованность объема системной памяти, зарезервированной для трассировки событий для Windows (ETW).
Такая согласованность упрощает сравнение между запусками из-за уменьшения изменчивости. (Эти буферы автоматически устанавливаются в тот же размер при использовании WPR.)
Чтобы собрать данные с помощью Xperf, введите:
Запустите сценарий, а затем остановите сбор данных, введя следующее:
xperf -stop user -stop —dfile-name.etl
Step 2 – get the sample providers and configuration files
Update: stop reading now and go to the UIforETW announcement. UIforETW is a UI for recording ETW traces and it handles steps 2, 3, 4, 5, and 6, with much less hassle than using wprui. Plus I think it’s easier to learn and configure, it’s open source, and it has some handy features that wprui lacks. So please stop reading here.
You can skip this step if you want – it’s only needed for recording traces with custom ETW providers. But if you use xperf significantly you’ll definitely want to do this – getting custom events into ETW traces makes them far easier to analyze. However you don’t need this for your first trace.
You can download my sample user-mode ETW providers from MultiProvider.zip (sorry, these are gone now, replaced by UIforETW). This .zip file has been updated since the original post. Configuration files for wprui and wpa were added, and a –inputlogger option was added that turns the executable into a very handy key logger – all mouse and keyboard events are emitted as ETW events which can be recorded using the steps in this article. This can be very helpful in trace investigations, but don’t use this illicitly.
When you unzip the file you’ll find a Visual Studio solution file. Build either configuration. You might want to poke around and look at the ReadMe.txt file and the provider manifest file (etwprovider.man). If you want to use these providers then after you build the project you’ll have to run etwregister.bat from an elevated command prompt. For more details (some of them obsolete) look here.
Step 5 – start tracing
When you click Start in wprui then tracing begins. By default the trace data is recorded to circular buffers in memory, which is usually ideal. In this mode xperf/wprui is constantly monitoring your system and it can be left running like this 24/7. The length of time recorded will depend on how busy your system is and how much memory is devoted to buffering.
Recording to a file is potentially useful – it lets you record arbitrarily long sessions – but this is also its downside. It’s easy to accidentally leave tracing enabled, and then your drive fills up with an ETL file so large you can’t ever load it. You can also do Light profiling instead of the default Verbose profiling. Generally this means that stacks are not recorded, so the overhead is lower, but it’s also harder to do analysis.
Сведения о средствах
XPerf
XPerf — это набор средств анализа производительности, основанных на трассировке событий для Windows (ETW), предназначенных для измерения и анализа подробных сведений о производительности системы и приложениях и использовании ресурсов. Начиная с Windows 8 этот инструмент командной строки имеет графический пользовательский интерфейс и называется средством записи производительности Windows (WPR) и Windows Анализатор производительности (WPA). Дополнительные сведения об этих средствах можно найти на веб-странице набора средств Windows Performance Toolkit (WPT): Windows Performance Toolkit.
Трассировка событий Windows собирает запрошенные события ядра и сохраняет их в файл, называемый файлом журнала трассировки событий (ETL). Эти события ядра предоставляют подробные сведения о приложении и системных характеристиках при запуске приложения. Данные собираются путем включения отслеживания трассировки, выполнения требуемого сценария приложения, требующего анализа, остановки записи, которая сохраняет данные в ETL-файле. Затем можно проанализировать файл на том же или другом компьютере с помощью программы командной строки xperf.exe или средства анализа визуальной трассировки xperfview.exe.
GPUView;
GPUView — это средство разработки для определения производительности графического модуля обработки (GPU) и ЦП. Он смотрит на производительность в отношении обработки буфера прямого доступа к памяти (DMA) и всех других видеообработок на видеоустройстве.
Для приложений DirectX , которые сильно зависят от GPU, GPUView — это мощный инструмент для понимания связи между работой, выполняемой на ЦП и GPU. Дополнительные сведения об GPUViewsee с помощью GPUView.
Как и xPerf, трассировка трассировки windows сначала берется путем запуска службы трассировки, выполняя сценарий, который требует анализа для приложения, остановки службы и сохранения сведений в ETL-файле. GPUView представляет данные, присутствующие в файле ETL в графическом формате.
После установки средства GPUView рекомендуется прочитать раздел «Основной дисплей GPUView» в меню «Справка GPUView «. Он содержит полезные сведения о интерпретации пользовательского интерфейса GPUView .
To understanding
xperfYesA tool in
xperfIs a set of tools, these tools currently include axperf trace capture tool,One xperfview virtualization tool(Also called performance analyzer) and axbootmgr start tracking capture tool. These tools are used to analyze a large number of performance issues, including application startup times, startup issues, delayed procedure calls and interrupt activities (DPC and ISR), system response issues, application resource utilization, and interrupt storms.
xperfBased on Windows event trackingInfrastructure construction. It uses the ETW provider to record kernel events and then displays them in a graphical format
ETW Allows Windows and applications to efficiently generate events. Events can be enabled and disabled at any time without restarting the system or process. ETW collects the requested kernel events and saves them to one or more files named «trace files» or «traces». These kernel events provide a lot of detailed information about the operation of the system. The most important and useful kernel events for capture and analysis are: context switching, interrupts, DPC, process and thread creation and destruction, disk I/O, hard faults, processor P state transitions, register operations, and many more Other operations.
Recording ETW traces
If you prefer to learn through watching instead of reading you can view this brief video that demonstrates installing UIforETW and recording a trace. For written instructions, read on:
- Get the latest release of UIforETW. This is an open source tool for recording and managing ETW traces. It makes recording traces easier while adding additional information such as input events to make analysis easier. Download etwpackage.zip, extract the contents, and run etwpackage\bin\UIforETW.exe. This will install the necessary versions of the Windows Performance Toolkit. Wait for the installations to finish.
- Now click Start Tracing. ETW tracing will begin. By default it goes to in-memory circular buffers and can be left running indefinitely, recording the last 10-60 seconds (actual duration varies) of activity. When you have reproduced the slowdown type Ctrl+Win+R from wherever you are (you don’t need to switch to UIforETW) to save the trace buffers to disk. You should enter a description of what happened in the Trace information field associated with your trace. Detailed descriptions are ideal, as they tell the analyst what the problem is and where in the trace it occurred.
- Right-click on the list of traces and select Browse folder to open the documents\etwtraces folder containing the traces. There will be a .etl file and a .txt file for each trace. Upload them to your favorite file-sharing service to share with someone who can analyze the traces.
Be aware, however, that ETW traces can contain personal information. ETW traces record information about all processes on your system. Typically this include the names of files being read and written, so an analyst may be able to tell what document you were editing, or what music you were listening to. However the traces will not include the contents of the files or the names of files that are on-disk but not referenced. The Input tracing information is very important for a successful analysis but it defaults to Private mode, where all letters are recorded as ‘A’ and all numbers are recorded as ‘1’, to avoid being a key-logger. Full mode input tracing can be useful, but enable it with caution, for obvious reasons. And, be thoughtful about who you share ETW traces with.
ETW traces also include full information about your hardware, and version numbers of any software that is running when the trace is recorded
That’s it. That’s all it takes.
анализировать
Open. ETL -анализ производительности
1. Как правило, мы должны проанализировать время процессора.
Примите слово в качестве примера
2. Отфильтруйте целевой процесс для анализа
Справа -клик, выберитеFilter to Selection , Выберите, когда я хочу вернуться в это состояние после проверкиClear Filter
3. Увеличьте отображаемая информация о событии
Вы можете добавить информацию о отображении справа -Нажмите на строку каталогов:
4. Символ загрузки
Информация о стеке только идентифицирует имя модуля, имя метода отображается как?
Путь символа конфигурации Загрузится слева направо, справа справа, c: \ localsym; это мой локальный символический путь
Сервер, который загружал символ, не был пингом в течение длительного времени. Вам нужно настроить агента, который может получить доступ к внешней сети:
Затем загрузите символ Первый символ загрузки может быть медленнее, и он будет намного быстрее после перезагрузки
Вы можете просмотреть ситуацию загрузки в окне консоли:
Системные символы и локальные символы, успешно загруженные, в сочетании с информацией о стеке для анализа
Подготовка к работе
Следуя трем простым правилам, вы застрахуете себя от возможных проблем, обеспечите правильную работу всех команд и точно измерите длительность загрузки.
- Прежде чем выполнить первую команду, и убедитесь, что у вас есть под рукой установочный диск / флэшка или . Предупреждение вовсе не дежурное, ибо случаи неадекватного поведения WPT были отмечены у нас на форуме, да и сам я их видел.
- Включите автоматический вход в систему, чтобы задержка на ввод пароля не влияла на измерения.
- Убедитесь, что на разделе есть несколько гигабайт свободного пространства, поскольку при анализе могут создаваться файлы большого размера.
Все команды выполняйте в командной строке, . Там же можно добавить в меню пункт для ее запуска в нужной папке – пригодится.