Freigeben über


WDDM-Unterstützung für Timeout-Erkennung und -Wiederherstellung

In diesem Artikel wird beschrieben, wie das Windows Display Driver Model (WDDM) Timeouterkennung und -wiederherstellung (Timeout Detection and Recovery, TDR) unterstützt. Es bietet eine Übersicht über den TDR-Prozess, erläutert, wie die Timeouterkennung in WDDM funktioniert, und beschreibt die Schritte, die zum Wiederherstellen aus einem Timeout ausgeführt werden.

Die Zielgruppe für diesen Artikel ist Anzeige- und Grafiktreiberentwickler.

Weitere Informationen zu TDR in WDDM finden Sie in den folgenden Artikeln:

Überblick

TDR ist ein Feature in Windows, das erkennt, wann die Grafikkarte länger dauert als erwartet, um einen Vorgang abzuschließen. Anschließend wird die Grafikkarte zurückgesetzt, um zu verhindern, dass das gesamte System nicht mehr reagiert.

Eines der häufigsten Stabilitätsprobleme in Grafiken tritt auf, wenn ein Computer scheinbar "hängen" oder vollständig "fixiert" erscheint, während er tatsächlich einen Endbenutzerbefehl oder -vorgang verarbeitet. Viele Benutzer warten einige Sekunden und entschließen sich dann, den Computer neu zu starten. Das eingefrorene Erscheinungsbild des Computers tritt häufig auf, da die GPU intensive grafische Vorgänge verarbeitet, in der Regel während des Spielspiels und daher nicht den Bildschirm aktualisiert. TDRs ermöglichen dem Betriebssystem zu erkennen, dass die Benutzeroberfläche nicht reaktionsfähig ist.

Die folgende Abbildung zeigt den TDR-Prozess.

Diagramm, das den Timeouterkennungs- und Wiederherstellungsprozess (TDR) von GPUs über WDDM zeigt.

Das Betriebssystem versucht, Situationen zu erkennen, in denen Computer scheinbar "fixiert" sind. Das Betriebssystem versucht dann, sich dynamisch von den eingefrorenen Situationen zu erholen, um die Reaktionsfähigkeit der Desktops wiederherzustellen und die Notwendigkeit zu vermeiden, dass Endbenutzer ihre Systeme unnötig neu starten.

Standardmäßig führt das Betriebssystem einen Bugcheck durch, wenn beim sechsten (oder mehr) GPU-Ausfall erkannt wird, dass fünf (5) oder mehr GPU-Ausfälle (0x117) und nachfolgende Wiederherstellungen innerhalb einer Minute auftreten. Weitere Informationen finden Sie unter TdrLimitCount und TdrLimitTime.

Als Nebennotiz tragen Engine-Timeouts (0x141) nicht zur Anzahl der GPU-Hängesituationen bei, obwohl das Betriebssystem ein Engine-Timeout in ein GPU-Hängen umwandeln kann, wenn das Engine-Timeout nicht erfolgreich ist. Bei Engine-Timeouts (0x141) ist die maximale Zahl um eins niedriger als für Adapter-Timeouts (0x117). Der Prozess zum Zurücksetzen des Moduls blockiert den GPU-Zugriff für den Prozess, der solche Timeouts verursacht, und das System protokolliert 0x142 , um diese Tatsache anzugeben. Auf diese Weise verursacht der Fehlfunktionsprozess keinen Systemabsturz.

Timeouterkennung in WDDM

Der GPU-Scheduler, der Teil des DirectX-Grafik-Kernel-Subsystems (Dxgkrnl.sys) ist, erkennt, wann die GPU mehr Zeit benötigt, um eine bestimmte Aufgabe auszuführen. Der GPU-Scheduler versucht dann, diese spezielle Aufgabe zu unterbrechen. Der Preemption-Vorgang verfügt über ein "Wait"-Timeout, was den tatsächlichen TDR-Timeout darstellt. Der Standardtimeoutzeitraum in Windows beträgt zwei Sekunden. Wenn die GPU den aktuellen Vorgang innerhalb des TDR-Timeout-Zeitraums nicht abschließen oder unterbrechen kann, diagnostiziert das Betriebssystem, dass die GPU eingefroren ist.

Um zu verhindern, dass die Timeouterkennung auftritt, sollten Hardwareanbieter sicherstellen, dass Grafikvorgänge (d. h. DMA-Pufferabschluss) in Endbenutzerszenarien wie Produktivität und Spielwiedergabe nicht mehr als zwei Sekunden dauern.

Vorbereitung für die Wiederherstellung

Der GPU-Scheduler ruft die DxgkDdiResetFromTimeout-Funktion des Anzeigeminiporttreibers auf, um den Treiber darüber zu informieren, dass das Betriebssystem ein Timeout erkannt hat. Der Treiber muss sich dann erneut initialisieren und die GPU zurücksetzen. Darüber hinaus muss der Treiber den Zugriff auf den Arbeitsspeicher beenden und nicht auf Hardware zugreifen. Das Betriebssystem und der Treiber sammeln Hardware- und andere Zustandsinformationen, die für die Diagnose nach der Wiederherstellung nützlich sein können.

Weitere Informationen finden Sie unter TDR in Windows 8 und höher.

Desktopwiederherstellung

Das Betriebssystem setzt den entsprechenden Zustand des Grafikstapels zurück. Der Videospeicher-Manager, der auch Teil von Dxgkrnl.sysist, löscht alle Zuordnungen aus dem Videospeicher. Der Display-Miniporttreiber setzt den GPU-Hardwarezustand zurück. Der Grafikstapel führt die endgültigen Aktionen aus und stellt den Desktop im reaktionsfähigen Zustand wieder her.

Das einzige sichtbare Artefakt von der Hängeerkennung bis zur Wiederherstellung ist ein Bildschirmflimmern. Dieses Flackern führt dazu, dass das Betriebssystem einige Teile des Grafikstapels zurücksetzt, wodurch ein Bildschirm neu gezeichnet wird. Der Miniporttreiber der Anzeige kann dieses Neuzeichnen beseitigen, wenn er WDDM 1.2 und höher erfüllt (siehe Bereitstellen von nahtlosen Zustandsübergängen in WDDM 1.2 und höher).

Wenn das Betriebssystem den Desktop erfolgreich wiederherstellen kann, werden die folgenden Aktionen ausgeführt:

  • Zeigt dem Endbenutzer eine Informationsmeldung an, die lautet: "Der Anzeigetreiber hat nicht mehr reagiert und wurde wiederhergestellt."
  • Protokolliert die vorherige Meldung in der Ereignisanzeigeanwendung und sammelt Diagnoseinformationen in Form eines Debugberichts. Wenn sich der Endbenutzer anmeldet, Feedback zu geben, gibt das Betriebssystem diesen Debugbericht über den OCA-Mechanismus (Online Crash Analysis) an Microsoft zurück.

Einige ältere DirectX-Anwendungen rendern möglicherweise nur schwarz am Ende dieser Wiederherstellung, was erfordert, dass der Endbenutzer diese Anwendungen neu starten muss. Gut geschriebene DirectX 9Ex- und DirectX 10- und höher-Anwendungen, die die Device Remove-Technologie behandeln, funktionieren weiterhin ordnungsgemäß. Eine Anwendung muss das Microsoft Direct3D-Gerät und alle Objekte des Geräts freigeben und dann erneut erstellen.

Threadsynchronisierung und TDR

Details finden Sie unter Threadsynchronisierung und TDR .

Testen und Debuggen von TDR

Weitere Informationen finden Sie unter "Testen und Debuggen von TDR".