- Трассировка событий
- Назначение
- Где применимо
- Аудитория разработчиков
- Требования к среде выполнения
- Обработка трассировок трассировки событий Windows в коде .NET
- Цель «Средство трассировки событий для Windows» Event Tracing for Windows Target
- Добавление цели к сеансу Adding the Target to a Session
- Механизм трассировки событий для Windows
- Windows Performance Toolkit (WPT)
- Захват и анализ событий ядра с помощью XPerf
- PerfMonitor
- PerfView
- Собственные провайдеры ETW
Трассировка событий
Назначение
Трассировка событий для Windows (ETW) предоставляет программистам приложений возможность запускать и прекращать сеансы трассировки событий, инструментировать приложение для предоставления событий трассировки и использовать события трассировки. События трассировки содержат заголовок события и определяемые поставщиком данные, описывающие текущее состояние приложения или операции. События можно использовать для отладки приложения и выполнения анализа емкости и производительности.
Эта документация предназначена для приложений пользовательского режима, которые хотят использовать ETW. Сведения об инструментировании драйверов устройств, выполняемых в режиме ядра, см. в разделе Трассировка программного обеспечения WPP и Добавление трассировки событий для Kernel-Mode драйверов в наборе драйверов Windows (WDK).
Где применимо
Используйте ETW, если требуется инструментировать приложение, записывать события пользователя или ядра в файл журнала и использовать события из файла журнала или в режиме реального времени.
Аудитория разработчиков
Трассировка событий Windows разработана для разработчиков на C и C++, которые пишут приложения пользовательского режима.
Требования к среде выполнения
ETW входит в состав Microsoft Windows 2000 и более поздних версий. Сведения о том, какие операционные системы требуются для использования определенной функции, см. в разделе «требования» документации по функции.
Обработка трассировок трассировки событий Windows в коде .NET
Вы можете использовать API .NET трацепроцессинг для анализа трассировок трассировки событий Windows для приложений и других программных компонентов. Этот API внутренне используется в корпорации Майкрософт для анализа данных ETW, созданных в системе разработки Windows, а также для включения нескольких таблиц в анализаторе производительности Windows. Этот API доступен в виде пакета NuGet.
Цель «Средство трассировки событий для Windows» Event Tracing for Windows Target
Применимо к: Applies to: SQL Server SQL Server (все поддерживаемые версии) SQL Server SQL Server (all supported versions) База данных SQL Azure Azure SQL Database База данных SQL Azure Azure SQL Database Применимо к: Applies to: SQL Server SQL Server (все поддерживаемые версии) SQL Server SQL Server (all supported versions) База данных SQL Azure Azure SQL Database База данных SQL Azure Azure SQL Database
Прежде чем использовать средство трассировки событий для Windows (ETW) в качестве назначения, рекомендуется сначала попрактиковаться в работе с данным средством. Before you use Event Tracing for Windows (ETW) as a target, we recommend that you have a working knowledge of ETW. Трассировка событий Windows используется совместно с расширенными событиями или в качестве потребителя расширенных событий. ETW tracing is either used together with Extended Events or as an Extended Events event consumer. Следующие внешние ссылки помогут получить начальные сведения о трассировке событий Windows. The following external links provide a starting point for obtaining background information about ETW:
Цель «Трассировка событий Windows» является одноэлементным целевым объектом, хотя она может быть добавлена в несколько сеансов. The ETW target is a singleton target, although the target can be added to many sessions. Если событие происходит в нескольких сеансах, то данное событие будет передано цели трассировки событий Windows по одному разу для каждого произошедшего события. If an event is raised on many sessions, the event will only be propagated to the ETW target one time per event occurrence. Каждый процесс может иметь только одну подсистему расширенных событий. The Extended Events engine is limited to a single instance per process.
Чтобы назначение ETW работало, стартовая учетная запись служб SQL Server SQL Server должна входить в группу «Пользователи журналов производительности». For the ETW target to work, the SQL Server SQL Server Service startup account must be a member of the Performance Log Users group.
Конфигурация событий в сеансе ETW управляется процессом, в котором размещена подсистема расширенных событий. The configuration of the events present in an ETW session is controlled by the process that hosts the Extended Events engine. Эта подсистема управляет последовательностью и условиями запуска событий. The engine controls which events to raise and what conditions must be met for an event to occur.
После привязки к сеансу расширенных событий, который присоединяет назначение средства отслеживания событий для Windows в первый раз в процессе, средство ETW открывает один сеанс ETW в поставщике SQL Server SQL Server . After binding to an Extended Events session, which attaches the ETW target for the first time during the lifetime of a process, the ETW target opens a single ETW session on the SQL Server SQL Server provider. Если сеанс ETW уже существует, цель ETW получает ссылку на существующий сеанс. If an ETW session already exists, the ETW target obtains a reference to the existing session. Этот сеанс ETW используется всеми экземплярами SQL Server SQL Server на компьютере. This ETW session is shared across all SQL Server SQL Server instances on a given computer. Сеанс ETW получает все события от сеансов, имеющих цель ETW. This ETW session receives all the events from sessions that have the ETW target.
Поскольку приложению ETW требуются поставщики, способные потреблять события и направлять их в ETW, в сеансе включаются все пакеты расширенных событий. Because ETW needs providers to be enabled to consume events and flow them down to the ETW, all Extended Events packages are enabled on the session. При запуске события цель ETW отправляет его в сеанс, в котором включен поставщик события. When an event is fired, the ETW target sends the event to the session on which the provider for the event is enabled.
Назначение ETW поддерживает синхронную публикацию событий в потоке, запускающем это событие. The ETW target supports synchronous publishing of events on the thread that raises the event. Однако назначение ETW не поддерживает асинхронную публикацию событий. However, the ETW target does not support asynchronous event publishing.
Назначение трассировки событий Windows не может управляться внешними контроллерами трассировки событий Windows, например Logman.exe. The ETW target does not support control from external ETW controllers such as Logman.exe. Для трассировки событий Windows нужно создать сеанс события с назначением трассировки событий Windows. To produce ETW traces, an event session must be created with the ETW target. Дополнительные сведения см. в разделе CREATE EVENT SESSION (Transact-SQL). For more information, see CREATE EVENT SESSION (Transact-SQL).
При включении назначения ETW создается сеанс ETW с именем XE_DEFAULT_ETW_SESSION. Enabling the ETW target creates an ETW session that is named XE_DEFAULT_ETW_SESSION. Если сеанс с именем XE_DEFAULT_ETW_SESSION уже существует, то он используется как есть, без изменения свойств. If a session with the name XE_DEFAULT_ETW_SESSION already exists, it is used without modifying any properties of the existing session. Сеанс XE_DEFAULT_ETW_SESSION используется совместно всеми экземплярами SQL Server SQL Server . The XE_DEFAULT_ETW_SESSION is shared between all instances of SQL Server SQL Server . После запуска сеанса XE_DEFAULT_ETW_SESSION необходимо остановить его с помощью контроллера ETW, например инструмента Logman. After you start the XE_DEFAULT_ETW_SESSION, you must stop it by using an ETW controller, such as the Logman tool. Например, можно выполнить в командной строке следующую команду: logman stop XE_DEFAULT_ETW_SESSION -ets. For example, you can run the following command at the command prompt: logman stop XE_DEFAULT_ETW_SESSION -ets.
В следующей таблице описаны доступные параметры для настройки назначения ETW. The following table describes the available options for configuring the ETW target.
Параметр Option | Допустимые значения Allowed values | Описание Description |
---|---|---|
default_xe_session_name default_xe_session_name | Любая строка длиной до 256 символов. Any string up to 256 characters. Это значение является необязательным. This value is optional. | Имя сеанса расширенных событий. The Extended Events session name. По умолчанию это XE_DEFAULT_ETW_SESSION. By default, this is XE_DEFAULT_ETW_SESSION. |
default_etw_session_logfile_path default_etw_session_logfile_path | Любая строка длиной до 256 символов. Any string up to 256 characters. Это значение является необязательным. This value is optional. | Путь к файлу журнала сеанса расширенных событий. The path of the log file for the Extended Events session. По умолчанию %TEMP%\ XEEtw.etl. By default, this is %TEMP%\ XEEtw.etl. |
default_etw_session_logfile_size_mb default_etw_session_logfile_size_mb | Любое целое число без знака. Any unsigned integer. Это значение является необязательным. This value is optional. | Размер файла журнала для сеанса расширенных событий (в мегабайтах, МБ). The log file size, in megabytes (MB), for the Extended Events session. По умолчанию установлено значение 20 МБ. The default is 20 MB. |
default_etw_session_buffer_size_kb default_etw_session_buffer_size_kb | Любое целое число без знака. Any unsigned integer. Это значение является необязательным. This value is optional. | Размер буфера в памяти (в килобайтах) для сеанса расширенных событий. The in-memory buffer size, in kilobytes (KB), for the Extended Events session. Значение по умолчанию — 128 КБ. The default is 128 KB. |
retries retries | Любое целое число без знака. Any unsigned integer. | Число попыток публикации события в подсистеме ETW до удаления события. The number of times to retry publishing the event to the ETW subsystem before dropping the event. Значение по умолчанию равно 0. The default is 0. |
Конфигурация указанных параметров не обязательна. Configuring these settings is optional. Цель ETW использует для них параметры по умолчанию. The ETW target uses default values for these settings.
Цель ETW отвечает за следующие действия. The ETW target is responsible for:
Создание сеанса ETW по умолчанию. Creating the default ETW session.
Регистрация всех пакетов расширенных событий в приложении ETW. Registering all Extended Events packages with ETW. Тем самым обеспечивается сохранность событий в приложении ETW. This ensures that events are not dropped by ETW.
Управление потоком событий, направляемых приложению ETW. Managing the flow of events to ETW. Цель ETW создает событие ETW с данными, полученными от расширенных событий, и отправляет это событие в соответствующий сеанс ETW. The ETW target creates an ETW event with Extended Events data and sends it to the appropriate ETW session. Если событие превышает размер буфера или данные не вмещаются в одно событие ETW, приложение ETW разбивает это событие на фрагменты. If the event is larger than the buffer size, or data cannot fit in one ETW event, ETW splits the event into fragments.
Хранение пакетов расширенных событий включено постоянно. Keeping Extended Events packages enabled at all times.
Приложение ETW по умолчанию использует следующие расположения. The following default file locations are used by ETW:
Выходной файл ETW: %TEMP%\XEEtw.etl. The ETW output file is in %TEMP%\XEEtw.etl.
После начала первого сеанса путь к файлу изменить нельзя. The file path cannot be changed after the first session starts.
MOF-файлы находятся в папке: \Microsoft SQL Server\Shared Managed Object Format (MOF) files are in \Microsoft SQL Server\Shared. Дополнительные сведения см. в разделе Формат управляющих объектов библиотеки MSDN. For more information, see Managed Object Format on MSDN.
Добавление цели к сеансу Adding the Target to a Session
Для добавления назначения счетчика событий в сеанс расширенных событий следует использовать одну из следующих инструкций при создании или изменении сеанса события: To add the ETW target to an Extended Events session, you must include the following statement when you create or alter an event session:
Дополнительные сведения о полном примере, который показывает, как использовать назначение трассировки событий, включая просмотр данных, см. в разделе отслеживать активность системы с помощью расширенных событий. For more information about a full example that shows how to use the ETW target, including how to view the data, see Monitor System Activity Using Extended Events.
Механизм трассировки событий для Windows
— это высокопроизводительный фреймворк регистрации событий, встроенный в Windows. По аналогии со счетчиками производительности, многие компоненты системы и инфраструктура поддержки приложений, включая ядро Windows и CLR, определяют механизмы отправки событий — информации о внутреннем состоянии компонентов. В отличие от счетчиков производительности, которые всегда активны, механизм ETW можно включать и выключать во время выполнения, чтобы накладные расходы на сбор и отправку информации оказывали влияние на производительность, только когда это действительно необходимо.
Одним из богатейших источников информации является провайдер ядра (kernel provider), который генерирует события в моменты запуска процессов и потоков, загрузки DLL, распределения блоков памяти, сетевых операций ввода/вывода и при выполнении трассировки стека. В таблице ниже приводится перечень некоторых наиболее интересных событий, сообщаемых ETW-провайдерами ядра и CLR. Механизм ETW можно использовать для исследования общего поведения системы, например, чтобы выяснить, какой из процессов потребляет большую часть вычислительной мощности CPU, проанализировать узкие места в операциях ввода/вывода, получить статистику, касающуюся работы сборщика мусора и использования памяти управляемыми процессами, и во многих других случаях, обсуждаемых далее.
События ETW несут в себе точное время их возникновения, могут содержать дополнительную пользовательскую информацию, а также состояние стека на момент их появления. Информация о состоянии стека может использоваться для выявления источников различных проблем. Например, провайдер CLR может посылать события в начале и в конце каждого цикла сборки мусора. Эти события в комплексе с информацией о состоянии стека вызовов можно использовать для выявления частей программы чаще других вызывающих сборку мусора.
Провайдер | Флаг/ключевое слово | Описание | События |
---|---|---|---|
Ядро | PROC_THREAD |