Dela via


CLR ETW-providrar

CLR (Common Language Runtime) har två providrar: runtime-providern och rundown-providern.

Körningsprovidern genererar händelser, beroende på vilka nyckelord (händelsekategorier) som är aktiverade. Du kan till exempel samla in inläsningshändelser genom att aktivera nyckelordet LoaderKeyword .

Händelsespårning för Windows-händelser (ETW) loggas in i en fil som har filnamnstillägget .etl, som senare kan efterbearbetas i kommaavgränsade värdefiler (.csv) efter behov. Information om hur du konverterar .etl-filen till en .csv-fil finns i Kontrollera .NET Framework loggning.

Körningsprovidern

Körningsprovidern är den huvudsakliga CLR ETW-providern.

CLR-körningsproviderns GUID är e13c0d23-ccbc-4e12-931b-d9cc2eee27e4.

Exempel på hur du loggar och visar CLR ETW-händelser med hjälp av vanliga verktyg finns i Kontrollera .NET Framework loggning.

Förutom att använda nyckelord som LoaderKeywordkan du behöva aktivera nyckelord för loggningshändelser som kan aktiveras för ofta. Nyckelorden StartEnumerationKeywordEndEnumerationKeyword och aktiverar dessa händelser och sammanfattas i CLR ETW-nyckelord och -nivåer.

Rundown-providern

Rundown-providern måste vara aktiverad för vissa särskilda användningsområden. För en majoritet av användarna bör dock körningsprovidern räcka.

CLR-rundownproviderns GUID är A669021C-C450-4609-A035-5AF59AF4DF18.

Normalt aktiveras ETW-loggning innan en process startas och loggningen stängs av när processen avslutas. Men om ETW-loggning är aktiverad medan processen körs behövs ytterligare information om processen. För symbolmatchning måste du till exempel logga metodhändelser för metoder som redan lästes in innan loggningen aktiverades.

Händelserna DCStart och DCEnd registrerar tillståndet för processen när datainsamlingen startades och stoppades. (Tillstånd refererar till information på hög nivå, inklusive de metoder som redan var just-in-time-kompilerade (JIT) och sammansättningar som lästes in.) Dessa två händelser kan ge information om vad som redan har hänt i processen. till exempel vilka metoder som kompilerades med JIT och så vidare.

Endast händelser med DC, DCStart, DCEndeller DCInit i deras namn höjs under rundown-providern. Dessutom aktiveras dessa händelser endast under rundown-providern.

Förutom nyckelordsfiltren för händelser stöder rundown-providern även nyckelorden StartRundownKeyword och EndRundownKeyword för att tillhandahålla riktad filtrering.

Starta nedkörning

En startkörning utlöses när loggning under rundown-providern aktiveras med nyckelordet StartRundownKeyword . Detta gör DCStart att händelsen utlöses och samlar in systemets tillstånd. Före uppräkningens DCStartInit början utlöses händelsen. I slutet av uppräkningen DCStartComplete utlöses händelsen för att meddela kontrollanten att datainsamlingen avslutades normalt.

Slutkörning

En slutkörning utlöses när loggning under rundown-providern aktiveras med nyckelordet EndRundownKeyword . Slutkörningen stoppar profilering på en process som fortsätter att köras. Händelserna DCEnd avbildar systemets tillstånd när profilering stoppas.

Före uppräkningens DCEndInit början utlöses händelsen. I slutet av uppräkningen DCEndComplete utlöses händelsen för att meddela konsumenten att datainsamlingen avslutades normalt. Startkörning och slutkörning används främst för hanterad symbolmatchning. Start rundown kan ge information om adressintervall för metoder som redan har JIT-kompilerats innan profileringssessionen startades. Slutkörning kan ge information om adressintervall för alla metoder som har JIT-kompilerats när profileringen håller på att stängas av.

Slutkörning sker inte automatiskt när en profileringssession stoppas. I stället måste ett verktyg som försöker utföra hanterad symbolmatchning uttryckligen anropa en CLR-rundownprovidersession med nyckelordet EndRundownKeyword aktiverat, precis innan profileringen stoppas.

Även om antingen startkörning eller slutkörning kan ge information om metodadressintervall för hanterad symbolmatchning rekommenderar vi att du använder nyckelordet EndRundownKeyword (som tillhandahåller DCEnd händelser) i stället för nyckelordet StartRundownKeyword (som tillhandahåller DCStart händelser). Om du använder StartRundownKeyword sker körningen under profileringssessionen, vilket kan störa det profilerade scenariot.

ETW-datainsamling med runtime- och rundown-providers

I följande exempel visas hur du använder CLR-rundownprovidern på ett sätt som möjliggör symbolmatchning av hanterade processer med minimal påverkan, oavsett om processerna startar eller slutar i eller utanför det profilerade fönstret.

  1. Aktivera ETW-loggning med hjälp av CLR-körningsprovidern:

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

    Loggen sparas i filen clr1.etl.

  2. Om du vill stoppa profileringen medan processen fortsätter att köras startar du rundown-providern för att samla in DCEnd händelserna:

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

    Detta gör det möjligt för insamling av DCEnd händelser att starta en rundown-session. Du kan behöva vänta 30 till 60 sekunder på att alla händelser ska samlas in. Loggen sparas i filen clr1.et2.

  3. Inaktivera all ETW-profilering:

    xperf -stop clrRundown
    xperf -stop clr  
    
  4. Sammanfoga profilerna för att skapa en loggfil:

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

    Filen merged.etl innehåller händelserna från runtime- och rundown-providersessionerna.

Ett verktyg kan köra steg 2 och 3 (starta en rundown-session och sedan avsluta profilering) i stället för att omedelbart stänga av profilering när en användare begär att profileringen ska stoppas. Ett verktyg kan också köra steg 4.

Se även