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


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

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

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

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

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

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

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

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

Кроме таких ключевых слов, как LoaderKeyword, может потребоваться включить ключевые слова для регистрации определенных событий, так как некоторые события могут создаваться слишком часто. Ключевые слова StartEnumerationKeyword и EndEnumerationKeyword включают эти события и сведены в таблице CLR ETW Keywords and Levels.

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

Для некоторых специальных целей поставщик очистки должен быть включен. Однако для большинства пользователей вполне достаточно поставщика среды выполнения.

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

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

События 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 вызывает очистку в течение сеанса профилирования, что может помешать работе профилируемого сценария.

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

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

  1. Включите ведение журнала ETW, используя поставщик времени выполнения среды 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.etl.

  3. Выключите профилирование ETW:

    xperf -stop clrRundown 
    xperf -stop clr
    
  4. Объедите профили, чтобы создать один файл журнала:

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

    Файл merged.etl будет содержать события сеансов поставщиков времени выполнения и очистки.

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

См. также

Другие ресурсы

События в среде CLR (трассировка событий Windows)