Udostępnij za pośrednictwem


Profilowanie CPU i GPU z pomiarem czasu

Zrzuty czasowe łączą dane profilowania CPU i GPU w jeden zrzut dla szczegółowej analizy aplikacji. Te dane są zbierane, gdy gra jest uruchomiona, i przy minimalnym narzucie, dzięki czemu można zobaczyć takie elementy, jak praca jest rozdzielana między rdzeniami procesora CPU, opóźnienie między przesyłaniem pracy graficznej przez procesor CPU a jej wykonywaniem przez procesor GPU, kiedy mają miejsce operacje we/wy plików oraz przydziały pamięci, itd. Obejmuje to również zdarzenia zdefiniowane przez aplikację, znaczniki i liczniki za pośrednictwemPixEvents.

Rejestrowanie danych czasowych

Z widoku połączenia uruchom lub dołącz do żądanego procesu (upewniając się, że nie zaznaczono odpowiedniej opcji przechwytywania GPU).

Skonfiguruj opcje przechwytywania chronometrażu zgodnie z potrzebami i, gdy wszystko będzie gotowe, kliknij przycisk Rozpocznij przechwytywanie chronometrażu, aby rozpocząć nagrywanie. Kliknij zatrzymaj przechwytywanie chronometrażu (lub zakończ działanie aplikacji), aby zakończyć nagrywanie. Po krótkim okresie przetwarzania rozpocznie się proces przechwytywania.

Opcje przechwytywania czasu

Nazwa Opis
Tryb przechwytywania Sekwencyjne: rejestruj całe zdarzenia między uruchamianiem i zatrzymywaniem przechwytywania.
Cykliczne: rejestruj zdarzenia w buforze o stałym rozmiarze, zapisując tylko ostatnie n sekund danych. Aby uzyskać więcej informacji, zobacz ten wpis w blogu na temat Okrągłego Przechwytywania Czasu.
Próbki CPU Wykonaj przykładowe profilowanie, aby zobaczyć, gdzie procesor spędza czas. Częstotliwość próbkowania jest konfigurowalna.
Stosy wywołań przy przełączaniu kontekstu Zbieraj stosy wywołań, gdy wątek przełącza konteksty.
Dostęp do plików Śledzenie dostępu do plików.
Chronometraż procesora GPU Zbierz szczegółowe informacje o czasie rozpoczęcia i zakończenia pracy procesora graficznego (GPU).
Zasoby procesora GPU Zbierz szczegółowe informacje o obiektach D3D, takich jak sterty i zasoby. Śledź również rezydencję procesora GPU, zdegradowane alokacje i migracje alokacji.
Zdarzenia VirtualAlloc/VirtualFree Śledzi alokacje wykonywane za pośrednictwem funkcji VirtualAlloc i VirtualFree.
Zdarzenia HeapAlloc/HeapFree Śledzi alokacje wykonywane za pośrednictwem funkcji HeapAlloc i HeapFree.
Niestandardowe zdarzenia alokatora Śledzi alokacje wykonywane przez niestandardowych alokatorów pamięci , instrumentowanych za pomocą PixEvents.
Zdarzenia błędów strony Zbieraj dane o błędach strony występujących podczas wykonywania przechwytywania. Błędy strony są wyświetlane na osi czasu i w widoku szczegółów elementu.
Stosy wywołań dla procesów innych niż główne Przechwyć stosy wywołań dla procesów innych niż proces główny (czyli uruchomiony lub dołączony).
Informacje o obrazie jądra Zbieranie informacji potrzebnej do przedstawienia stosów wywołań dla plików binarnych systemu operacyjnego.
Generowanie pliku etl zamiast pliku wpix Wygenerowany plik etl można później przekonwertować na plik wpix w pliku | Konwertuj menu. Ta opcja jest przydatna podczas raportowania repros błędów do zespołu PIX lub jeśli masz inne narzędzia do przetwarzania danych ETW.

Przechwytywane programowo

Przechwytywanie można wykonać programowo przy użyciu winPixEventRuntime. Aby uzyskać szczegółowe informacje, zobacz artykuł na blogu Programmatic capture.

Profilowanie procesora

Włączenie opcji przykłady procesora CPU podczas przechwytywania może pomóc w określeniu wolnych funkcji w ścieżce gorącej aplikacji, a także znajdowaniu problemów związanych z oczekiwaniami wątków i przełącznikami kontekstowymi. Będziesz mógł również śledzić różne rodzaje alokacji (jeśli włączono odpowiednią opcję przechwytywania).

Istnieje kilka wpisów w blogu, które szczegółowo obejmują te funkcje:

Profilowanie procesora GPU

Czy w Twojej aplikacji występują sporadyczne spadki liczby klatek? Nadmierne użycie pamięci VRAM? Nieoczekiwane operacje stronicowania między pamięcią systemowej a pamięcią VRAM? Funkcje profilowania GPU w PIX mogą pomóc w dogłębnym zrozumieniu tych typowych i trudnych do przeanalizowania sytuacji.

Chronometraż procesora GPU

Aby zbierać dane o czasach pracy procesora GPU, włącz opcję chronometrażu GPU podczas przechwytywania. W widoku Linii Czasu można znaleźć linie dla każdej kolejki GPU (w wyborze liniimożna szybko przypiąć te linie przy użyciu ustawienia przypinania kolejek API ). Te pasy ruchu zawierają kilka podlane:

  • Zdarzenia PIX (GPU): hierarchiczne, zdefiniowane przez aplikację regiony pracy procesora GPU. Zobacz wydarzenia PixEvents .
  • Wykonania GPU: wykonania odpowiadają przesłaniom zadań na poziomie interfejsu API, na przykład za pomocą ExecuteCommandLists.
  • Praca z procesorem GPU: każda praca wykonywana na procesorze GPU; na przykład Rysowanie, Dyspozytury, Kopie.
  • Znaczniki PIX (GPU): znaczniki zdefiniowane przez aplikację. Zobacz PixEvents.

Po wybraniu zdarzenia na ścieżce zobaczysz strzałki pokazujące, skąd na CPU pochodzi to zdarzenie. Dostępne są również różne opcje wizualizacji w menu opcji pasa ruchu (ikona koła zębatego obok nazwy pasa ruchu). W szczególności opcje Flatten Events i Flatten GPU Work są domyślnie włączone, aby zachować miejsce, ale możesz chcieć zobaczyć pełną hierarchię zdarzeń PIX lub parallelizację pracy GPU, gdy zagłębiasz się w konkretną ramkę.

Te dane są również dostępne w formie tabelarycznej za pośrednictwem widoku szczegółów zakresu, wybierając odpowiednią kategorię na liście rozwijanej Elementy , aby pokazać.

Wyświetlanie niewyrównanych zdarzeń PIX GPU i zadań GPU w szynie kolejki API, ze strzałką wskazującą, który wątek CPU przesłał zadanie GPU

Prezentacja i wyświetlanie informacji

Synchronizacje wirtualne są wyświetlane jako znaczniki w osobnym pasie monitora i można je znaleźć w widoku zakresów w kategorii Inne.

Pamięć procesora GPU i obiekty Direct3D

Włącz opcję zasobów GPU podczas przechwytywania w celu zbierania informacji o obiektach Direct3D. Aby przedstawić graficznie ogólne użycie pamięci, można znaleźć kilka liczników w widoku Metrics. Możesz skonfigurować różne wiersze budżetu, aby szybko zrozumieć, czy spełniasz cele użycia pamięci. Jeśli znajdziesz interesujący Cię obszar, możesz chcieć zbadać go dokładniej, wybierając zakres czasu, klikając Powiększenie osi czasu, aby wybrać zakres w menu kontekstowym prawym przyciskiem myszy, a następnie ustawiając listę rozwijaną Wybrany zakres czasu na Wybierz widoczny zakres.

Wyświetlanie użycia pamięci obiektu D3D API w widoku Metryk

Napiwek

Ustawienie stylu linii na Kwadrat ułatwia sprawdzenie, gdzie są wykonywane alokacje.

W szczegółach zakresu widoku można wyświetlić różne informacje o obiektach interfejsu API Direct3D, takich jak sterty, zasoby i obiekty stanu potoku. Aby ułatwić wskazanie wszelkich podejrzanych obiektów, te informacje są pogrupowane według czasu, kiedy zostały przydzielone i zwolnione.

Wyświetlanie obiektów interfejsu API D3D w widoku szczegółów zakresu

Pobytu

Aby uzyskać informacje o problemach związanych z pobytem, zobacz Residence Operations, demoted Allocationsi Allocation Migrations (Migracje alokacji) kategorii Zakres szczegółówwidoku. Znaczniki i zdarzenia są również wyświetlane na pasie Residence Operations.

Operacje rezydencji obejmują operacje MakeResident i Evict (inicjowane za pośrednictwem interfejsu API Direct3D 12), a także wszelkie operacje PageIn i PageOut (aby uzyskać więcej informacji, zobacz Residency). Zdegradowane alokacje występują, gdy sterownik grafiki (DXGK) nie może przydzielić zasobu w VRAM GPU (ze względu na presję pamięci lub fragmentację). W takim przypadku DXGK również spróbuje przeprowadzić migracje dla tych zdegradowanych alokacji. Należy pamiętać, że te migracje są kosztownymi operacjami, ponieważ wymagają zawieszenia procesora GPU.

wyświetlanie migracji alokacji

Liczniki wykorzystania GPU i prezentacji

Włącz opcję "przechwyć liczniki SysMon" podczas przechwytywania, aby zbierać liczniki obecne w monitorze systemu (znanym również jako SysMon), który zawiera różne liczniki związane z wydajnością GPU. W szczególności istnieją liczniki dla:

  • Wykorzystanie GPU podzielone przez silnik GPU zarówno dla procesu docelowego, jak i dla wszystkich procesów razem.
  • Dane prezentacji, takie jak klatki na sekundę (i odwrotność, w milisekundach, MsBetweenPresents) i MsUntilRenderComplete (czas między rozpoczęciem prezentacji a zakończeniem pracy procesora GPU).
  • Informacje o pamięci procesora GPU, w tym lokalne i nielokacyjne użycie pamięci, miejsce zamieszkania i budżety.

wyświetlanie klatek na sekundę i wykorzystanie GPU w widoku metryk

Napiwek

Najechać kursorem na nazwy liczników w Monitorze systemowym, aby uzyskać opis.

Te liczniki można również monitorować w czasie rzeczywistym, zarówno podczas przechwytywania pomiaru czasu, jak i po kliknięciu przycisku Rozpocznij zbieranie liczników w widoku Monitor systemu. Wykresy można zmienić, a liczniki można dodawać lub usuwać dynamicznie. Kliknij liczniki, aby wyświetlić wszystkie dostępne liczniki.

wyświetlanie wykresów i liczników monitora systemu

Win32 file-I/O

Zobacz wpis w blogu Analizowanie wydajności operacji I/O pliku Win32 w przechwytywaniu czasów.

Inne funkcje analizy