Sdílet prostřednictvím


Analýza přerušení při zachytávání

Následuje uměle vytvořený scénář, který simuluje zpoždění při zachytávání. Toto je obzvláště cenný scénář, protože podobné situace se často vyskytují v zátěžovém testování. Scénář je následující:

Komponenta záznamu Systému Windows Sndrec32 nahrává z primárního zařízení pro zachytávání, v tomto případě zařízení Creative SBLive wave. Po určitou dobu zaznamenává normálně. Graf se však zastaví na 8,50 sekundách, protože jsme explicitně nastavili, aby portcls nedokončovalo zpracování jeho IRP pro účely tohoto testu.

Aplikace se zobrazuje jako spuštěná, ale pozice datového proudu se neposouvá. Pozice se zastaví na 8,50 sekundách.

Vzhledem k tomu, že primární zařízení pro zachytávání na tomto počítači je zvuková karta PCI, nejprve pomocí příkazu !ks.pciaudio zkuste a určete výchozí bod. K vyžádání zobrazení všech spuštěných datových proudů použijte hodnotu příznaku 1:

kd> !pciaudio 1

1 Audio FDOs found:
 Functional Device 8121c030 [\Driver\emu10k]
        Wave Cyclic Streams:
            Pin 812567c0 RUN [emu10k1m!CMiniportWaveCyclicStreamSBLive ff9ec7f8] 

V tomto případě je k dispozici pouze jedno zvukové zařízení PCI a obsluhuje ho ovladač Intel emu10k (\Driver\emu10k). Tento ovladač má aktuálně jeden spuštěný datový proud (0x812567C0). Teď můžete k zobrazení grafu jádra použít !ks.graph . Nastavte úroveň i příznaky na hodnotu 7, abyste získali maximální podrobnosti o stánku:

kd> !graph 812567c0 7 7
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
 Queued: 81255418 811df008 81252008 81255280 81250b30 ffa1fe70 81252e70 ffa01d98 

Výše uvedené podrobnosti pro továrnu 0. Výstupní kolík emu10k 0x812567C0 je připojený ke vstupnímu kolíku rozdělovače 0x811DF960. Ve frontě k výstupnímu pinu emu10k je osm IRP. Výstup z !ks.graph pokračuje následujícím způsobem:

"splitter" Filter ffb18890, Child Factories 2
    Output Factory 0:
        Pin 811df430 (File ffa55f90) Irps(q/p) = 10, 0
 Queued: ffadd008 ffa73b00 ffa1e998 811de310 ffa54370 ffaaf008 811dee70 81250e70 811de580 811de8c0 

Ve frontě na výstupním pinu rozdělovače je deset IRP.

    Input Factory 1:
        Pin 811df960 (File 81187820, <- "emu10k" 812567c0) Irps(q/p) = 0, 8
            Pending: 81255418 811df008 81252008 81255280 81250b30 ffa1fe70 81252e70 ffa01d98 

Vstupní pin splitteru nemá žádné IRP zařazené do fronty, ale čeká na osm z emu10k, aby vstoupily do fronty.

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

Z těchto informací analyzátor naznačuje, že chyba může být buď v emu10k, nebo WaveCyclic. Poskytuje také seznam podezřelých IRP; jedná se o IRP, které jsou zařazené do fronty na vstupní pin emu10k. Pokud by některý z těchto IRP byl dokončen, rozdělovač by zkopíroval data a dokončil IRP a graf by pokračoval. Z nějakého důvodu emu10k nedokončuje tyto zachytávací Irps.