Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Di seguito è riportato uno scenario creato artificialmente che simula un blocco di acquisizione. Si tratta di uno scenario particolarmente prezioso perché si verificano spesso situazioni simili nei test di stress. Lo scenario è il seguente:
Il componente di registrazione di Windows Sndrec32 sta registrando dal dispositivo di acquisizione principale, in questo caso un dispositivo wave Creative SBLive. Per un periodo di tempo, registra normalmente; tuttavia, il grafico si blocca a 8,50 secondi perché abbiamo esplicitamente impedito a portcls di completare gli IRP di acquisizione ai fini di questo test.
L'applicazione risulta in esecuzione, ma la posizione del flusso non avanza. La posizione viene interrotta a 8,50 secondi.
Poiché il dispositivo di acquisizione principale in questo computer è una scheda audio PCI, usare prima il comando !ks.pciaudio per provare a determinare un punto di partenza. Usare un valore flag pari a 1 per richiedere una visualizzazione di tutti i flussi in esecuzione:
kd> !pciaudio 1
1 Audio FDOs found:
Functional Device 8121c030 [\Driver\emu10k]
Wave Cyclic Streams:
Pin 812567c0 RUN [emu10k1m!CMiniportWaveCyclicStreamSBLive ff9ec7f8]
In questo caso, è presente un solo dispositivo audio PCI e viene gestito dal driver Intel emu10k (\Driver\emu10k). Questo driver ha attualmente un singolo flusso in esecuzione (0x812567C0). È ora possibile usare !ks.graph per visualizzare il grafico del kernel. Impostare Livello e Flag entrambi su 7 per ottenere la massima definizione sullo stallo:
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
Quanto sopra mostra i dettagli per la fabbrica 0. Il pin di output emu10k 0x812567C0 è connesso al pin di input splitter 0x811DF960. Ci sono otto IRP in coda per il pin di output di emu10k. L'output di !ks.graph è il seguente:
"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
Ci sono dieci IRP in coda per il pin di output dello splitter.
Input Factory 1:
Pin 811df960 (File 81187820, <- "emu10k" 812567c0) Irps(q/p) = 0, 8
Pending: 81255418 811df008 81252008 81255280 81250b30 ffa1fe70 81252e70 ffa01d98
Il pin di input di Splitter non ha IRP in coda; tuttavia, è in attesa che otto IRP provenienti da emu10k entrino nella coda.
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
Da queste informazioni, l'analizzatore suggerisce che emu10k o WaveCyclic potrebbero essere in errore. Fornisce inoltre un elenco dei sospetti IRP; si tratta degli IRP accodati al pin di input di emu10k. Se uno di questi IRP dovesse essere completato, lo splitter copierebbe i dati, completerebbe un IRP e il grafico progredirebbe. Per qualche motivo, emu10k non sta completando quei pacchetti di richiesta I/O (IRPs).