Fournisseurs ETW du CLR
Le Common Language Runtime (CLR) a deux fournisseurs : le fournisseur de runtime et le fournisseur d’arrêt.
Le fournisseur de runtime déclenche des événements en fonction des mots clés (catégories d’événements) activés. Par exemple, vous pouvez collecter des événements de chargeur en activant le mot clé LoaderKeyword
.
Les événements de suivi d’événements pour Windows (ETW) sont journalisés dans un fichier comportant l’extension .etl, qui peut être post-traité ultérieurement dans des fichiers de valeurs séparées par des virgules (.csv), si nécessaire. Pour plus d’informations sur la façon de convertir le fichier .etl en fichier .csv, consultez Controlling .NET Framework Logging (Contrôle de la journalisation du .NET Framework).
Fournisseur de runtime
Le fournisseur de runtime est le principal fournisseur ETW du CLR.
Le GUID du fournisseur de runtime du CLR est e13c0d23-ccbc-4e12-931b-d9cc2eee27e4.
Pour obtenir des exemples de journalisation et d’affichage des événements ETW du CLR à l’aide d’outils courants, consultez Contrôle de la journalisation du .NET Framework.
En plus des mots clés tels que LoaderKeyword
, vous devrez éventuellement activer des mots clés pour la journalisation des événements qui se déclenchent trop fréquemment. Les mots clés StartEnumerationKeyword
et EndEnumerationKeyword
activent ces événements et sont résumés dans Mots clés et niveaux CLR ETW.
Fournisseur d’arrêt
Le fournisseur d’arrêt doit être activé dans certains cas bien précis. Toutefois, pour la plupart des utilisateurs, le fournisseur de runtime est tout à fait suffisant.
Le GUID du fournisseur d’arrêt du CLR est A669021C-C450-4609-A035-5AF59AF4DF18.
Normalement, la journalisation ETW est activée avant le lancement d’un processus et désactivée une fois ce processus arrêté. Toutefois, si la journalisation ETW est activée pendant l’exécution du processus, des informations supplémentaires sur celui-ci sont demandées. Par exemple, pour la résolution des symboles, vous devez journaliser les événements de méthode pour les méthodes qui ont été chargées avant l’activation de la journalisation.
Les événements DCStart
et DCEnd
capturent l’état du processus au moment où la collecte de données a commencé et où elle s’est arrêtée. (L’état fait référence aux informations de haut niveau, notamment les méthodes qui étaient déjà compilées juste-à-temps (JIT) et les assemblys déjà chargés.) Ces deux événements peuvent fournir des informations sur ce qui s’est déjà produit dans le processus, par exemple quelles méthodes ont été compilées juste-à-temps (JIT).
Seuls les événements dont le nom contient DC
, DCStart
, DCEnd
ou DCInit
sont déclenchés sous le fournisseur d’arrêt. Par ailleurs, ces événements sont déclenchés uniquement sous ce fournisseur.
En plus des filtres par mots clés d’événement, le fournisseur d’arrêt prend en charge les mots clés StartRundownKeyword
et EndRundownKeyword
pour permettre un filtrage ciblé.
Arrêt de début
Un arrêt de début est déclenché quand la journalisation sous le fournisseur d’arrêt est activée avec le mot clé StartRundownKeyword
. Cela entraîne le déclenchement de l’événement DCStart
et la capture de l’état du système. Avant le démarrage de l’énumération, l’événement DCStartInit
est déclenché. À la fin de l’énumération, l’événement DCStartComplete
est déclenché pour indiquer au contrôleur que la collecte de données s’est terminée normalement.
Arrêt de fin
Un arrêt de fin est déclenché quand la journalisation sous le fournisseur d’arrêt est activée avec le mot clé EndRundownKeyword
. L’arrêt de fin arrête le profilage sur un processus qui continue de s’exécuter. Les événements DCEnd
capturent l’état du système quand le profilage est arrêté.
Avant le démarrage de l’énumération, l’événement DCEndInit
est déclenché. À la fin de l’énumération, l’événement DCEndComplete
est déclenché pour indiquer au consommateur que la collecte de données s’est terminée normalement. Les arrêts de début et de fin sont principalement utilisés pour la résolution de symboles managés. L’arrêt de début peut fournir des informations sur les plages d’adresses des méthodes qui ont été compilées juste-à-temps (JIT) avant le début de la session de profilage. L’arrêt de fin peut fournir des informations sur les plages d’adresses de toutes les méthodes qui ont été compilées juste-à-temps (JIT) quand le profilage est sur le point d’être désactivé.
L’arrêt de fin ne se produit pas automatiquement quand une session de profilage est arrêtée. Au lieu de cela, un outil qui cherche à exécuter la résolution de symboles managés doit appeler explicitement une session du fournisseur d’arrêt du CLR avec le mot clé EndRundownKeyword
activé, juste avant l’arrêt du profilage.
Bien que l’arrêt de début ou de fin puisse fournir des informations de plage d’adresses de méthodes pour la résolution de symboles managés, nous vous recommandons d’utiliser le mot clé EndRundownKeyword
(qui fournit des événements DCEnd
) plutôt que le mot clé StartRundownKeyword
(qui fournit des événements DCStart
). L’utilisation de StartRundownKeyword
entraîne l’arrêt de la session de profilage, ce qui peut perturber le scénario profilé.
Collecte de données ETW à l’aide des fournisseurs de runtime et d’arrêt
L’exemple suivant montre comment utiliser le fournisseur d’arrêt du CLR d’une façon qui autorise la résolution des symboles des processus managés avec un impact minimal, indépendamment du fait que les processus démarrent ou se terminent à l’intérieur ou à l’extérieur de la fenêtre profilée.
Activez la journalisation ETW à l’aide du fournisseur de runtime du CLR :
xperf -start clr -on e13c0d23-ccbc-4e12-931b-d9cc2eee27e4:0x1CCBD:0x5 -f clr1.etl
Le journal sera enregistré dans le fichier clr1.etl.
Pour arrêter le profilage alors que le processus continue à s’exécuter, démarrez le fournisseur d’arrêt pour capturer les événements
DCEnd
:xperf -start clrRundown -on A669021C-C450-4609-A035-5AF59AF4DF18:0xB8:0x5 -f clr2.etl
Cela permet à la collecte d’événements
DCEnd
de démarrer une session d’arrêt. Vous devrez peut-être patienter 30 à 60 secondes pour que tous les événements soient collectés. Le journal sera enregistré dans le fichier clr1.et2.Désactivez tout le profilage ETW :
xperf -stop clrRundown xperf -stop clr
Fusionnez les profils pour créer un fichier journal :
xperf -merge clr1.etl clr2.etl merged.etl
Le fichier merged.etl contient les événements des sessions des fournisseurs de runtime et d’arrêt.
Un outil peut exécuter les étapes 2 et 3 (démarrage d’une session d’arrêt, puis arrêt du profilage) au lieu de désactiver immédiatement le profilage quand un utilisateur demande son arrêt. Un outil peut également exécuter l’étape 4.