Warum setzt der Ton aus, obwohl die CPU-Auslastung niedrig ist? — Gedacht von Puffern und Fristen her
· Aktualisiert am: · Go Komura · Windows, Audio, Leistung, Fehlerbehebung
Sie hören Musik, und immer wieder bricht sie mit einem Knacken ab. Sie öffnen den Task-Manager, und die CPU-Auslastung liegt bei etwa 10 %. Video läuft weiter, und die Maus bewegt sich normal.
Man möchte fragen: „Bei all diesem Spielraum ist Audio wiedergeben also zu viel verlangt?“
Was Audio braucht, ist aber nicht nur die Fähigkeit, viel Arbeit schnell zu erledigen. Es braucht auch, dass der nächste Abschnitt Klang bereitliegt, bevor das jetzt Laufende ausgeht. Dieser Artikel verfolgt dieses verspätete Nachfüllen, den Mechanismus hinter einem typischen Aussetzer.1
Wir beginnen bei der Musikwiedergabe auf einem PC. Die Abschnitte 1 bis 4 schließen die Erörterung des Mechanismus ab, ab Abschnitt 5 folgen die Untersuchungsmethoden. Vorausgesetzt wird durchgängig Audioausgabe unter Windows 11, und die Zahlen sind Annahmen zur Erklärung.
1. Audio wird wiedergegeben, während ein wenig vom Folgenden vorgehalten wird
Eine auf dem PC gespeicherte Musikdatei bringt die Lautsprecher nicht zum Klingen, indem sie einfach dort liegt. Die Wiedergabeanwendung bereitet die Audiodaten auf und liefert sie über Windows und den Treiber an das Gerät, das den Ton erzeugt. Im üblichen gemeinsam genutzten Modus mischt die Windows-Audio-Engine unterwegs mehrere Streams und wendet Effekte an.2
Würde Audio Stück für Stück genau dann übergeben, wenn es gebraucht wird, schlüge die geringste Verzögerung in der Verarbeitung direkt auf die Wiedergabe durch. Deshalb wird ein wenig von dem, was als Nächstes wiedergegeben wird, im Voraus vorgehalten. Dieser vorübergehende Ablageort ist der Puffer. Während die Wiedergabe auf der Geräteseite fortschreitet, füllen die Anwendung und die Audioverarbeitung ihn mit den nächsten Daten nach.3
flowchart TB
accTitle: Etwas Klang vorpuffern und dann wiedergeben
accDescr: Der Ablauf, den Puffer mit aufbereiteten Audiodaten nachzufüllen und die nächsten Daten vorzubereiten, während die Wiedergabe auf der Geräteseite fortschreitet.
A["Die nächsten Audiodaten vorbereiten"] --> B["Den Puffer nachfüllen"]
B --> C["Das gepufferte Audio wiedergeben"]
C -.->|"Bevor der Rest ausgeht"| A
Abbildung 1: Damit die Wiedergabe weiterläuft, muss das Nachfüllen mit der Seite Schritt halten, die das Audio verbraucht.
Nehmen wir an, der Puffer enthält gerade 10 Millisekunden Audio. Trifft das nächste Nachfüllen in 8 Millisekunden ein, schließt es an, solange noch etwas übrig ist. Kommt aber bis in 12 Millisekunden nichts, ist der Vorrat bei der 10-Millisekunden-Marke aufgebraucht.
flowchart TB
accTitle: Dieselben 10 Millisekunden Rest, anderes Ergebnis je nach Zeitpunkt des Nachfüllens
accDescr: Als Annahme zur Erklärung wird gezeigt, dass bei 10 Millisekunden verbliebener Wiedergabedaten ein Nachfüllen nach 8 Millisekunden rechtzeitig ankommt, während eines nach 12 Millisekunden erst nach dem Aufbrauchen eintrifft.
A["Jetzt noch 10 Millisekunden"] --> B["Nachfüllen 8 ms später"]
B --> C["Schließt an, solange etwas übrig ist"]
A --> D["Nachfüllen 12 ms später"]
D --> E["Vorrat bei 10 ms erschöpft"]
Abbildung 2: Ein vereinfachtes Beispiel in Zeitbegriffen. Entscheidend ist nicht nur, ob nachgefüllt wurde, sondern wann.
Auszugehen, weil die Lieferung der benötigten Audiodaten nicht rechtzeitig eintrifft, ist ein Unterlauf. Er führt zu Aussetzern, Knacksen und Ähnlichem. Selbst wenn die Daten verspätet auftauchen, lässt sich eine bereits gehörte Lücke nachträglich nicht füllen.1
Audiowiedergabe ist Arbeit, bei der „es wurde irgendwann berechnet“ nicht genügt; gebraucht wird „es war fertig, als es klingen musste“.
In der Abbildung kennzeichnet eine durchgezogene Linie eine stets geltende Beziehung und eine gestrichelte Linie eine bedingte (die Bedingungen stehen bei jeder Beziehung auf der Detailseite). Die vollständige Liste der Beziehungen (5 insgesamt, mit Beleg und Sicherheitsgrad) und die Definitionen der wichtigsten Konzepte sind auf der Detailseite der Wissenskarte (auf Japanisch) zusammengestellt. Daten: JSON-LD / Turtle
2. Warum das Nachfüllen zu spät kommt, obwohl die CPU im Leerlauf ist
Hört man das, liegt die Antwort nahe: „Dann füllt doch früher nach, wenn die CPU im Leerlauf ist.“
Die Zahl der CPU-Auslastung ist aber keine Zählung eingehaltener Audiofristen. Wie beschäftigt die gesamte CPU über einen Zeitraum war und ob das kurze Stück Arbeit, das Audio nachfüllt, im benötigten Augenblick laufen durfte, sind zweierlei. Eine niedrige Gesamtlast ist keine Garantie, dass die Audioarbeit jedes Mal sofort an die Reihe kommt.4
Im obigen Beispiel: Selbst wenn über den größten Teil einer Sekunde Spielraum besteht, erschöpft ein einziger Abschnitt, in dem 12 Millisekunden lang nicht nachgefüllt werden kann, die verbliebenen 10 Millisekunden Audio. Spielraum, der später in der Sekunde besteht, rettet dieses eine verspätete Eintreffen nicht.
Nicht langsames Rechnen, sondern Warten auf die Gelegenheit zu laufen
Angenommen, der Code, der die Audiodaten vorbereitet, wartet auf das Ende eines Dateilesevorgangs. Oder er wartet auf eine Sperre, die eine andere Arbeit innerhalb der Anwendung hält. Während er wartet, verbraucht dieser Code selbst wenig CPU. Das bereits laufende Audio läuft trotzdem weiter ab. Eine verspätete Datenlieferung und ein wartender Thread treten unabhängig vom Aufbrauchen der CPU auf.54
flowchart TB
accTitle: Die Wiedergabe schreitet auch während Wartezeiten fort, die keine CPU verbrauchen
accDescr: Die Wiedergabe schreitet fort, während die Audioverarbeitung auf Daten oder eine Sperre wartet, sodass der Puffer bei weiterhin niedriger CPU-Auslastung leerlaufen kann.
A["Audioverarbeitung wartet auf Daten"] --> B["Diese Arbeit verbraucht keine CPU"]
A --> C["Die Wiedergabe läuft weiter und der Rest schrumpft"]
C --> D["Ein verspätetes Nachfüllen bedeutet Ausgehen"]
Abbildung 3: „Die CPU nicht zu benutzen“ ist nicht dasselbe wie „die nötige Arbeit ist erledigt“.
Auch Geräte, die mit Audio nichts zu tun zu haben scheinen, können es aufhalten
Es gibt einen zweiten Fall, in dem die Reihe auf der Windows-Seite nicht herumkommt.
Trifft eine Meldung von einem Netzwerkgerät oder Ähnlichem ein, führt Windows Code aus, der den Interrupt behandelt. Das kurze erste Stück dieser Arbeit ist die ISR, und der Mechanismus, der die restliche Arbeit aufschiebt, ist der DPC. Während ein gewöhnlicher DPC oder eine ISR läuft, kann diese logische CPU keine gewöhnlichen Threads ausführen. Auch die Audioverarbeitung unterliegt dem.64
Läuft solche Arbeit lange oder häufig auf der CPU, auf der das Audio laufen muss, verschiebt sich die Gelegenheit zum Nachfüllen nach hinten. Microsofts Material zur Leistungsanalyse für Audio und Video erläutert ebenfalls, dass lange DPCs und ISRs von Netzwerk-, Speicher-, Grafik- und anderen Treibern Audiostörungen verursachen können.5
flowchart TB
accTitle: Wenn die Reaktion auf ein Gerät die Ausführung von Audio verzögert
accDescr: Läuft ein gewöhnlicher DPC oder eine ISR lange auf der CPU, die die Audioverarbeitung benötigt, verzögert sich die Thread-Ausführung und die Nachfüllfrist kann betroffen sein.
A["DPC oder ISR auf derselben CPU"] -->|"Wenn er lange läuft"| B["Die Audioausführung wird aufgehalten"]
B --> C["Das nächste Nachfüllen kommt zu spät"]
C --> D["Ein Aussetzer, sobald der Rest ausgeht"]
Abbildung 4: Nicht nur das Gerät, das den Ton erzeugt; Arbeit für andere Geräte kann indirekt wirken.
Anders gesagt: Ein Aussetzer bedeutet nicht nur „die CPU ist zu langsam, um die Berechnung fertigzustellen“. Die Berechnung kann nicht starten, oder die benötigten Daten treffen nicht ein. Auch dieses Warten ist Zeit, die aus der Frist des Audios herausgefressen wird.
3. Warum dann nicht einfach viel Audio vorhalten?
Kommt das Nachfüllen etwas zu spät, scheint es vernünftig, genug Vorrat zu halten, um diese Verzögerung aufzufangen. Genau diese Überlegung führt dazu, den Audiopuffer zu vergrößern.
Unter denselben Bedingungen lässt sich mit mehr vorgehaltenem Audio eine kurze Nachfüllverzögerung leichter überstehen. Aber jetzt wartet neu erzeugtes Audio hinter dem bereits vorgehaltenen.12
Wenn Sie nur Musik hören, stört ein kurzer Moment nach dem Drücken der Wiedergabe vielleicht nicht. Spielen Sie ein am PC angeschlossenes Keyboard oder bearbeiten Sie Ihre eigene Stimme von einem Mikrofon und hören sie selbst mit, wird dieses Warten zu einer Lücke zwischen Handlung und Klang.
flowchart TB
accTitle: Pufferspielraum und langsamere Reaktion
accDescr: Mehr vorgehaltenes Audio macht vorübergehende Nachfüllverzögerungen leichter auffangbar, während auch die Wartezeit wächst, bis neues Audio wiedergegeben wird.
A["Mehr Audio im Voraus vorhalten"] --> B["Nachfüllverzögerungen lassen sich leichter auffangen"]
A --> C["Neues Audio wartet dahinter"]
C --> D["Mehr Verzögerung von der Handlung zum Klang"]
Abbildung 5: Den Puffer zu vergrößern ist eine Anpassung, die Spielraum gegen Reaktionsfähigkeit eintauscht.
Die Puffereinstellungen 128, 256 und 512 in Musikproduktionssoftware beziehen sich ebenfalls auf diese Zeit. In PCM heißt die Einheit, die die Abtastwerte aller Kanäle zum selben Zeitpunkt zusammenfasst, Frame. Bei 48 kHz sind 480 Frames 480 geteilt durch 48000 Sekunden, also 10 Millisekunden Audio. Bei gleicher Abtastrate gilt: je mehr Frames, desto länger der Audioabschnitt, den sie fassen.3
Gezählt wurde hier die Länge des Audios, die dieser Puffer darstellt. In der Praxis gibt es außerdem Verarbeitung in Anwendung, Treiber und Gerät, halten Sie das also von der Gesamtlatenz zwischen Tastendruck und gehörtem Ton getrennt. Auch teilen sich nicht alle Anwendungen unter Windows eine gemeinsame Puffereinstellung; die wählbaren Größen hängen ebenfalls von Gerät und Treiber ab.2
Kleiner ist also nicht höhere Leistung, und größer ist auch nicht die richtige Antwort. Die Anpassung besteht darin, die benötigte Reaktionsfähigkeit zu behalten und zugleich genug Spielraum zu nehmen, um Aussetzer zu vermeiden.
4. Was Audio braucht, ist Fristen einzuhalten, nicht Durchschnittsgeschwindigkeit
Zurück zur Ausgangsfrage.
Der Ton setzt bei niedriger CPU-Auslastung aus, weil Spielraum in der Gesamtverarbeitungskapazität und die rechtzeitige Lieferung des nächsten Klangabschnitts zweierlei sind.
Audio wird aus einer kleinen vorgehaltenen Menge wiedergegeben. Dieser Vorrat wird nachgefüllt, bevor er aufgebraucht ist. Ein einziges verspätetes Nachfüllen kann für eine Lücke genügen, und den Vorrat zu erhöhen bringt Spielraum, verlängert aber auch die Zeit, bis neues Audio zu hören ist.
Das ist der Kern des Mechanismus. Auch die Frage bei der Untersuchung ändert sich von „bei wie viel Prozent stand die CPU“ zu „worauf wartete im Augenblick des Tonabbruchs der nächste Klangabschnitt“. Ab hier folgt der Untersuchungsteil, um ein tatsächliches Symptom einzugrenzen.
5. Untersuchung: Finden Sie zuerst heraus, welche Kombination aussetzt
Ein gehörtes Knacken belegt für sich noch nicht den bisher beschriebenen Unterlauf. Das Ausgangsmaterial selbst, die Verarbeitung der Anwendung, Audioeffekte, das Ausgabegerät und andere Probleme erzeugen ähnliche Symptome. Microsofts Material zur Fehlerbehebung nennt ebenfalls Soundverbesserungen, das Format und Treiber unter den zu prüfenden Punkten.7
Ändern Sie zu Beginn nicht viele Einstellungen auf einmal. Geben Sie dieselbe kurze Quelle etwa gleich lang wieder und vergleichen Sie die Unterschiede einzeln. Tun Sie das außerhalb einer laufenden Besprechung oder Aufnahme, nachdem Sie Ihre Arbeit gesichert haben, und bei ohrenschonender Lautstärke.
| Zu vergleichende Bedingung | Was sie Ihnen sagt |
|---|---|
| Eine lokal gespeicherte Quelle gegenüber Wiedergabe über das Internet | Ob es nur bei Wiedergabe über das Internet auftritt |
| Dieselbe Quelle in einer anderen Anwendung wiedergegeben | Ob es sich auf eine Anwendung konzentriert |
| Ausgabe über Bluetooth und Ähnliches gegenüber eingebauter oder kabelgebundener Ausgabe | Ob es sich auf einen Ausgabepfad konzentriert |
| Soundverbesserungen aktiviert gegenüber deaktiviert | Ob die Kombination mit dieser Effektverarbeitung etwas ändert |
| In einer DAW oder Ähnlichem der aktuelle Puffer gegenüber einer Stufe größer | Ob mehr vorgehaltener Spielraum etwas ändert |
In dieser Reihenfolge lässt sich die einzeilige Klage „der Ton setzt aus“ so weit konkretisieren, dass sie lautet: „Er setzt nur in dieser Anwendung aus, wenn diese Ausgabe verwendet wird.“ Jede Änderung zurückzunehmen und es erneut zu versuchen erleichtert außerdem die Unterscheidung, ob das Symptom nur zufällig ausgeblieben ist.
flowchart TB
accTitle: Vergleich, der eine Bedingung ändert und sie dann zurücknimmt
accDescr: Die Reproduktion mit derselben Quelle bestätigen, eine Bedingung wie Anwendung oder Ausgabe ändern und das Ergebnis auch nach dem Zurücknehmen festhalten.
A["Mit der ursprünglichen Kombination wiedergeben"] --> B["Eine Bedingung ändern und wiedergeben"]
B --> C["Zurücknehmen und wiedergeben"]
C --> D["Bedingungen und Zeiten mit Aussetzern festhalten"]
Abbildung 6: Statt einer einzelnen Verbesserung bestätigen Sie, dass Bedingung und Symptom wiederholt zusammenpassen.
Beachten Sie, dass eine geänderte Ausgabe auch Treiber, Puffer und mehr ändert. „Über Kabel setzt es nicht aus“ ist ein Anhaltspunkt zur Untersuchung des Ausgabepfads, belegt für sich genommen aber nicht die Funkstrecke als Ursache. Ebenso ist eine Verbesserung durch einen größeren Puffer ein Anhaltspunkt dafür, dass zusätzlicher Zeitspielraum geholfen hat; sie beweist keinen Defekt eines bestimmten Treibers.
Um Soundverbesserungen zu vergleichen, wählen Sie in Windows unter „Einstellungen > System > Sound“ die betreffende Ausgabe aus und schalten Sie dort, wo verfügbar, „Soundverbesserungen“ aus und versuchen es erneut. Notieren Sie die ursprüngliche Einstellung und nehmen Sie sie zurück, wenn sie keinen Unterschied macht. Beziehen Sie Treiber von Windows Update oder aus der offiziellen Verteilung des Geräteherstellers und halten Sie die Versionen vor und nach der Änderung fest.7
6. Untersuchung: Den Augenblick des Aussetzers aufzeichnen und hineinzoomen
Wenn der Vergleich von Bedingungen die Sache nicht eingrenzt oder Sie Verarbeitung auf der Treiberseite vermuten, zeichnen Sie das Geschehen über einen kurzen Zeitraum auf. Der Windows Performance Recorder (WPR) nimmt die Aufzeichnung vor, und der Windows Performance Analyzer (WPA) ist das Werkzeug, um die aufgezeichnete Zeitachse im Detail zu untersuchen.8
Starten Sie die Aufzeichnung, bevor Sie es reproduzieren
Öffnen Sie auf einem Rechner, auf dem das Windows Performance Toolkit installiert ist, im WPR-Fenster „More Options“. Zu den eingebauten Profilen gehören „Audio glitches“ und „CPU usage“. Wählen Sie, ausgehend vom ersten, eine Aufzeichnung, mit der sich Audiounterbrechungen zusammen mit CPU-Aktivität untersuchen lassen. Prüfen Sie die verfügbaren Profile und ihre Anzeigenamen in der von Ihnen installierten Version.9
Starten Sie die Aufzeichnung und geben Sie dann Audio unter den zuvor gefundenen Bedingungen wieder. Notieren Sie die Zeiten der Aussetzer und was Sie taten, und beenden Sie die Aufzeichnung nach dem Reproduzieren des Symptoms mit „Save“, um die ETL-Datei zu schreiben. „Cancel“ speichert sie nicht. Etwas von einem sauberen Abschnitt einzuschließen gibt Ihnen einen Vergleichsmaßstab. Werden Sie aufgefordert, eine bestehende Aufzeichnung zu beenden, brechen Sie den Start ab und klären Sie es mit der zuständigen Person, damit keine andere Untersuchung unterbrochen wird.10
flowchart TB
accTitle: Eine kurze Aufzeichnung machen, die den Aussetzer enthält
accDescr: Eine Aufzeichnung in WPR starten, das Symptom reproduzieren und die Zeit notieren, dann die Aufzeichnung beenden und speichern und sie in WPA untersuchen.
A["Aufzeichnung in WPR starten"] --> B["Den Aussetzer unter denselben Bedingungen reproduzieren"]
B --> C["Zeit und Handlungen notieren, dann speichern"]
C --> D["In WPA in den umgebenden Zeitraum hineinzoomen"]
Abbildung 7: Bewahren Sie den Zeitraum, in dem das Symptom auftrat, nicht die CPU-Auslastung danach.
Eine ETL-Datei kann Prozessnamen, Dateipfade und Ähnliches enthalten, halten Sie sich also an die Regeln Ihrer Organisation und geben Sie sie nur an die Personen weiter, die sie brauchen. Das Aufzeichnen kann Rechte oder zusätzliche Werkzeuge erfordern; fragen Sie auf einem Firmen-PC die Administration. Da die Last des Aufzeichnens selbst das Symptom verändern kann, halten Sie fest, ob eine Aufzeichnung lief. Ziehen Sie eine kurze, auf Ihr Ziel abgestimmte Aufzeichnung einer langen mit allen aktivierten Anbietern vor. Halten Sie in einer Aufzeichnung, die verlorene Ereignisse meldet, die nicht sichtbaren Abschnitte nicht für unauffällig.10
Was gleichzeitig geschah, statt einer Rangfolge großer Zahlen
Zoomen Sie in WPA in den Bereich um den Aussetzer, anhand der erfassten Audioereignisse und der notierten Zeiten. Prüfen Sie über denselben Zeitbereich DPC/ISR sowie CPU Usage (Precise), das Thread-Ausführung und Wartezeiten zeigt. Fehlen diese Daten, prüfen Sie, ob das Profil die benötigten Ereignisse erfasst, und zeichnen Sie erneut auf. Ein Fehlen von Aufzeichnungen ist nicht dasselbe wie ein Fehlen eines Problems.49
Ausgangspunkt ist zu sehen, ob der audiobezogene Thread lauffähig war, aber auf seine Reihe wartete, oder nicht laufen konnte, weil er auf Daten oder Ähnliches wartete. Suchen Sie im ersten Fall nach DPCs, ISRs und Ähnlichem, die auf dieser CPU lange liefen. Verfolgen Sie im zweiten mit den verfügbaren Aufzeichnungen und Stacks, was das Warten beendete. Da auch ein laufender Thread unterbrochen werden kann, engen Sie nicht allein auf die Ready-Zeit ein; legen Sie die Abschnitte darüber, in denen DPCs und ISRs liefen.4
flowchart TB
accTitle: Untersuchen, wie während des Aussetzerzeitraums gewartet wurde
accDescr: Für den Audiothread im betrachteten Zeitraum das Warten in lauffähigem Zustand vom Warten auf Daten oder Ähnliches trennen und die entsprechenden Aufzeichnungen abgleichen.
A["Derselbe Zeitraum um den Aussetzer"] --> B["Lauffähig, aber auf die Reihe wartend"]
A --> C["Auf Daten oder Ähnliches wartend"]
B --> D["Arbeit auf derselben CPU abgleichen"]
C --> E["Verfolgen, was das Warten beendete"]
Abbildung 8: Greifen Sie nicht allein die Höchstwerte heraus; lesen Sie sie überlagert mit dem Zeitraum, in dem die Audioverarbeitung gebraucht wurde.
Selbst wenn Sie einen langen DPC oder eine lange ISR finden, entscheiden Sie nicht nach dem Modulnamen sofort: „Dieser Treiber ist der Schuldige.“ Sie sehen womöglich einen großen Wert aus einer anderen Zeit oder eine gemeinsam genutzte Komponente, durch die mehrere Geräte laufen. Verbinden Sie die zeitliche Entsprechung zum Aussetzer, die beteiligten CPUs und die Ergebnisse geänderter Bedingungen und bitten Sie bei Bedarf den Gerätehersteller um Untersuchung.
Ebenso wenig lässt sich eine allgemeingültige Grenze ziehen wie „ein DPC unter so und so vielen Mikrosekunden verursacht auf keinem PC je einen Aussetzer“. Die Warnschwellen in der Dokumentation stehen unter der Bedingung dieser Bewertung. Verwenden Sie sie nicht als Bestanden-/Durchgefallen-Test losgelöst von der tatsächlichen Nachfüllfrist und dem Pufferspielraum.5
7. Für Entwickler: Bringen Sie keine langen Wartezeiten in den Code, der Audio übergibt
Wenn Sie selbst eine Audioanwendung bauen, ist der Ausgangspunkt derselbe. Der Code, der den nächsten Puffer füllt, muss jede Frist einhalten.
WASAPI bietet eine Möglichkeit, den Zeitpunkt, zu dem ein Puffer verarbeitet werden kann, als Ereignis zu empfangen. MMCSS wiederum erleichtert es, Threads mit zeitgebundener Multimedia-Arbeit CPU-Zeit zuzuteilen. Keines von beiden ist jedoch Magie, die Wartezeiten beseitigt. MMCSS bereitet Ihnen auch die Audiodaten von der Festplatte nicht im Voraus auf.111
Der Entwurf dafür besteht darin, den Code, der aus Dateien oder dem Netzwerk liest, vom Code zu trennen, der Audio übergibt. Erledigen Sie die Arbeit, deren Zeitverhalten schwer vorherzusagen ist, im Voraus, und verwenden Sie für die Übergabe einen vorab reservierten Puffer. Gestalten Sie es auf der Audioseite so, dass nicht auf eine UI-Antwort, eine lange Sperre, einen synchronen Log-Schreibvorgang oder Ähnliches gewartet werden muss. Das ist eine Entwurfsrichtlinie, um Datenwartezeiten von der Frist zu entkoppeln.
flowchart TB
accTitle: Schwer vorhersagbare Vorbereitung von der Audiolieferung trennen
accDescr: Ein Entwurf, der Lesevorgänge und ähnliche Arbeit im Voraus erledigt und die aufbereiteten Daten über einen Puffer an die Audioverarbeitung übergibt, wodurch lange Wartezeiten kurz vor der Frist verringert werden.
A["Daten in vorab erledigter Arbeit vorbereiten"] --> B["Vorab reservierter Übergabebereich"]
B --> C["Der Audioverarbeitung übergeben, was sie braucht"]
C --> D["Das Audioausgabeziel beliefern"]
Abbildung 9: Es geht nicht darum, langsame Arbeit zu beseitigen, sondern sie aus dem Augenblick kurz vor der Audioübergabe herauszunehmen.
Auch mit dieser Trennung geht der Vorrat aus, wenn die Vorbereitungsseite lange stockt. Halten Sie über die durchschnittliche Verarbeitungszeit hinaus die Gelegenheiten, bei denen Verarbeitung oder Warten lange dauerte, und die Anzahl fehlgeschlagener Lieferungen so fest, dass die Audioverarbeitung nicht gestört wird. Prüfen Sie die tatsächlich gewählte Puffergröße und Periode über die API oder den Treiber und gehen Sie nicht davon aus, dass „der von mir angegebene Wert unverändert übernommen wurde“.32
Vermeiden Sie es, Anwendern zu empfehlen, den gesamten Player auf Echtzeitpriorität zu setzen. Das birgt die Gefahr, andere wichtige Arbeit zu behindern, und die Priorität eines gewöhnlichen Threads anzuheben löst weder DPCs und ISRs noch Datenwartezeiten.124
8. Zusammenfassung: Niedrige CPU-Auslastung ist kein Beleg dafür, dass die Audiofrist eingehalten wurde
Es gibt drei Achsen, um über Aussetzer nachzudenken: Audio vorhalten, es nachfüllen, bevor es aufgebraucht ist, und ein verspätetes Nachfüllen bedeutet eine Lücke. Selbst bei niedriger CPU-Auslastung kann ein Warten im entscheidenden Augenblick das Nachfüllen verspäten.
Beginnen Sie damit, Anwendungen und Ausgaben mit derselben Quelle zu vergleichen, und zeichnen Sie den Zeitraum des Aussetzers auf, wenn das noch nichts erklärt. Der Übergang von „warum, wo die CPU doch Spielraum hat“ zu „worauf wartete sie in diesem Augenblick“ bringt das Nächste in den Blick, das zu untersuchen ist.
Verwandte Artikel
- Windows-Prozessorzeitplanung und Hintergrunddienste
- Einen Windows-Datenträger bei 100 % sicher eingrenzen
- Warum ist RDP über eine schnelle Verbindung träge?
Referenzlinks
-
Microsoft Learn, Exclusive-Mode Streams. Der Zeitpunkt der Pufferbelieferung und Audiostörungen, die Abwägung gegen Latenz und ereignisgesteuerte Belieferung. Es ist keine pauschale Empfehlung des exklusiven Modus selbst. ↩ ↩2 ↩3 ↩4
-
Microsoft Learn, Low Latency Audio. Der Windows-Audiopfad, Puffer, Geräte, Effektverarbeitung und Latenz sowie die Abwägungen niedriger Latenz. ↩ ↩2 ↩3 ↩4
-
Microsoft Learn, Rendering a Stream. Die Belieferung des Render-Puffers, die verbliebene Menge, die tatsächliche Puffergröße und die Definition eines PCM-Frames. ↩ ↩2 ↩3
-
Microsoft Learn, CPU Analysis. Logische CPUs, die Zustände Ready und Waiting von Threads, das Verhältnis zwischen DPCs, ISRs und Thread-Ausführung sowie die CPU-Analyse in WPA. ↩ ↩2 ↩3 ↩4 ↩5 ↩6
-
Microsoft Learn, Results for the Streaming Media Performance Assessment. Lange und häufige DPCs und ISRs, eine unzureichende Datenlieferung und Audiostörungen. Die Warnschwellen der Bewertung werden nicht zu einem Sicherheitsmaßstab für jedes Gerät verallgemeinert. ↩ ↩2 ↩3
-
Microsoft Learn, Introduction to DPCs. Der Mechanismus, die Interruptbehandlung kurz zu halten und die restliche Arbeit auf einen DPC aufzuschieben. ↩
-
Microsoft Support, Fix distorted or crackling audio in Windows. Die Prüfung von Soundverbesserungen, Format, Treibern und mehr. ↩ ↩2
-
Microsoft Learn, Windows Performance Recorder. ETW-Aufzeichnung und Analyse mit WPA sowie die Nutzung des Windows Performance Toolkit. ↩
-
Microsoft Learn, Built-in Recording Profiles. „More Options“ in WPR und eingebaute Profile wie „Audio glitches“ und „CPU usage“. ↩ ↩2
-
Microsoft Learn, WPR How-to Topics. Eine Aufzeichnung starten und mit „Save“ speichern, Konflikte mit einer bestehenden Sitzung sowie Hinweise zu personenbezogenen Daten und verlorenen Ereignissen. ↩ ↩2
-
Microsoft Learn, Multimedia Class Scheduler Service. Die Zuteilung von CPU-Ressourcen an zeitgebundene Multimedia-Verarbeitung. ↩
-
Microsoft Learn, Scheduling Priorities. Prozess- und Threadprioritäten sowie Hinweise zur Echtzeitpriorität. ↩
Verwandte Artikel
Aktuelle Artikel mit denselben Schlagwörtern führen zu verwandten Themen weiter.
Warum ist RDP über eine schnelle Verbindung träge? — Eingabe, Bildaufbau und Netzwerk getrennt betrachtet
Der Speedtest ist schnell, trotzdem hinken Eingabe und Bildlauf im Remotedesktop hinterher. Erklärt von Roundtrips und Grafikübertragung ...
Ist „Hardware sicher entfernen“ bei USB-Sticks heute noch nötig? — Vom schnellen Entfernen und vom Schreibcache her gedacht
Dürfen Sie den USB-Stick abziehen, sobald das Kopieren fertig ist? Schreibcache, Schnelles Entfernen gegenüber Bessere Leistung, wie Sie ...
Warum dauert „Noch 1 Sekunde“ so lange? — Wie Fortschrittsbalken und Zeitschätzungen funktionieren
Warum eine Aufgabe bei einer Sekunde stehen bleibt, bei 99 % hängt oder ewig vorbereitet. Fortschrittseinheiten, Geschwindigkeitsschätzun...
Warum eine Windows-Dateifreigabe mal funktioniert und mal nicht — Kerberos, NTLM und Anmeldeinformationen eingrenzen
Sporadische Zugriffsprobleme bei Windows-Dateifreigaben anhand von Symptomen und Protokollen eingrenzen. Name gegenüber IP-Adresse, Fehle...
Gleiche 1 GB, und trotzdem kopiert ein Fotoordner langsamer als ein einzelnes Video — warum?
Warum Windows bei gleicher Datenmenge unterschiedlich lange zum Kopieren braucht: Dateianzahl, Wartezeiten von SSD und NAS, Bündeln in ZI...
Verwandte Themen
Diese Seiten ordnen den Artikel in einen größeren Leistungs- und Entscheidungskontext ein.
Technische Windows-Themen
Portal zu Windows-Entwicklung, Fehleranalyse und der Nutzung bestehender Assets.
Leistungen zu diesem Thema
Dieser Artikel ist direkt mit den folgenden Leistungen verbunden.
Windows-App-Entwicklung
Geschäftsanwendungen, Geräteintegration und Kommunikationstools von den Anforderungen bis zur Umsetzung.
Häufige Fragen
Fragen, die in Beratungen zu diesem Artikelthema häufig gestellt werden.
- Warum setzt der Ton aus, wenn die CPU-Auslastung nur bei etwa 10 % liegt?
- Audio hat eine Frist: Die nächsten Daten müssen nachgefüllt sein, bevor die gerade wiedergegebenen aufgebraucht sind. Selbst bei insgesamt niedriger CPU-Auslastung kann das Nachfüllen diese Frist verfehlen, wenn die Audioverarbeitung in diesem Augenblick nicht laufen konnte oder auf die benötigten Daten wartete. Nicht jeder Aussetzer hat diese Ursache, deshalb brauchen Sie auch Vergleiche, die Ausgabegerät und Anwendung wechseln.
- Behebt ein größerer Audiopuffer die Aussetzer?
- Ist das Nachfüllen vorübergehend verspätet, kann ein größerer Puffer das auffangen. Aber auch die Wartezeit, bis das vorgehaltene Audio wiedergegeben wird, wächst. Es ist keine Einstellung, die einen dauerhaften Mangel an Verarbeitungskapazität oder ein sich trennendes Gerät löst. Notieren Sie in Anwendungen und Treibern, wo sich das ändern lässt, den Ausgangswert und vergleichen Sie schrittweise.
- Wie viele Millisekunden Audio sind 480 Frames bei 48 kHz?
- Es sind 480 geteilt durch 48000 Sekunden, also 10 Millisekunden. Ein PCM-Frame ist die Einheit, die die Abtastwerte aller Kanäle zum selben Zeitpunkt zusammenfasst. Dieser Wert ist die Länge des Audios, die diese Frame-Anzahl darstellt, nicht die Gesamtlatenz einschließlich Gerät und Anwendung.
- Ist ein Treiber mit langen DPC- oder ISR-Ausführungszeiten der Schuldige hinter einem Aussetzer?
- Er ist ein Kandidat, aber eine Rangfolge allein nach Ausführungszeit entscheidet das nicht. Gleichen Sie den Zeitraum des Aussetzers mit den Wartezeiten des Audiothreads und mit der DPC-/ISR-Ausführung auf derselben CPU ab. Schließen Sie nicht allein aus einem Modulnamen, dass ein bestimmtes Gerät oder ein Treiber defekt ist, und prüfen Sie auch die Ergebnisse geänderter Reproduktionsbedingungen.
- Verbessert es die Lage, den Player auf Echtzeitpriorität zu setzen?
- Nicht als pauschale Empfehlung. Die Priorität eines gewöhnlichen Threads anzuheben kann gewöhnliche DPCs und ISRs auf derselben CPU nicht überholen, und es beseitigt keine Wartezeiten auf Daten oder Sperren. Entwickler sollten Mechanismen wie MMCSS zusammen mit einem Entwurf einsetzen, der keine Wartezeiten in den Audiopfad bringt, während Anwender zuerst Reproduktionsbedingungen und Ausgabepfade vergleichen sollten.
Autorenprofil
Profilseite des Artikelautors.
Go Komura
Geschäftsführer von KomuraSoft LLC
Spezialisiert auf Windows-Softwareentwicklung, technische Beratung und Fehleranalyse, insbesondere bei bestehenden Systemen und schwer reproduzierbaren Störungen.