Freigeben über


Hardwareanforderungen für WavePci-Geräte

Bei der Auswahl der Features eines neuen Hardwaredesigns sollten Anbieter die folgenden allgemeinen Prinzipien befolgen:

  • Anstatt zu versuchen, die gesamte Verarbeitung einfach auf Hardware zu verschieben, sollten Anbieter die Kosten der einzelnen Features gegen ihre Auswirkungen auf die Leistung abwägen.

  • Bei der Betrachtung des potenziellen Werts eines Hardwarefeatures sollte ein Hersteller dieses Feature in Bezug auf seine Auswirkungen auf das System als Ganzes bewerten, anstatt sich nur auf ein bestimmtes Subsystem wie z. B. Audio zu konzentrieren.

  • Indem Anbieter mit Bedacht auswählen, welche Features in der Hardware beschleunigt werden sollen, können Anbieter die CPU-Workload entlasten und die Arbeitsspeicherauslastung verbessern, wodurch mehr Systemressourcen für andere Aufgaben zur Verfügung stehen.

In der Vergangenheit ist es nicht allen Audiohardwaredesigns gelungen, diese Prinzipien zu befolgen.

Bei der Wiedergabe von Audioinhalten oder beim Mischen mehrerer Streams verbrauchen einige WDM-Audiotreiber unnötig viel CPU-Zeit und Busbandbreite. Solche Mängel sind in der Regel das Ergebnis fehlerhafter Hardwaredesigns und ineffizienter Treiberimplementierungen. Hardwaredesignfehler können auch verhindern, dass ein Audiotreiber bestimmte Wellenformate verarbeitet, oder es sind Problemumgehungen erforderlich, die einen Softwareeingriff erfordern.

Der Zweck des WaveCyclic-Gerätemodells besteht darin, die Hardwareeinschränkungen älterer Audiogeräte zu berücksichtigen. Neue Hardwaredesigns sollten vollständig mit WavePci kompatibel sein.

Ein WavePci-Gerät, das true scatter/gather DMA ausführen kann, entfällt die Notwendigkeit, dass die CPU Zeit damit verbringt, Audiodaten zwischen Puffern zu kopieren. Im Gegensatz zu WaveCyclic hat WavePci keine inhärente Notwendigkeit zum Kopieren von Daten, was es zum bevorzugten Miniporttreiber für Multistream- oder hardwarebeschleunigte Audiogeräte macht. Ein gut konzipiertes WavePci-Gerät sollte fast keine CPU-Ressourcen verbrauchen, sodass eine große Anzahl von Audiostreams (64 oder mehr) zur 3D-Verarbeitung und -Mischung an die Hardware gesendet werden kann.

Ein WavePci-Gerät erfordert einen Bus-master DMA-Controller, der DMA-Übertragungen von Scatter/Gather unterstützt. Hardwaredesigns sollten die Arten von Datenübertragungen, die der DMA-Controller verarbeiten kann, nicht willkürlich einschränken. Ein WavePci-Gerät sollte die folgenden Anforderungen erfüllen:

  • Das Gerät muss ein Bus-master sein.

    Es sollte in der Lage sein, autonom auf den Systemspeicher zuzugreifen, ohne dass das Betriebssystem eingreifen muss und ohne System-DMA-Ressourcen zu verwenden.

  • Das Gerät muss Datenübertragungen beliebiger Länge verarbeiten können.

    Es sollte Zuordnungen (siehe IPortWavePciStream::GetMapping) verarbeiten, die größer als eine Speicherseite sind. Ein Gerät mit einer Übertragungsbeschränkung von z. B. 4 KB entspricht nicht den anforderungen für WavePci. Auf 64-Bit-CPUs, die Microsoft Windows unterstützen, beträgt die Seitengröße 8 Kb, was es wahrscheinlich macht, dass einige Zuordnungen größer als 4 KB sind. Datenübertragungen von mehr als 32 KB in einer einzelnen Zuordnung sind theoretisch möglich, je nach physischer Speicherfragmentierung. Im anderen Extrem ist eine Zuordnungsgröße von einem Byte möglich.

  • Das Gerät sollte Datenübertragungen zu oder von einem beliebigen Speicherort im Systemspeicher verarbeiten.

    Datenübertragungen, die sich über 32 Kilobyte oder größere Power-of-Two-Grenzen erstreckt, sind sehr wahrscheinlich. Ein Computer kann jetzt mehr als 4 GB RAM enthalten, und in diesen Systemen können Zuordnungen im physischen Arbeitsspeicher entweder bei einer 64-Bit-CPU oder bei der x86-Erweiterung für physische Adressen (PaE) größer als 4 Gb sein. Um die beste Leistung auf diesen Computern zu erzielen, sollten Anbieter Geräte erstellen, die die 64-Bit-Adressierung unterstützen. Andernfalls ist das Kopieren von Daten in Software erforderlich. Das Kopieren von Daten war in der Vergangenheit für Geräte mit 24-Bit-Adressierung auf Systemen mit mehr als 16 Megabyte RAM erforderlich. Geräte sollten WaveCyclic anstelle von WavePci verwenden, wenn sie keine Lese- oder Schreibvorgänge in einem physischen Speicher ausführen können. Ein Treiber kann diese Entscheidung zum Startzeitpunkt des Geräts treffen (siehe IRP_MN_START_DEVICE), nachdem er die Möglichkeit hatte, festzustellen, ob seine Adressreichweite für den Zugriff auf den vollständigen Adressbereich des Systemspeicherbus ausreicht.

  • Das Gerät sollte Datenübertragungen mit beliebiger Ausrichtung verarbeiten.

    Zuordnungen können mit beliebigen Bytegrenzen im Arbeitsspeicher beginnen und enden. Ein Frame mit Audiodaten kann zwischen Zuordnungen aufgeteilt werden, wobei die Beispiele für die ersten Kanäle am Ende der ersten Zuordnung und die Beispiele für die verbleibenden Kanäle in der zweiten Zuordnung enthalten sind. Ein Beispiel finden Sie unter Wellenfilter. Bei einigen Beispielgrößen kann sogar ein Beispielcontainer zwischen Zuordnungen aufgeteilt werden. Wenn das Gerät erfordert, dass übertragungen sich auf Cacheliniengrenzen befinden müssen, oder wenn das Gerät erfordert, dass die Übertragungen streng an audio-frame-Grenzen ausgerichtet sind (z. B. unter der Annahme, dass die Übertragungsgröße gleichmäßig in vier geteilt wird, im Stereo-16-Bit-Fall), ist dieses Gerät für die vollständige WavePci-Konformität nicht geeignet. Beachten Sie, dass ein nicht kompatibles Hardwarestück als WavePci-Gerät verfügbar gemacht werden kann, indem die Datenbereiche oder Formate beschränkt werden, die der Treiber verfügbar macht (z. B. nur bestimmte Bittiefen oder nur bestimmte Kanalkonfigurationen).

In Bezug auf den letzten Punkt in der vorherigen Liste sollte die Scatter/Gather-DMA-Engine eines WavePci-Geräts Puffer verarbeiten, die die Grenzen von Speicherseiten überschreiten. Beispielsweise hat ein Puffer, der 10 Millisekunden im Wert von 16-Bit-PCM-Audiobeispielen für einen 48-kHz-Wellenstrom mit 5,1 Kanälen enthält, die folgende Größe:

(6 Samples/Frame)*(2 Bytes/Sample)*(48K Frames/Sekunde)*(10 Millisekunden) = 5760 Bytes

Dies überschreitet die Größe der Arbeitsspeicherseite (4096 Bytes), was bedeutet, dass der Puffer je nach Position im Arbeitsspeicher entweder eine oder zwei Seitengrenzen enthält. Der Puffer enthält eine integrale Zahl (480) von Frames von Audiodaten, aber ein oder zwei dieser Frames können Seitengrenzen überschreiten.

Aus diesem Grund sollte die Punkt-/Erfassungs-DMA-Hardware für ein WavePci-Gerät für die Verarbeitung von Audioframes (z. B. Frame 197 in der folgenden Abbildung) konzipiert werden, die zwischen zwei physisch nicht zusammenhängenden Seiten im Arbeitsspeicher aufgeteilt sind.

Diagramm zur Veranschaulichung eines Audiopuffers mit einem Offset vom Anfang einer Speicherseite.

Oben in der vorherigen Abbildung befindet sich ein 5760-Byte-Puffer, der die Grenze zwischen zwei Seiten überspannt. In diesem Beispiel beginnt der Puffer mit einem Offset von 1728 Byte vom Anfang der ersten Seite, wodurch der Anfang des Puffers an einer 64-Byte-Grenze im Arbeitsspeicher ausgerichtet wird. Angenommen, jeder Audioframe belegt 12 Byte und enthält sechs Kanäle. Die erste Seite enthält alle Frames 0 bis 196, aber nur die ersten vier Bytes von Frame 197.

Am unteren Rand der Abbildung befindet sich eine detaillierte Ansicht des Audioframes 197, die zeigt, dass nur die Beispiele für die Kanäle 0 und 1 auf die erste Seite fallen. Die Beispiele für die Kanäle 2 bis 5 sind auf der zweiten Seite enthalten.

Obwohl die beiden Seiten oben in der Abbildung nebeneinander angezeigt werden, sind sie tatsächlich nur im virtuellen Kernelspeicher zusammenhängend. Da die Seiten, die den Puffer enthalten, im physischen Speicher nicht zusammenhängend sind, muss ein Scatter/Gather-DMA-Controller, der physische Adressen verwendet, die beiden Teile des Puffers als zwei separate Einträge in seiner Übertragungswarteschlange angeben. Der WavePci-Porttreiber teilt den Puffer automatisch in zwei separate physische Zuordnungen an der Seitengrenze auf.

Selbst wenn das vorherige Beispiel geändert wird, um den Puffer am Anfang der ersten Seite auszurichten, verschwindet das Splitframe-Problem nicht. Die folgende Abbildung veranschaulicht diesen Punkt. In diesem Fall wird Frame 341 an der Seitengrenze mit den Beispielen für die Kanäle 0 und 1 aufgeteilt, die auf die erste Seite fallen, und die Beispiele für die Kanäle 2 bis 5 auf der zweiten Seite.

Diagramm zur Veranschaulichung eines Audiopuffers, der am Anfang einer Speicherseite ausgerichtet ist.

Ein WavePci-Gerät, dessen Scatter/Gather-DMA-Controller geteilte Audioframes nicht ordnungsgemäß verarbeitet, ist auf die Arten von Audiodatenformaten beschränkt, die es verarbeiten kann, obwohl Softwareumgehungen einige Hardwareentwurfsfehler beheben können. Weitere Informationen finden Sie unter WavePci-Latenz.