Поделиться через


Поставщики ETW среды CLR

В общеязыковой среде выполнения (CLR) представлены два поставщика: поставщик среды выполнения и поставщик очистки.

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

События трассировки событий Windows (ETW) записываются в файл с расширением .etl, который позже может быть обработан в файлах с разделиниями-запятыми (.csv) по мере необходимости. Дополнительные сведения о преобразовании ETL-файлов в файлы с расширением CSV см. в разделе Контроль ведения журнала .NET Framework.

Поставщик среды выполнения

Поставщик среды выполнения является основным поставщиком трассировки событий Windows в среде CLR.

Поставщик среды выполнения CLR имеет GUID e13c0d23-ccbc-4e12-931b-d9cc2eee27e4.

Примеры записи в журнал и просмотра событий трассировки событий Windows в среде CLR с использованием общедоступных средств см. в разделе Контроль ведения журнала .NET Framework.

Помимо таких ключевых слов, как LoaderKeyword, вам может потребоваться включить ключевые слова для ведения журнала событий, которые могут возникать слишком часто. Такие события активируются с помощью ключевых слов StartEnumerationKeyword и EndEnumerationKeyword, описание которых приводится в разделе Ключевые слова и уровни среды CLR (трассировка событий Windows).

Поставщик очистки

В некоторых особых ситуациях необходимо активировать поставщик очистки. Тем не менее в большинстве случаев достаточно использовать поставщик среды выполнения.

Поставщик очистки среды CLR имеет GUID A669021C-C450-4609-A035-5AF59AF4DF18.

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

События DCStart и DCEnd захватывают состояние процесса на момент запуска и остановки сбора данных. (Состояние ссылается на высокоуровневые сведения, включая методы, для которых уже была выполнена JIT-компиляция, и загруженные сборки.) Эти два события могут предоставлять сведения о том, что уже произошло в процессе, в том числе о прошедших JIT-компиляцию методах и т. д.

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

В дополнение к фильтрам ключевых слов событий поставщик очистки также поддерживает ключевые слова StartRundownKeyword и EndRundownKeyword, обеспечивающие целевую фильтрацию.

Начальная очистка

Начальная очистка инициируется в тот момент, когда с помощью ключевого слова StartRundownKeyword активируется ведение журнала для поставщика очистки. В результате этого возникает событие DCStart, в котором фиксируется состояние системы. Перед началом перечисления возникает событие DCStartInit. По окончании перечисления возникает событие DCStartComplete, которое уведомляет контроллер о нормальном завершении сбора данных.

Завершающая очистка

Завершающая очистка инициируется в тот момент, когда с помощью ключевого слова EndRundownKeyword отключается ведение журнала для поставщика очистки. Завершающая очистка прекращает профилирование для процесса, выполнение которого продолжается. События DCEnd фиксируют состояние системы в момент остановки профилирования.

Перед началом перечисления возникает событие DCEndInit. По окончании перечисления возникает событие DCEndComplete, которое уведомляет потребителя о нормальном завершении сбора данных. Начальная и завершающая очистка используются преимущественно для управляемого разрешения символов. Начальная очистка может предоставить сведения о диапазоне адресов для методов, которые уже прошли JIT-компиляцию до начала сеанса профилирования. Завершающая очистка может предоставить сведения о диапазоне адресов для всех методов, которые уже прошли JIT-компиляцию непосредственно перед отключением профилирования.

Завершающая очистка не выполняется автоматически, если сеанс профилирования остановлен. Вместо этого средство, которое пытается выполнить управляемое разрешение символов, должно явно вызывать сеанс поставщика среды выполнения CLR с включенным ключевым словом EndRundownKeyword непосредственно перед остановкой профилирования.

Несмотря на то, что в ходе начальной и завершающей очистки методу могут предоставляться сведения о диапазоне адресов для управляемого разрешения символов, мы рекомендуем использовать ключевое слово EndRundownKeyword (предоставляет события DCEnd) вместо ключевого слова StartRundownKeyword (предоставляет события DCStart). Это связано с тем, что ключевое слово StartRundownKeyword запускает очистку во время сеанса профилирования, что может помешать выполнению профилируемого сценария.

Сбор данных трассировки событий Windows с помощью поставщиков среды выполнения и очистки

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

  1. Включение ведения журнала трассировки событий Windows с использованием поставщика среды выполнения CLR:

    xperf -start clr -on e13c0d23-ccbc-4e12-931b-d9cc2eee27e4:0x1CCBD:0x5 -f clr1.etl
    

    Журнал будет сохраняться в файле clr1.etl.

  2. Чтобы остановить профилирование во время выполнения процесса, запустите поставщик очистки для захвата событий DCEnd:

    xperf -start clrRundown -on A669021C-C450-4609-A035-5AF59AF4DF18:0xB8:0x5 -f clr2.etl
    

    В результате включается сбор событий DCEnd для начала сеанса очистки. Сбор всех событий может занимать от 30 до 60 секунд. Журнал будет сохраняться в файле clr1.et2.

  3. Отключение профилирования трассировки всех событий Windows:

    xperf -stop clrRundown
    xperf -stop clr  
    
  4. Объединение профилей в один файл журнала:

    xperf -merge clr1.etl clr2.etl merged.etl  
    

    В объединенном ETL-файле будут содержаться события из сеансов поставщиков среды выполнения и очистки.

Если пользователь запрашивает остановку профилирования, средство может выполнять шаги 2 и 3 (запуск сеанса очистки и завершение профилирования) вместо немедленного отключения профилирования. Кроме того, это средство может выполнить шаг 4.

См. также раздел