Freigeben über


Profilierung von CPU und GPU mit Timing- Erfassungen

Timing-Erfassungen kombinieren sowohl CPU- als auch GPU-Profilerstellungsdaten in einer einzigen Erfassung für eine eingehende Analyse Ihrer Anwendung. Diese Daten werden gesammelt, während das Spiel ausgeführt wird, und mit minimalem Aufwand, sodass Sie Dinge sehen können, z. B. wie Arbeit über CPU-Kerne verteilt wird, die Latenz zwischen Grafikarbeit, die von der CPU übermittelt und von der GPU ausgeführt wird, wenn Datei-E/A-Zugriffe und Speicherzuweisungen auftreten usw. Dazu gehören auch anwendungsdefinierte Ereignisse, Marker und Zähler über PixEvents.

Erfassen einer Anzeigedauer

Starten Sie in der Verbindungsansicht entweder den gewünschten Prozess oder fügen Sie sie an (stellen Sie sicher, dass die relevante Option für die GPU-Erfassung deaktiviert ist).

Konfigurieren Sie die Optionen für die Anzeigedauer bei Bedarf, und klicken Sie bei Bedarf auf die Schaltfläche Erfassung starten, um mit der Aufzeichnung zu beginnen. Klicken Sie auf Erfassung beenden (oder beenden Sie Ihre App), um die Aufzeichnung zu beenden. Nach einem kurzen Verarbeitungszeitraum wird die Erfassung geöffnet.

Optionen für die Anzeigedauererfassung

Name Beschreibung
Aufzeichnungsmodus Sequenziell: Zeichnen Sie die gesamte Anzahl von Ereignissen zwischen dem Starten und Beenden der Erfassung auf.
Zirkel: Aufzeichnen von Ereignissen in einem Puffer mit fester Größe, wobei nur die letzten n-Sekunden der Daten gespeichert werden. Weitere Details finden Sie in diesem Blogbeitrag „Zirkelzeiterfassungen”.
CPU-Beispiele Führen Sie Beispielprofilerstellung durch, um zu sehen, wo CPU Zeit verbringt. Die Samplingrate kann konfiguriert werden.
Aufrufstapel auf Kontextschaltern Sammeln Sie Aufrufstapel, wenn ein Threadkontext wechselt.
Zugriffe auf Dateien Dateizugriffe nachverfolgen.
GPU-Zeiten Sammeln Sie detaillierte Zeitangaben darüber, wann GPU-Arbeit gestartet und beendet wird.
GPU-Ressourcen Erfassen Sie detaillierte Informationen zu D3D-Objekten wie Heaps und Ressourcen. Verfolgen Sie auch GPU-Residency, herabgestufte Zuordnungen und Zuordnungsmigrationen.
VirtualAlloc/VirtualFree-Ereignisse Verfolgt Zuordnungen, die über die Funktionen VirtualAlloc und VirtualFree vorgenommen werden.
HeapAlloc/HeapFree-Ereignisse Verfolgt Zuordnungen, die über die Funktionen HeapAlloc und HeapFree vorgenommen wurden.
Benutzerdefinierte Allocator-Ereignisse Verfolgt Zuordnungen von benutzerdefinierten Speicherverteilern, die mit PixEvents instrumentiert sind.
Seitenfehlerereignisse Sammeln Sie Daten zu Seitenfehlern, die bei laufender Erfassung auftreten. Die Seitenfehler werden auf der Zeitachse und in der Elementdetailseite angezeigt.
Aufruflisten für Nicht-Titel-Prozesse Erfassen Sie Aufruflisten für andere Prozesse als den Titelprozess (der gestartete oder an den Prozess angefügte).
Image-Informationen zum Kernel Sammeln Sie Informationen, die zum Anzeigen von Aufruflisten für Kernel-Binärdateien erforderlich sind.
Generieren der .etl-Datei anstelle der .wpix-Datei Die generierte .etl-Datei kann später in eine .wpix-Datei in der Datei | Menü „Konvertieren” konvertiert werden. Diese Option ist nützlich, wenn Fehler-Repros an das PIX-Team gemeldet werden, oder wenn Sie andere Tools für die Verarbeitung von ETW-Daten haben.

Programmgesteuerte Erfassungen

Mit der WinPixEventRuntime können Sie programmgesteuert eine Erfassung machen. Ausführliche Informationen finden Sie im Blogbeitrag Programmgesteuerte Erfassung.

CPU-Profilerstellung

Wenn Sie die Option CPU-Beispiele aktivieren, können Sie bei der Erfassung langsame Funktionen im heißen Pfad Ihrer Anwendung anheften sowie Probleme im Zusammenhang mit Threadwartevorgängen und Kontextschaltern finden. Sie können auch verschiedene Arten von Zuordnungen nachverfolgen (mit aktivierter Erfassungsoption).

Es gibt mehrere Blogbeiträge, die diese Features im Detail abdecken:

GPU-Profilerstellung

Kommt es bei Ihrer App zu unterbrechungsübergreifenden Frameabbrüchen? Übermäßige VRAM-Nutzung? Unerwartete Auslagerungsvorgänge zwischen Systemspeicher und VRAM? Die GPU-Profilerstellungsfeatures in PIX können Ihnen dabei helfen, diese gängigen und schwierig zu analysierenden Situationen zu bewältigen.

GPU-Zeiten

Aktivieren Sie die GPU-Anzeigedauernoption, wenn Sie eine Erfassung zum Erfassen von Zeitdaten für die GPU-Arbeit ausführen. In der Zeitachsenansicht finden Sie Lanes für jede GPU-Warteschlange (in der Lane Selector können Sie diese Lanes schnell mit der angehefteten Konfiguration der API-Warteschlangen anheften). Diese Lanes enthalten mehrere Unterlanes:

  • PIX-Ereignisse (GPU): Hierarchische, anwendungsdefinierte Regionen der GPU-Arbeit. Siehe PixEvents.
  • GPU-Ausführung: Ausführungen entsprechen Arbeitsübermittlungen auf API-Ebene; Beispiel: über ExecuteCommandLists.
  • GPU-Arbeit: Jede Arbeit, die auf der GPU auftritt; z. B. „Zeichnet”, „Verteiler”, „Kopien”.
  • PIX-Marker (GPU): Anwendungsdefinierte Marker. Siehe PixEvents.

Wenn Sie ein Ereignis in der Lane auswählen, werden Pfeile angezeigt, die zeigen, wo auf der CPU, die das Ereignis stammt. Im Menü „Lane-Optionen” gibt es auch verschiedene Visualisierungsoptionen (das Zahnradsymbol neben dem Lane-Namen). Vor allem sind die Optionen Vereinfachte Ereignisse und Vereinfachte GPU-Arbeit standardmäßig aktiviert, um Platz zu erhalten. Möglicherweise möchten Sie jedoch die vollständige PIX-Ereignishierarchie oder GPU-Arbeitsanalyse sehen, wenn Sie in einen bestimmten Frame eintauchen.

Diese Daten sind auch in tabellarischer Form über die Ansicht Bereichsdetails verfügbar, indem sie die entsprechende Kategorie in der Dropdownliste Elemente anzeigen auswählen.

Anzeigen von ungeblasenen PIX GPU-Ereignissen und GPU-Vorgängen in API-Warteschlangen-Lane mit einem Pfeil, der zeigt, welcher CPU-Thread die GPU-Arbeit übermittelt hat

Präsentations- und Anzeigeinformationen

Vsyncs werden als Markierungen in einer separaten Monitor-Lane angezeigt und Sie finden sie in der Ansicht Bereichsdetails in der Kategorie Sonstige.

GPU-Speicher und Direct3D-Objekte

Aktivieren Sie die GPU-Ressourcenoption beim Erfassen von Informationen zu Direct3D-Objekten. Um die Gesamtspeicherauslastung zu graphieren, finden Sie mehrere Indikatoren in der Metrikansicht . Sie können verschiedene Budgetzeilen konfigurieren, um schnell eine Vorstellung davon zu erhalten, ob Sie Ihre Ziele für die Speicherauslastung erfüllen. Wenn Sie einen Sie interessierenden Bereich gefunden haben, sollten Sie den Zeitraum weiter untersuchen, indem Sie im Kontextmenü auf Timeline-Ansicht zoomen, um Bereich auszuwählen klicken und die Dropdownliste Ausgewählter Zeitraum auf Sichtbaren Bereich auswählen festlegen.

Anzeigen der Speicherauslastung des D3D-API-Objekts in der Metrikansicht

Tipp

Wenn Sie die Linienart auf Quadrat festlegen, können Sie leichter erkennen, wo die Zuordnungen vorgenommen werden.

In der Ansicht Bereichsdetails können Sie verschiedene Informationen zu Direct3D-API-Objekten wie Heaps, Ressourcen und Pipelinestatusobjekten anzeigen. Um das Anheften verdächtiger Objekte zu vereinfachen, werden diese Informationen nach dem Zeitpunkt der Zuweisung gruppiert und freigegeben.

Anzeigen von D3D-API-Objekten in der Bereichsdetailsansicht

Residenz

Informationen zu Problemen im Zusammenhang mit Residenzen finden Sie in den Kategorien Residenzvorgänge, Herabgestufte Zuordnungen und Zuordnungsmigrationen der Ansicht Bereichsdetails. Diese Markierungen und Ereignisse werden auch in der Residenzvorgangs-Lane angezeigt.

Zu den Residenzvorgängen gehören die MakeResident- und Evict-Vorgänge (initiiert über die Direct3D 12-API) sowie alle PageIn- und PageOut-Vorgänge (weitere Details finden Sie unter Residenz). Herabgestufte Zuordnungen treten auf, wenn der Grafik-Kernel (DXGK) eine Ressource im VRAM Ihrer GPU nicht zuordnen kann (aufgrund des Arbeitsspeicherdrucks oder der Fragmentierung). In diesem Fall versucht DXGK auch, Zuordnungsmigrationen für diese herabgestuften Zuordnungen durchzuführen. Beachten Sie, dass diese Migrationen teure Vorgänge sind, da sie das Anhalten der GPU erfordern.

Anzeigen von Zuordnungsmigrationen

GPU-Auslastung und Präsentationszähler

Aktivieren Sie die Option SysMon-Zähler erfassen, wenn Sie eine Erfassung für Zähler ausführen, die im Systemmonitor (auch als SysMon bezeichnet) vorhanden sind, der verschiedene Indikatoren im Zusammenhang mit der GPU-Leistung enthält. Insbesondere gibt es Zähler für:

  • GPU-Auslastung, unterteilt nach GPU-Engine für den Zielprozess und alle Prozesse.
  • Präsentationsdaten, z. B. Frames pro Sekunde (und umgekehrt, in Millisekunden, MsBetweenPresents) und MsUntilRenderComplete (Zeit zwischen dem aktuellen Start und dem Abschluss der GPU-Arbeit).
  • GPU-Speicherinformationen, einschließlich lokaler und nicht lokaler Speicherauslastung, Residency und Budgets.

Anzeige von Frames pro Sekunde und GPU-Auslastung in der Metrikansicht

Tipp

Zeigen Sie auf die Zählernamen im Systemmonitor , um eine Beschreibung anzuzeigen.

Diese Zähler können auch in Echtzeit überwacht werden, entweder während der Erfassung einer Anzeigedauer oder durch Klicken auf die Schaltfläche Zählererfassung starten in der Systemmonitor-Ansicht. Die Diagramme können neu angeordnet werden, und Zähler können dynamisch hinzugefügt oder entfernt werden. Klicken Sie auf Zähler , um alle verfügbaren Zähler anzuzeigen.

Anzeigen von Systemmonitordiagrammen und Zählern

Win32-Datei-E/A

Lesen Sie den Blogbeitrag Analyse der Leistung von Win32-Datei-E/A in Timing-Erfassungen.

Andere Analyse-Funktionen