Udostępnij za pośrednictwem


Widok wątków (równoległe wydajność)

Widok wątków jest najbardziej szczegółowym i bogatym w funkcje widokiem w Concurency Visualizer.Za pomocą tego widoku, można określić, czy wątki są wykonywane lub blokowane, z powodu synchronizacji, operacji we/wy lub z innej przyczyny.

Podczas analizy profilu, Concurency Visualizer bada wszystkie zdarzenia przełączania kontekstu systemu operacyjnego, dla każdego wątku aplikacji.Przełączenia kontekstu mogą wystąpić z wielu powodów, takich jak te:

  • Wątek jest zablokowany dla prymitywu synchronizacji.

  • Wygasa quantum wątku.

  • Wątek tworzy blokujące żądanie we/wy.

Widok wątków przypisuje kategorię do każdego przełączania kontekstu, po zatrzymaniu wykonywania wątku.Kategorie są wyświetlane w legendzie, w lewej dolnej części widoku.Concurrency Visualizer kategoryzuje zdarzenia przełączenia kontekstu, poprzez wyszukiwanie wątku, w stosie wywołań, dla dobrze znanych, blokujących interfejsów API.Jeśli nie istnieje dopasowany stos wywołań, używana jest przyczyna oczekiwania, dostarczona przez Windows. Jednakże, kategoria Windows może być oparta na szczególe implementacji i może nie odzwierciedlać zamiaru użytkownika. Na przykład, Windows zgłasza przyczynę oczekiwania na blokowanie w macierzystej, ograniczonej blokadzie odczytu-zapisu jako we/wy zamiast jako synchronizację. W większości przypadków można zidentyfikować główną przyczyną zdarzenia blokowania poprzez zbadanie stosów wywołań, które odpowiadają za zdarzenia przełączania kontekstu.

Widok wątków pokazuje również zależności pomiędzy wątkami.Na przykład, jeśli zostanie zidentyfikowany wątek, który jest zablokowany na obiekcie synchronizacji, można poszukać wątku, który go odblokuje i sprawdzić działanie na stosie wywołań dla tego wątku, w punkcie, w którym odblokował drugi wątek.

Gdy wątki są wykonywane, Concurecy Visualizer zbiera próbki.W widoku wątków można analizować, który kod jest wykonywany przez jeden lub więcej wątków podczas wykonywania segmentu.Można także sprawdzić raporty blokowania i raporty, które profilują wykonanie drzewa stosu wywołań.

Użycie

Oto kilka sposobów, na które można użyć Widoku wątków:

  • Określenie powodów, dlaczego interfejs użytkownika (UI) aplikacji nie odpowiada podczas niektórych faz wykonywania.

  • Określenie ilości czasu, który został poświęcony na blokowanie synchronizacji, I/O, błędy stron i inne zdarzenia.

  • Określenie stopień konfliktów pochodzących z innych procesów, które są wykonywane w systemie.

  • Identyfikowanie problemów równoważenia obciążenia dla wykonywania równoległego.

  • Identyfikowanie przyczyn dla nieoptymalnej lub nieistniejącej skalowalności (na przykład, dlaczego wydajność aplikacji równoległej nie poprawia się, kiedy jest dostępnych więcej rdzeni logicznych).

  • Zrozumienie stopnia współbieżności w aplikacji, w celu pomocy w zrównolegleniu.

  • Zrozumienie zależności między wątkami roboczymi i ścieżkami krytycznymi wykonania.

Badanie określonych odstępów czasowych i wątków

Widok wątków pokazuje oś czasu.Można powiększać i przesuwać się w obrębie osi czasu, aby zbadać określone odstępy czasu i wątki aplikacji.Na osi x jednostką jest czas, a na osi y znajduje się kilka kanałów:

  • Dwa kanały we/wy dla każdej systemowej stacji dysków, jeden kanał dla odczytów i jeden dla zapisów.

  • Kanał dla każdego wątku w procesie.

  • Kanały znacznika, jeśli zdarzenia znacznika występują w śledzeniu.Kanały znacznika początkowo wyświetlane są w obszarze kanałów wątku, który wygenerował te zdarzenia.

  • Kanały GPU.

Oto ilustracja Widoku wątków:

Widok wątków

Widok wątków

Początkowo wątki są sortowane w kolejności, w której są tworzone tak, aby główny wątek aplikacji był pierwszy.Można użyć opcji sortowania, znajdującej się w lewym głównym rogu widoku, do sortowania wątków według innego kryterium (na przykład, według wykonania większości pracy).

Można ukryć wątki, które nie wykonują pracy, zaznaczając ich nazwy w kolumnie po lewej stronie, a następnie wybierając przycisk Ukryj wybrane wątki, na pasku narzędzi.Zaleca się ukrycie wątków, które są całkowicie zablokowane, ponieważ ich statystyki są nieistotne i mogą zapychać raporty.

Aby zidentyfikować dodatkowe wątki do ukrycia, w legendzie aktywne, wybierz raport Podsumowanie na każdy wątek w karcie Raport profilu.Wyświetlany jest wykres Podziału wykonania, który pokazuje stan wątków dla aktualnie wybranego interwału czasowego.Na niektórych poziomach powiększenia, niektóre wątki mogą nie być wyświetlane.W takim przypadku wyświetlane są elipsy po prawej stronie.

Po wybraniu interwału czasowego i niektórych wątków znajdujących się w nim, można uruchomić analizę wydajności.

Narzędzia analizy

W tej sekcji opisano raporty i inne narzędzia analizy.

Dd627193.collapse_all(pl-pl,VS.110).gifSzczegóły blokowania wątku

Aby uzyskać informacje dotyczące zdarzenia blokowania w określonym regionie wątku, umieść wskaźnik w tym regionie, aby wyświetlić etykietkę.Zawiera informacje takie jak kategoria, początkowy czas regionu, czas trwania blokowania i blokujący interfejs API, jeśli taki istnieje.Jeśli blokujący region zostanie zaznaczony, wyświetlany jest w dolnym okienku stos, dla tego punktu w czasie, z tymi samymi informacjami, które są wyświetlone w etykietce narzędzia.Badając stos wywołań, można określić podstawową przyczynę zdarzenia zablokowania wątku.Dodatkowe informacje na temat procesu i wątku, można znaleźć przez zaznaczenie segmentu i zbadanie karty Bieżący.

Ścieżka wykonania może mieć wiele zdarzeń blokowania.Można je zbadać za pomocą kategorii blokowania, tak aby móc szybciej znaleźć problematyczne obszary.Wystarczy wybrać jedną z kategorii blokowania w legendzie, znajdującej się po lewej stronie.

Dd627193.collapse_all(pl-pl,VS.110).gifZależności między wątkami

Concurrency Visualizer może pokazywać zależności między wątkami w procesie, dzięki czemu można określić, co próbował zrobić zablokowany wątek oraz dowiedzieć się jaki inny wątek umożliwił wykonanie tego.Aby określić, który wątek odblokował inny wątek, należy wybrać odpowiedni segment blokowania.Jeśli Concurrency Visualizer może określić odblokowujący wątek, rysuje linię między odblokowującym wątkiem i wykonywanym segmentem, który następuje po blokującym segmencie.Ponadto, karta Stos odblokowujący zawiera odpowiedni stos wywołań.

Dd627193.collapse_all(pl-pl,VS.110).gifSzczegóły wykonania wątku

Na wykresie osi czasu dla wątku, zielone segmenty pokazują, kiedy wątek wykonywał kod.Można uzyskać bardziej szczegółowe informacje o segmencie wykonania.

Po zaznaczeniu punktu w segmencie wykonanie, Concurrency Visualize szuka tego punktu w czasie na odpowiednim stosie wywołań i wyświetla czarny daszek powyżej zaznaczonego punktu w segmencie wykonania oraz wyświetla sam stos wywołań, w karcie Bieżący stos.Można zaznaczyć wiele punktów w segmencie wykonania.

[!UWAGA]

Concurrency Visualizer może nie być w stanie rozpoznać zaznaczenia w segmencie wykonania.Zazwyczaj zdarza się to, gdy czas trwania segmentu jest mniejszy niż 1 milisekunda.

Aby uzyskać profil wykonania dla wszystkich włączonych (odkrytych) wątków, w aktualnie wybranym zakresie czasu, wybierz przycisk Wykonanie, w aktywnej legendzie.

Dd627193.collapse_all(pl-pl,VS.110).gifWykres na osi czasu

Wykres na osi czasu pokazuje działanie wszystkich wątków w procesie i wszystkie urządzenia fizyczne, na komputerze hosta.Wyświetla także aktywność GPU oraz zdarzenia znacznika.Można powiększyć widok, aby wyświetlić więcej szczegółów lub oddalić widok, aby wyświetlić dłuższy odstęp czasu.Można również wybrać punkty na wykresie, aby uzyskać szczegółowe informacje o kategoriach, czasach rozpoczęcia, czasach trwania oraz stanach stosu wywołań.

Na wykresie, na osi czasu, kolor wskazuje stan wątku, w danym momencie.Na przykład zielone segmenty były w trakcie wykonywania, czerwone segmenty były blokowane dla synchronizacji, żółte segmenty były wywłaszczone a purpurowe segmenty zajmowały się operacjami we/wy urządzenia.Można użyć tego widoku do zbadania zrównoważenia pracy pomiędzy wątkami, które są zaangażowane w pętli równoległej lub równoczesnych zadaniach.Jeśli wątek trwa dłużej niż inne, praca może być niezrównoważona.Można użyć tej informacji aby zwiększyć wydajność programu przez bardziej równomierną dystrybucję pracy pomiędzy wątkami.

Jeśli tylko jeden wątek jest zielony (wykonywany) w danym punkcie, w czasie, aplikacja może nie wykorzystywać w pełni, zalet współbieżności w systemie.Można użyć wykresu na osi czasu, do zbadania zależności między wątkami i czasowymi relacjami między blokującymi i zablokowanymi wątkami.Aby zmienić kolejność wątków, wybierz wątek, a następnie na pasku narzędzi wybierz przycisk w górę lub w dół.Aby ukryć wątki, zaznacz je i wybierz przycisk Ukryj wątki.

Dd627193.collapse_all(pl-pl,VS.110).gifRaporty profilu

Poniżej wykresu na osi czasu, znajduje się profil oraz okienko, które zawiera karty dla różnych raportów.Raporty aktualizują się automatycznie po zmianie Widoku wątków.Dla dużych śladów, okienko raportów może być niedostępne, podczas gdy aktualizacje są obliczane.Każdy raport ma dwa dostosowania filtra: redukcja szumu i Tylko mój kod.Redukcji szumu można użyć do odfiltrowania wpisów drzewa wywołań, w których został spędzony krótki czas.Domyślna wartość filtra wynosi 2, ale można dostosować ją, w zakresie od 0 do 99 procent.Aby wyświetlić drzewo wywołań tylko dla kodu napisanego przez użytkownika, należy zaznaczy pole wyboru Tylko mój kod.Aby wyświetlić wszystkie drzewa wywołań, wyczyść je.

Dd627193.collapse_all(pl-pl,VS.110).gifRaport profilu

Ta karta zawiera raporty, które odpowiadają wpisom w legendzie aktywne.Aby wyświetlić raport, należy wybrać jeden z wpisów.

Dd627193.collapse_all(pl-pl,VS.110).gifBieżący stos

Ta karta zawiera stos wywołań dla wybranego punktu w segmencie wątku, na wykresie, na osi czasu.Stosy wywołań są przycięte aby wyświetlały tylko działania, które są związane z programem.

Dd627193.collapse_all(pl-pl,VS.110).gifStos odblokowań

Aby zobaczyć, który wątek odblokował wybrany wątek, oraz w którym wierszu kodu, należy wybrać kartę Stos odblokowań kartę.

Dd627193.collapse_all(pl-pl,VS.110).gifWykonywanie

Raport z wykonania pokazuje rozkład czasu, który aplikacja poświęciła na wykonywanie.

Aby znaleźć wiersz kodu, w którym czas spędzony jest na wykonaniu, rozwiń drzewo wywołań, a następnie w menu skrótów dla wpisu drzewa wywołań, wybierz Wyświetl źródło lub Wyświetl miejsca wywołań.Wyświetl źródło lokalizuje wykonany wiersz kodu.Wyświetl miejsca wywołań lokalizuje wiersz kodu, w którym został wywołany wykonywany wiersz kodu.Jeśli istnieje tylko jedno miejsce wywołania, wiersz kodu jest wyróżniony.Jeśli istnieje wiele miejsc wywołań, można zaznaczyć wybrane miejsce, w oknie dialogowym, które zostanie wyświetlone, a następnie wybrać przycisk Przejdź do źródła, aby wyróżnić kod miejsca wywołania.Często, bardzo przydatna jest lokalizacja miejsca wywołania, które zawiera najwięcej wystąpień, zabiera najwięcej czasu, lub odpowiada obu wymienionym przypadkom.Aby uzyskać więcej informacji, zobacz Raport profilu wykonanie.

Dd627193.collapse_all(pl-pl,VS.110).gifSynchronizacja

Raport synchronizacji zawiera wywołania, które są odpowiedzialne za bloki synchronizacji, razem z agregowanymi czasami blokowania dla każdego stosu wywołań.Aby uzyskać więcej informacji, zobacz Czas synchronizacji.

Dd627193.collapse_all(pl-pl,VS.110).gifWE/WY

Raport we/wy zawiera wywołania, które są odpowiedzialne za bloki we/wy, razem z agregowanymi czasami blokowania dla każdego stosu wywołań.Aby uzyskać więcej informacji, zobacz Czas wejścia/wyjścia (Widok wątków).

Dd627193.collapse_all(pl-pl,VS.110).gifUśpienie

Raport uśpienia zawiera wywołania, które są odpowiedzialne za bloki uśpienia, razem z agregowanymi czasami blokowania dla każdego stosu wywołań.Aby uzyskać więcej informacji, zobacz Czas wstrzymania.

Dd627193.collapse_all(pl-pl,VS.110).gifZarządzanie pamięcią

Raport z zarządzania pamięcią pokazuje wywołania, w których wystąpiły bloki zarządzania pamięcią, razem z agregowanymi czasami blokowania dla każdego stosu wywołań.Można użyć tych informacji do zidentyfikowania obszarów, które mają nadmierne stronicowanie lub problemy z wyrzucaniem elementów bezużytecznych.Aby uzyskać więcej informacji, zobacz Czas zarządzania pamięci.

Dd627193.collapse_all(pl-pl,VS.110).gifWywłaszczenie

Raport wywłaszczenie zawiera wystąpienia, w których procesy systemowe wywłaszczyły bieżący proces oraz indywidualne wątki, które zastąpiły wątki w bieżącym procesie.Można użyć tych informacji do identyfikowania procesów i wątków, które są najbardziej odpowiedzialne za wywłaszczenie.Aby uzyskać więcej informacji, zobacz Wywłaszczenie czasu.

Dd627193.collapse_all(pl-pl,VS.110).gifPrzetwarzanie interfejsu użytkownika

Raport przetwarzania interfejsu użytkownika zawiera wywołania, które są odpowiedzialne za bloki przetwarzania interfejsu użytkownika, razem z agregowanymi czasami blokowania dla każdego stosu wywołań.Aby uzyskać więcej informacji, zobacz Czas przetwarzania interfejsu użytkownika.

Dd627193.collapse_all(pl-pl,VS.110).gifPodsumowanie, dla każdego wątku

Na tej karcie przedstawiono kolumnowy widok oznaczony kolorami, zawierający całkowity czas, który każdy wątek spędził w stanach uruchomienia, zablokowania, we/wy oraz innych stanach.Kolumny są oznaczone na dole.Po dostosowaniu poziomu powiększenia w wykresie na osi czasu, ta karta jest automatycznie aktualizowana.Na niektórych poziomach powiększenia, niektóre wątki mogą nie być wyświetlane.W takim przypadku wyświetlane są elipsy po prawej stronie.Jeśli oczekiwany wątek nie jest wyświetlany, można ukryć inne wątki.Aby uzyskać więcej informacji, zobacz Na raport podsumowujący wątku.

Dd627193.collapse_all(pl-pl,VS.110).gifOperacje na dysku

Na tej karcie przedstawiono, które procesy i wątki były zaangażowane w operacje we/wy dysku, w imieniu bieżącego procesu, pliki, na których wykonywane były te operacje (na przykład biblioteki DLL, które zostały załadowane), ilość odczytanych bajtów oraz inne informacje.Ten raport służy do oszacowania czasu spędzonego na uzyskiwaniu dostępu do plików w czasie wykonywania, szczególnie w przypadku, gdy proces wydaje się być powiązany z procesem we/wy.Aby uzyskać więcej informacji, zobacz Raport operacji dysku (Widok wątków).

Zobacz też

Koncepcje

Podglądacza współbieżności