Aus gegebenem Anlass hole ich heute einen Artikel nach vorn, der zwar nur knapp ein Jahr alt ist, aber nichtsdestotrotz aktuell wie damals. Mir ist das Interrupt-Problem schon mehrmals aufgefallen, sei es ein komisches Kratzen am SPDIF nach exzessivem Gaming oder aber Schwankungen der GPU-Performance. Deshalb ist ein Check der MSI-Settings auch nach jedem Grafikkartentreiber-Update (bei NVIDIA eigentlich fast immer) und vor jedem Benchmark-Run quasi obligatorisch. Leider wissen das die Wenigsten und beachten diese Umstände auch dementsprechend nicht mit Priorität. Und genau da landen wir wieder beim Artikel vom letzten Jahr…
Denn wenn die Soundkarte aussetzt oder knackt, USB-Geräte nicht oder nur sporadisch funktionieren oder die Performance der Grafikkarte einbricht, dann sind meist Interrupt-Konflikte die Ursache. Das ist etwas, das man als Windows-User aus purer Bequemlichkeit natürlich schon längst ausgeblendet hat. Dabei ist das Problem so alt wie die PCs und es hat sich mittlerweile nur unter die bunte Betriebssystemoberfläche verlagert. Solange alles wie angedacht funktioniert, wird man davon auch nichts mitbekommen, aber wehe, es läuft mal was schief. Dann ist guter Rat teuer und man sucht krampfhaft nach Lösungen.
Mein Dank geht in diesem Zusammenhang an unser Community-Mitglied FcryCola, der mich auf seine Lösung und den passenden Beiträge auf Reddit aufmerksam gemacht und auch ordentlich Vorarbeit geleistet hat. Seine Soundkarte tut es nun wieder, ich habe einen Artikel mehr in meiner Praxis-Sammlung und Ihr könnt natürlich von beidem profitieren. Die Lösung liegt eigentlich näher als man denkt und doch so fern. Das liegt allerdings auch daran, dass Windows vorgibt, alles elegant allein lösen zu können. Nur manchmal müsst Ihr dann doch noch selbst ran. Die nötigen Handwerkszeuge und das nötige Grundlagenwissen gibt es heute gratis dazu.
Interrupt ist nicht gleich Interrupt
Keine Angst, ich werde Euch jetzt nicht mit langweiliger Theorie erschlagen, aber ein paar kleine, heruntergebrochene Puzzlesteinchen solltet Ihr Euch dann doch merken. Deshalb fragen wir uns zunächst, was so ein Interrupt (IRQ) ist und wozu man ihn braucht. Grob gesprochen, ist so ein Interrupt eine kurzfristige Unterbrechung der normalen Programmausführung, um einen kurzen und zeitkritischen Vorgang abzuarbeiten (Unterbrechungsanforderung). Das Ganze funktioniert meist asynchron und kann im schlimmsten Fall auch den gesamten Ablauf nachhaltig, also bemerkbar, stören. Wenn ein Gerät bedient werden möchte, kann es so eine Unterbrechungs-Anforderung jederzeit auslösen. Nur ist es eben so, wie im wahren Leben: Wenn alle durcheinanderquatschen, gewinnt meist der, der als Erster oder am lautesten schreit, während andere einfach im Geschrei untergehen oder sich hinten anstellen müssen. Ordnung muss also sein, aber wie?
Gemeinsam genutzte Interrupts sind jetzt ja nichts anderes als das gerade erwähnte Durcheinanderschreien. Daraus resultieren im schlimmsten Fall echte Aussetzer, eine verringerte Stabilität oder zumindest hohe Interrupt-Latenzzeiten, die such sehr negativ auf die Systemperformance auswirken können. Als Ursache kann man die begrenzten Anzahl von physischen Interrupt-Leitungen auf einem Computer ausmachen, wo sich viele Geräte in eine gemeinsam genutzte IRQ-Leitung reinteilen müssen. Sicher wäre es schon, wenn wenn jedes Gerät (wie früher) seinen eigenen Interrupt hätte und es immer eindeutig wäre, von welchem Gerät sie stammen.
Eine Lösung für all diese Probleme ist ein neuer Interrupt-Mechanismus. Geräte für Anschlüsse und Busse vor PCI 2.2 erzeugen 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. Ab PCI 2.2 können (und sollten!) PCI-Geräte jedoch auch nachrichtlich signalisierte Interrupts erzeugen. Hierbei handelt es sich um die so genannten Message-Signaled Interrupts (MSI). Ein Gerät erzeugt einen nachrichtlich signalisierten Interrupt, indem es einen Datenwert an eine bestimmte Adresse schreibt. Aktuelle Windows-Versionen unterstützen LBI und MSI gelichermaßen, was natürlich zur Problemen führen kann.
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 (so dass die Gesamtsystemgrenze für MSIs der Anzahl der Unterbrechungsvektoren, nicht der IRQ-Leitungen, entspricht), ebenso wie der Bedarf an einer Treiber-ISR zur Abfrage des Geräts nach Daten im Zusammenhang mit der Unterbrechung, was die Latenzzeit verringert. Allerdings gab es auch hier aufgrund der hohen Informationsfülle wieder Flaschenhälse, so dass mit PCIe 3.0 dann MSI-X eingeführt wurde. Dies bietet Unterstützung für 32-Bit-Nachrichten (statt 16-Bit), maximal 2048 verschiedene Nachrichten (statt nur 32) und, was noch wichtiger ist, die Möglichkeit, für jede der MSI-Nutzdaten eine andere Adresse zu verwenden (die dynamisch bestimmt werden kann), was die Interrupt Zustellung verbessert.
Doch genug der Theorie, das war sicher für die meisten schon viel zu viel. Aber wir merken und bitte einmal, dass LBI und MSI miteinander konkurrieren und nicht gemischt auf eine gemeinsame Leitung (PCI-Bus) gehören. Das sind zwar Binsenweisheiten, aber wer überprüft das schon? Und genau jetzt kommt auch wieder unser User FcryCola ins Spiel, der sich nach meinem Test die EVGA nuAudio Soundkarte gekauft hatte und plötzlich vor einem scheinbar unlösbaren Problem stand, weil die erhöhte Grafikkartenlast zu fiesen Soundaussetzern führte.
MSI-Tool
Die zum Anzeigen der Interrupt-Modi benötigte Software habe ich einmal sicherheitshalber auf unserem Server gehostet, denn bei File-Hostern weiß man immer nie, wie lange solche Links dann wirklich funktionieren. Das in der ZIP-Datei enthaltene kleine Programm benötigt keine extra Installation, muss aber explizit als Administrator ausgeführt werden. Aber das mit dem Rechtsklick und „Als Administrator ausführen“ aus dem Popup-Menü kennt Ihr ja sicher schon.
Latency Monitor
Diesen Download habe ich auf die Hersteller-Seite verlinkt, wo Ihr auch weiterführende Informationen findet.
154 Antworten
Kommentar
Lade neue Kommentare
Urgestein
Veteran
Veteran
Veteran
Mitglied
Veteran
Urgestein
1
Mitglied
Veteran
Veteran
Veteran
Mitglied
Veteran
Urgestein
Urgestein
Veteran
Veteran
Alle Kommentare lesen unter igor´sLAB Community →