Aracılığıyla paylaş


Yakalama Kabini Analiz Etme

Aşağıda, bir yakalama duraksamasını simüle eden yapay olarak oluşturulmuş bir senaryo yer alır. Bu özellikle değerli bir senaryodur çünkü stres testlerinde benzer durumlar sık sık ortaya çıkar. Senaryo aşağıdaki gibidir:

Windows kayıt bileşeni Sndrec32, birincil yakalama cihazından, bu örnekte Creative SBLive ses cihazından kayıt yapıyor. Bir süre için normal olarak kaydeder; ancak bu testin amaçları doğrultusunda bağlantı noktalarının yakalama IRP'lerini tamamlamamasına açıkça neden olduğumuz için grafik 8,50 saniyede durur.

Uygulama çalışır durumda görünüyor, ancak akış konumu ilerlemiyor. Konum 8,50 saniyede durduruldu.

Bu makinedeki birincil yakalama cihazı bir PCI ses kartı olduğundan, bir başlangıç noktası belirlemeyi denemek için önce !ks.pciaudio komutunu kullanın. Çalışan tüm akışların görüntülenmesini istemek için 1 bayrak değerini kullanın:

kd> !pciaudio 1

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

Bu durumda, yalnızca bir PCI ses cihazı vardır ve Intel emu10k sürücüsü (\Driver\emu10k) tarafından hizmet velanır. Bu sürücü şu anda tek bir çalışan akışa sahiptir (0x812567C0). Artık çekirdek grafını görüntülemek için !ks.graph kullanabilirsiniz. Durakta en fazla ayrıntıyı elde etmek için Düzey ve Bayraklar'ı 7 olarak ayarlayın:

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 

Yukarıdaki, fabrika 0'ın ayrıntılarını gösterir. emu10k çıkış pini 0x812567C0 0x811DF960 ayırıcı giriş pinine bağlanır. emu10k'un çıkış pin'ine kuyruğa alınmış sekiz IRP vardır. !ks.graph çıktısı aşağıdaki gibi devam eder:

"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 

Ayırıcının çıkış pin'ine kuyruğa alınmış on IRP vardır.

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

Ayırıcının giriş pininde kuyruğa alınmış IRP yok; ancak, emu10k'tan gelen sekiz IRP'nin kuyruğa girmesini bekliyor.

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

Bu bilgilerden çözümleyici, emu10k veya WaveCyclic'in hatalı olabileceğini önerir. Ayrıca şüpheli IRP'lerin bir listesini sağlar; bunlar, emu10k'un giriş pin'ine kuyruğa alınan IRP'lerdir. Eğer bu IRP'lerden herhangi biri tamamlanırsa, ayırıcı verileri kopyalar ve bir IRP'yi tamamlayarak grafik ilerler. Bazı nedenlerden dolayı, emu10k bu yakalama Irp'lerini tamamlamıyor.