Veröffentlicht am

Warum Interrupts beim Audio PC den Klang massiv beeinflussen

Wer regelmäßig Musik oder auch Videos streamt kennt das. Es kommt manchmal zu kurzen Aussetzern. Das sind die offensichtlichen Probleme. Komisch wird es, wenn die Musik nicht klingen will. Sich die Bühne einfach nicht öffnet. Eventuell liegen Störungen im Millisekundenbereich vor.

Unser Gehör ist in der Time Domain sehr empfindlich. Es wird angenommen, dass die meisten Menschen Unterschiede in Schallereignissen wahrnehmen können, die zeitlich etwa 2 bis 5 Millisekunden auseinanderliegen. In professionellen Aufnahmestudios und Live-Auftritten wird oft angestrebt, Latenzen von weniger als 10 Millisekunden zu erreichen. Einige Musiker bevorzugen sogar Latenzen im Bereich von maximal 5 Millisekunden, um eine bestmögliche Interaktion zu gewährleisten. Je geringer die Latenz ist, desto besser können Musiker auf subtile Nuancen in der Musik reagieren und ihre Performance anpassen. Zum Vergleich: 1 Sekunde sind 1.000 Millisekunden!

Uns interessieren zwar nicht die Latenzen bei der Musikproduktion, sondern die Latenzen auf der Maschinen- und Softwareebene. Siehe auch unsere Grundlagen:  Audio PC Latenzen. Aber es ist wichtig zu wissen, dass unser Gehör nicht nur auf die offensichtlichen groben Störungen reagiert, sondern auch im nicht bewusst wahrnehmbaren Millisekundenbereich. Fehler darin beeinträchtigen die Ortung von Schallereignissen.

Was sind Interrupts?

Lassen wir ChatGPT sprechen:

Ein Interrupt tritt auf, wenn ein externes Ereignis auftritt, das die normale Ausführung eines Programms unterbrechen soll. Dieses Ereignis kann beispielsweise das Drücken einer Taste auf der Tastatur, das Eintreffen einer Netzwerknachricht oder das Ablaufen eines Timers sein. Durch den Interrupt wird das Betriebssystem oder der Prozessor auf das Ereignis aufmerksam gemacht und kann entsprechende Maßnahmen ergreifen.

Sobald ein Interrupt ausgelöst wird, stoppt der Prozessor seine aktuelle Aufgabe und springt zu einem speziellen Interrupt-Handler, der das Ereignis behandelt. Der Interrupt-Handler führt den erforderlichen Code aus, um auf das Ereignis zu reagieren. Dies kann beispielsweise das Lesen von Daten von einem Eingabegerät, das Aktualisieren von Informationen im Arbeitsspeicher oder das Starten eines bestimmten Programms sein.

Nachdem der Interrupt-Handler abgeschlossen ist, kehrt der Prozessor zur vorherigen Aufgabe zurück und setzt seine normale Ausführung fort. Interrupts ermöglichen es dem Computer, auf Echtzeitereignisse zu reagieren, ohne dass dafür kontinuierlich nach Ereignissen gesucht werden muss.

ChatGPT

Leider neigen Betriebssysteme wie Windows dazu, alle möglichen Interrupts zuzulassen. Die Musikwiedergabe kann beeinträchtigt werden, weil zum Beispiel die internetfähige Waschmaschine meldet, dass die Wäsche fertig ist. Schuld daran ist Broadcast. Das ist in einem Rechnernetz eine Nachricht, bei der Datenpakete von einem Punkt aus an alle Teilnehmer eines Nachrichtennetzes übertragen werden. Siehe Audio PC Netzwerk.

Damit die Unterbrechungen funktionieren, gibt es zwei Mechanismen:

Leitungsbasierte Interrupts (LBI)

Ein Gerät erzeugt die Unterbrechung, indem es ein elektrisches Signal an einen speziellen Pin sendet, der als Unterbrechungsleitung bekannt ist. Alle Windows-Versionen vor Windows Vista unterstützen nur leitungsbasierte Interrupts

Message-Signaled Interrupts (MSI & MSI-X)

Ein Gerät erzeugt einen nachrichtlich signalisierten Interrupt, indem es einen Datenwert an eine bestimmte Adresse schreibt.  Da beim MSI die Kommunikation nur auf einem Speicherwert basiert und der Inhalt mit der Unterbrechung geliefert wird, entfällt der Bedarf an IRQ-Leitungen. Ebenso entfällt der Bedarf an einer Treiber-ISR zur Abfrage des Geräts nach Daten im Zusammenhang mit der Unterbrechung. Das verringert die Latenz. Mit PCIe 3.0  wurde MSI-X eingeführt. Dies bietet Unterstützung für 32-Bit-Nachrichten (statt 16-Bit), maximal 2048 verschiedene Nachrichten (statt nur 32) und die Möglichkeit, für jede der MSI-Nutzdaten eine andere Adresse zu verwenden (die dynamisch bestimmt werden kann). Das verbessert die Interrupt Zustellung.

Aktuelle Windows-Versionen unterstützen LBI und MSI gleichermaßen. Darin liegt auch ein Problem. Dazu später mehr.

LatencyMon

Latenz bedeutet zeitliche Verzögerung, wobei die Latenz eine feste Zeit zwischen zwei Ereignissen definiert. Ein Interrupt kann eine unaktzeptable und hörbare Latenz auslösen. Zum Beispiel durch fehlerhafte Treiber verursacht. Für Windows gibt es dazu ein sehr gutes kostenloses Analyse-Tool: LatencyMon. Siehe auch Latenzen im Audio PC selbst messen.

Windows ist kein Echtzeitbetriebssystem. Es gibt keinerlei Garantien, dass Requests innerhalb eines bestimmten Zeitrahmens zugestellt werden, was die Merkmale eines Echtzeitbetriebssystems sind. LatencyMon analysiert die möglichen Ursachen von Problemen durch Messung der Kernel-Timer-Latenzen und Meldung von DPC- und ISR-Ausführungszeiten, sowie harten Seitenfehlern. 

Als Maßeinheiten dienen: 1 s (Sekunde) entspricht 1000 ms (Millisekunden) entspricht 1.000.000 µs (Mikrosekunden)

Process Latency (µs)

Der laufende Prozess mit der höchsten Latenz und insgesamt die am höchsten gemessene Prozesslatenz geben auf einen Blick einen guten Aufschluss, ob Echtzeit-Audio möglich ist. Dies wird auch im Text angezeigt. Eine im Bild angezeigte aktuelle Prozesslatenz von 22,10 µs ist sehr niedrig und auch die höchste gemessene Prozesslatenz von 102,10 µs ist völlig unkritisch.

Im Artikelbild ganz oben ist ein Negativbeispiel mit einer „Highest measured interrupt to process latency (Hs) :“ von 28.994,60 µs. Hier hilft in der Regel ein Blick in den Reiter „Drivers“ um zu sehen, welcher Treiber für das Problem verantwortlich ist. Oft hilft es den Treiber zu aktualisieren.

Interrupt-Service-Routinen (ISRs) 

ISRs sind spezielle Codeabschnitte in einem Computerprogramm, die aufgerufen werden, wenn ein Interrupt ausgelöst wird. Sie reaigieren auf Interrupts von Peripheriegeräten wie Tastaturen, Mäusen, Netzwerkschnittstellen und anderen Hardwarekomponenten. Da im fis Audio PC so etwas nicht angeschlossen ist, erfolgt im Bild eine Leeranzeige.

Deferred Procedure Call (DPC)

DPCs werden verwendet, um Aufgaben zu behandeln, die nicht unmittelbar ausgeführt werden müssen, aber dennoch eine hohe Priorität haben. Dies können beispielsweise Aufgaben sein, die mit Gerätetreibern, Hardwareereignissen oder anderen Echtzeitereignissen zusammenhängen. DPCs können auch für asynchrone Operationen verwendet werden, bei denen eine bestimmte Aktion in Reaktion auf ein Ereignis ausgeführt werden soll.

Wenn ein DPC ausgelöst wird, unterbricht das Betriebssystem die aktuell ausgeführte Aufgabe und führt den DPC-Code aus. Dieser Code wird normalerweise in Form einer Funktion oder eines Codeblocks definiert. Der Hauptunterschied zwischen einem DPC und einer Interrupt-Service-Routine (ISR) besteht darin, dass DPCs in der Regel auf einer niedrigeren Prioritätsebene ausgeführt werden als ISRs.

Im Bild oben ist der Netzwerktreiber mit unkritischen 91,62 µs zu sehen.

Harter Seitenfehler (total hard pagefault)

Windows verwendet ein Konzept des virtuellen Speichers, das sich auf das von der CPU bereitgestellte Seitenübersetzungssystem stützt. Wenn eine Speicheradresse angefordert wird, die im physikalischen Speicher (nicht resident) nicht verfügbar ist, wird ein „INT 14“ auftreten. Wenn die Seite, auf der sich die Adresse befindet, Windows bekannt, aber nicht resident ist, liest Windows die benötigte Seite aus der Auslagerungsdatei. Dies wird als harter Seitenfehler bezeichnet und kann viel Zeit in Anspruch nehmen. 

Lösungsmöglichkeiten

Wir haben uns die Funktion der Interrupts angesehen und sind auf zwei unterschiedliche Interrupttypen unter Windows gestoßen. Unter Windows haben wir ein Problem beim virtuellen Speicher erkannt. Hier besprechen wir die Lösungsmöglichkeiten.

MSI-Tool

Der Anlass dieses Artikels kommt aus der Gaming Szene, die aufgrund von Interruptproblemen Probleme beim Spielen hatten. Siehe: „Unerklärliche“ Interrupt-Probleme lösen: Message-Signaled Interrupts (MSI) gegen Soundaussetzer, USB-Probleme & Co. | Praxis | igor´sLAB (igorslab.de)

Für die Anzeige und Administration der Interrupt-Modi steht das kostenlose MSI-Tool zur Verfügung. Das in der ZIP-Datei enthaltene Programm benötigt keine Installation, muss aber als Administrator ausgeführt werden. 

In der Spalte „supportet modes“ ist zu sehen, dass für alle Geräte Leitungsbasierte Interrupts (LBI) und Message-Signaled Interrupts (MSI, MSI-X) unterstützt werden. Damit es keine Konflikte gibt, sollen alle Geräte nur noch MSI / MSI-X verwenden. Entsprechend ist das jeweilige Häkchen zu setzen. So wird verhindert, dass ein leitungsbasierter Interrupt sich mit einem signalbasierten Interrupt überschneidet. Außerdem werden mit MSI die Latenzen verringert.

Interessant ist auch die Spalte „interrupt priority“. Hier habe ich vorsichtshalber die Netzwerkkarten von Solarflare auf „High“ gesetzt. Die Festplatten stehen ebenfalls auf hohe Priorität.

Auslagerungsdatei

Windows 10 und Windows 11 lagern selten benutzte Bereiche des Hauptspeichers in die Auslagerungsdatei pagefile.sys aus und schaffen mit diesem virtuellen Arbeitsspeicher Platz für Systemkomponenten und aktive Prozesse. Das kann bei harten Seitenfehlern ein Problem sein, weil eine SSD immer langsamer sein wird als der schnelle Arbeitsspeicher (RAM). Wenn der Arbeitsspeicher groß genug ist, soll die Auslagerungsdatei deaktiviert werden. Das machst du mit hauseigenen Windows-Tools.

Gib in der Windows-Suche „Erweiterte Systemeinstellungen anzeigen“ ein. Es öffnet sich ein Fenster „Systemeigenschaften“ (links). Hier klickst du auf „Einstellungen“. Im neuen Fenster „Leistungsoptionen“ (mittig) klickst du auf den Reiter „Erweitert“ und dann bei „Virtueller Arbeitsspeicher“ auf „Ändern“. Im Fenster „Virtueller Arbeitsspeicher“ (rechts) klickst du auf „Keine Auslagerungsdatei“ und „Festlegen“. Anschließend muss der Rechner neu gestartet werden.

Betriebssystem

Wie schon beschrieben ist Windows kein Echtzeitbetriebssystem. Hier kommt wieder meine Empfehlung ins Spiel:

Mit diesem HQPlayer OS wird ein Linux Echtzeitkernel ausgeführt und die oben geschilderten Probleme gibt es nicht.

Zusammenfassung

Interrupts sind Unterbrechungen im Computersystem, damit zeitnah auf Ereignisse reagiert werden kann. Stell dir vor du willst mit der Maus etwas anklicken und der Computer reagiert nicht. Damit das nicht passiert gibt es die hochpriorisierten Interrupt-Service-Routinen (ISRs). Das ist also grundsätzlich eine nützliche Sache. Wollen wir so eine Unterbrechung beim Musik hören? Sicher nicht! Auch wenn es nicht zu offensichtlichen Drop Outs kommt, können im Millisekundenbereich störende Artefakte entstehen, allen Puffern zum Trotz. Die meisten Menschen können bereits Latenzen zwischen 2-5 ms erkennen.

Schließe im Audio PC während des Musik Hörens also keine Peripheriegeräte wie Bildschirme, Maus und Tastatur an. Prüfe mit dem kostenlosen Analyse-Tool: LatencyMon, ob Echtzeit-Audio grundsätzlich möglich ist.

Nutze das das kostenlose MSI-Tool für die Verwaltung der Interrupts und stelle alle Geräte auf Message-Signaled Interrupts (MSI, MSI-X) ein. So kommen sich leitungsbasierte und signalbasierte Interrupts nicht in die Quere. MSI ist auch besser für geringere Latenzen. Eine Höherpriorisierung wichtiger Geräte, wie zum Beispiel Netzwerkkarten, ist mit dem MSI-Tool auch möglich.

Deaktiviere den virtuellen Arbeitsspeicher unter Windows, da der Arbeitsspeicher (RAM) in der Regel groß genug ist. Wenn du dich mit Windows nicht herumschlagen willst, installiere doch gleich ein Echtzeitbetriebssystem wie zum Beispiel das HQPlayer OS. Beim Kauf eines fis Audio PCs machen wir das auf Wunsch gleich mit.

Du hast Fragen oder möchtest etwas beitragen? Schreibe uns: Kontaktformular
Oder schreibe per E-Mail an: info@griggaudio.de