Erhöhte Interrupt-& DPC-Zeit beim Streamen von Isoch-Daten an oder von einem IEEE 1394-Gerät

Dieser Artikel hilft Ihnen, das Problem zu umgehen, bei dem die Prozessorauslastung (Unterbrechung & DPC-Zeit) beim Streamen isochroner Daten an oder von einem IEEE 1394-Gerät erheblich erhöht wird.

Ursprüngliche Produktversion: Windows 7, Windows Server 2008
Ursprüngliche KB-Nummer: 2450963

Symptome

Beim Streamen isochroner Daten an oder von einem IEEE 1394-Gerät mit Windows 7 IEEE 1394-Bustreiber kann im Vergleich zu früheren Versionen des Windows IEEE 1394-Bustreibers eine deutliche Zunahme der Prozessorauslastung (Interrupt- und DPC-Zeit) beobachtet werden.

Ursache

Unter bestimmten Bedingungen wird vom Windows 7 IEEE 1394-Bustreiber (1394ohci.sys) der IEEE 1394-Hostcontroller so dass für jedes gesendete oder empfangene isochrone Paket ein Interrupt und daraus resultierender DPC (Deferred Procedure Call) generiert wird. Unter ähnlichen Bedingungen programmiert der Ältere Windows IEEE 1394-Bustreiber (ohci1394.sys und 1394bus.sys) den IEEE 1394-Hostcontroller, um nur einen Interrupt und DPC zu generieren, der am Ende jeder isochronen Übertragung (Frame) erfolgt, wie vom IEEE 1394-Gerätetreiber festgelegt, der die isochronen Übertragungen initiiert.

Eine isochrone Datenübertragung erfordert in der Regel mehrere isochrone Datenpakete, um eine sinnvolle Dateneinheit zu übertragen, z. B. einen Videoframe oder ein Audiobeispiel. Ein IEEE 1394-Gerätetreiber kann benachrichtigt werden, wenn eine solche sinnvolle Einheit von Daten übertragen wurde, indem eine Rückrufroutine in der Isoch-Deskriptorstruktur angegeben wird, die verwendet wird, um den für diese Übertragung verwendeten Puffer zu beschreiben. Diese Isoch-Deskriptorstruktur wird über eine REQUEST_ISOCH_ATTACH_BUFFERS E/A-Anforderung an den Microsoft Windows IEEE 1394-Bustreiber übermittelt und zum Programmieren des IEEE 1394-Hostcontrollers für die angeforderte isochrone Übertragung verwendet.

Das in diesem Artikel beschriebene Problem tritt auf, wenn ein IEEE 1394-Gerätetreiber Isoch-Deskriptoren übermittelt, die jeweils den Datenwert eines einzelnen Pakets beschreiben, anstelle von Isoch-Deskriptoren, die jeweils mehrere Datenpakete beschreiben, z. B. einen vollständigen Videoframe oder ein Audiobeispiel. In diesem Szenario werden mehrere Isoch-Deskriptoren vom IEEE 1394-Gerätetreiber angefügt, einer pro Paket, und eine Rückrufroutine wird nur im letzten Isoch-Deskriptor angegeben.

Daher ruft der Windows 7 IEEE 1394-Bustreiber nur die angegebene Rückrufroutine auf, wenn das letzte Datenpaket übertragen wurde, aber der programmiert den IEEE 1394-Hostcontroller, um einen Interrupt zu generieren, sobald die von jedem Isoch-Deskriptor beschriebenen Daten übertragen wurden. Jeder Interrupt bewirkt, dass der Interrupthandler und DPC-Routinen im Microsoft Windows 7 IEEE 1394-Bustreiber aufgerufen werden, was zu einer Erhöhung der Interrupt- und DPC-Zeit führt, was in Leistungsüberwachungstools beobachtet werden kann und auswirkungen auf die Gesamtleistung des Systems haben kann.

Problemumgehung

Es kann möglich sein, dieses Problem zu umgehen, indem das Verhalten des betroffenen IEEE 1394-Gerätetreibers geändert wird, um einen einzelnen Isoch-Deskriptor für jede aussagekräftige Dateneinheit wie einen Videoframe oder ein Audiobeispiel zu übermitteln, anstatt einen Isoch-Deskriptor für jedes Datenpaket zu übermitteln. Dies würde auch die Gesamtzahl der Isoch-Deskriptoren reduzieren, die für die Übertragung der gleichen Menge an isochronen Daten erforderlich sind, und im Allgemeinen wird erwartet, dass der Verarbeitungsaufwand für jede REQUEST_ISOCH_ATTACH_BUFFERS E/A-Anforderung reduziert wird.

Weitere Informationen

Weitere Informationen dazu, wie IEEE 1394-Clienttreiber isochrone Übertragungen an den Microsoft IEEE 1394-Bustreiber übermitteln, finden Sie in den folgenden Artikeln:

Gilt für

  • Windows 7 Ultimate
  • Windows 7 Enterprise
  • Windows 7 Professional
  • Windows 7 Home Premium
  • Windows 7 Home Basic
  • Windows 7 Starter
  • Windows Server 2008 R2 Standard
  • Windows Server 2008 R2 Enterprise
  • Windows Server 2008 R2 Datacenter