Användning av !ks.graph

Kommandot !ks.graph är ett av de mest kraftfulla tilläggskommandona i modulen för kernelströmningstillägg. Det här kommandot visar en bild av en hel graf i kernelläge från en viss startpunkt.

Innan du kör !ks.graph kanske du vill aktivera alla bibliotekstillägg som kan vara aktiva. Det gör du genom att utfärda ett !ks.libexts enableall-kommando . Utdata från !ks.graph är en textbeskrivning av kernellägesdiagrammet i topologiskt sorterad ordning. Här är ett exempel:

kd> !graph ffa0c6d4 7
Attempting a graph build on ffa0c6d4...  Please be patient...
Graph With Starting Point ffa0c6d4:
"usbaudio" Filter ffaaa768, Child Factories 2
    Output Factory 0:
        Pin ffb1caf0 (File 811deeb8, -> "splitter" ffa8b008) Irps(q/p) = 7, 1

I det här exemplet visas en inspelningsgraf där två Sndrec32.exespelar in från en Telex USB-mikrofon. Varje enskild post börjar med ett namn (usbaudio, i det ovanstående avsnittet) och visar filteradressen (0xFFAAA768) samt antalet underliggande pinfabriker (2) i filtret.

Under varje post räknas varje fabrik upp och visar adressen för varje pin-instans (0xFFB1CAF0), filobjektet (0x811DEEB8) som motsvarar varje instans, anslutningens riktning, anslutningens mål och adressen till målstiftet (0xFFA8B008). Antalet köade (7) och väntande IRPs (1) för varje stift visas också.

Anslutningar som har framåtriktade riktningssymboler (->) indikerar att stiftet är ett utgångsstift som är anslutet till ett ingångsstift. Anslutningar som har symboler för omvänd riktning (<-) är å andra sidan indatastift och visar anslutningens ursprung. Utdata fortsätter på följande sätt:

"splitter" Filter ffa0c660, Child Factories 2
    Output Factory 0:
        Pin 81250008 (File ffb10028, -> "kmixer" 8123c000) Irps(q/p) = 3, 0
        Pin 811df9c0 (File ffaaf2f0, -> "kmixer" 81236000) Irps(q/p) = 3, 0
    Input Factory 1:
        Pin ffa8b008 (File ffb26d68, <- "usbaudio" ffb1caf0) Irps(q/p) = 1, 7
"kmixer" Filter ffa65b70, Child Factories 4
    Input Factory 2:
        Pin 81236000 (File ffaaf7d0, <- "splitter" 811df9c0) Irps(q/p) = 0, 0
    Output Factory 3:
        Pin 81252d00 (File 811df1d8) Irps(q/p) = 10, 0
"kmixer" Filter ffb03808, Child Factories 4
    Input Factory 2:
        Pin 8123c000 (File ffb10130, <- "splitter" 81250008) Irps(q/p) = 0, 0
    Output Factory 3:
        Pin ffa1e9c0 (File 81253468) Irps(q/p) = 10, 0

Använd följande procedur för att följa diagrammet:

Så här följer du den här grafen:

  1. Hitta stiftet som intresserar dig. Överväg 0xFFB1CAF0, usbaudios utdatastift (fabrik 0).

  2. Hitta den anslutna pin-koden. I det här exemplet är detta delningsstiftet 0xFFA8B008.

  3. Titta på anslutningsriktningen och flytta åt det hållet och leta efter filternamnet. (Kom ihåg att listan är topologiskt sorterad.) I det här exemplet anger högerpilen att vi måste titta under den här posten i listan för att hitta motsvarande stift. Delningsfiltret 0xFFA0C660 är omedelbart under.

  4. Hitta adressen till destinationspinnen i listan över filterpinnar. I det här fallet är den här adressen 0xFFA8B008.

Kommandot 'Följ denna graf' kan också användas för att analysera stoppade grafer från en viss startpunkt. Det gör du genom att ange 4 i parametern Flaggor :

kd> !graph 812567c0 7 4

Attempting a graph build on 812567c0...  Please be patient...

Graph With Starting Point 812567c0:

"emu10k" Filter ff9ebb98, Child Factories 5
    Output Factory 0:
        Pin 812567c0 (File 811c6630, -> "splitter" 811df960) Irps(q/p) = 8, 0
"splitter" Filter ffb18890, Child Factories 2
    Output Factory 0:
        Pin 811df430 (File ffa55f90) Irps(q/p) = 10, 0
    Input Factory 1:
        Pin 811df960 (File 81187820, <- "emu10k" 812567c0) Irps(q/p) = 0, 8

Analyzing a Hung Graph From 812567c0:

Suspect Filters (For a Hung Graph):
    "emu10k" Filter ff9ebb98 or class "PortCls Wave Cyclic" is suspect.
        Reasons For This Analysis:
            - No critical pin has less than 8 queued Irps
            - Downstream "splitter" pin 811df960 is starved
        Irps to check:
            81255418 811df008 81252008 81255280 81250b30 ffa1fe70 81252e70 ffa01d98

NOTE: The above is based on heuristic analysis.  It is not designed to be a
      replacement for an actual developer looking at this particular hang!  The
      filters listed as suspects may or may not be the actual cause of the
      stall!

För sådana utdata, titta på listan "misstänkta". Dessa misstänkta filter är de som är i den kritiska vägen för det framsteg som görs i grafen. Börja felsökningen från den punkten baserat på orsakerna som analysatorn har tagit fram för stoppet.

Notera Den här funktionen bör endast användas på stoppade grafer! Analysatorn har inget sätt att veta hur länge grafen har varit i det här tillståndet. Genom att bryta dig in i felsökningsprogrammet och analysera ett körande diagram som om det vore ett stoppat diagram, visas fortfarande ett misstänkt filter.