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:
- Übersicht über Timing-Erfassungen
- Analysieren von CPU-Beispielen in Timing-Erfassungen, Blogbeitrag.
- Analysieren von Ständen und Kontextschaltern in Anzeigedauererfassungen
- Analysieren der Speicherauslastung und -leistung in Timing-Erfassungen
- Sie können auch eigene benutzerdefinierte Allokatoren instrumentieren. Weitere Informationen finden Sie im Blogbeitrag Speicherprofilunterstützung für Zuordnungen, die aus dem benutzerdefinierten Zuweisungsverteiler eines Titels erstellt wurden.
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.
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.
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.
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.
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.
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.
Win32-Datei-E/A
Lesen Sie den Blogbeitrag Analyse der Leistung von Win32-Datei-E/A in Timing-Erfassungen.
Andere Analyse-Funktionen
- Statistische Vergleiche helfen dabei, zu bestimmen, welche Teile einer PIX-Ereignishierarchie statistisch unterschiedliche Dauer für die Gruppe verglichener Punkte aufweisen. Ausführliche Informationen finden Sie im Blogbeitrag Timing Capture Statistical Comparison Features.
- Das Festlegen von Leistungsbudgets kann Ihnen helfen, problematische Bereiche der Erfassung schnell zu identifizieren. Weitere Informationen finden Sie im Blogbeitrag „Verwenden von Leistungsbudgets” in der Ansicht „Metriken zur Anzeige der Zeiterfassung”.
- Siehe auch den Blogbeitrag Critical Path Analysis in Timing Captures.