Zobrazení vláken (paralelní výkon)
Zobrazení vláken je nejdetailnější zobrazení nástroje Concurrency Visualizer s největším počtem funkcí.Pomocí tohoto zobrazení je možné určit, zda jsou vlákna prováděna nebo blokována kvůli synchronizace, vstupu/výstupu nebo z nějakého jiného důvodu.
Během analýzy profilování zkoumá nástroj Concurrency Visualizer všechny události přepnutí kontextu operačního systému každého vlákna aplikace.Ke přepnutí kontextu může dojít z mnoha důvodů, jako jsou tyto:
Vlákno je blokováno synchronizačním primitivem.
Vyprší platnost kvanta vlákna.
Vlákno provede blokující požadavek na vstup/výstup.
Zobrazení vláken přiřadí kategorie každému přepnutí kontextu po zastavení provádění vlákna.Kategorie jsou zobrazeny v legendě v levé dolní části zobrazení.Nástroj Concurrency Visualizer rozděluje události přepnutí kontextu do kategorií podle prohledání zásobníku volání vlákna pro známé blokující rozhraní API.Pokud neexistuje žádná shoda zásobníku volání, je použitý důvod pro čekání uvedený Windows.Kategorie Windows však může být založena na detailech implementace a nemusí zohledňovat záměr uživatele.Windows může například hlásit důvod pro čekání nativního tenkého zámku čtenář-zapisovatel jako vstup/výstup namísto synchronizace.Ve většině případů je možné identifikovat příčinu událostí blokování porovnáním zásobníků volání, které odpovídají událostem přepnutí kontextu.
Zobrazení vláken také ukazuje závislosti mezi vlákny.Například pokud je identifikováno vlákno, které je blokováno na synchronizačním objektu, je možné vyhledat vlákno, který jej odblokovalo, a při prozkoumat zásobník volání tohoto vlákna ve chvíli, kdy k odblokování došlo.
Při provádění vláken sbírá nástroj Concurrency Visualizer vzorky.V Zobrazení vláken je možné analyzovat, který kód byl proveden jedním nebo více vlákny během segmentu provádění.Je také možné zkoumat sestavy blokování a sestavy profilování stromu provádění zásobníku volání.
Použití
Následuje několik způsobů, jak Zobrazení vláken použít:
Odhalení příčin, proč uživatelské rozhraní (UI) aplikace během určitých fází provádění neodpovídá.
Určení množství času, který byl stráven blokováním při synchronizaci, vstupu/výstupu, chybách stránkování a jiných událostech.
Určení stupně rušení od ostatních procesů, které jsou v systému spuštěny.
Odhalení problémů vyrovnávání zatížení pro paralelní zpracování.
Odhalení důvodů pro neoptimální nebo neexistující škálovatelnost (například proč se výkon paralelní aplikace nezvýší, když je k dispozici více logických jader).
Pochopení stupně souběžnosti v aplikaci pro pomoc při paralelizaci.
Pochopení závislostí mezi pracovními vlákny a kritickými cestami provádění.
Zkoumání specifických časových intervalů a vláken
Zobrazení vláken zobrazuje časovou osu.Časovou osu je možné zvětšovat a posouvat a prozkoumat tak specifické intervaly a vlákna aplikace.Na ose x je uveden čas a na ose y je uvedeno několik kanálů:
Dva kanály vstupu/výstupu pro každou jednotku disku v systému, jeden kanál pro čtení a jeden pro zápis.
Kanál pro každé vlákno v procesu.
Kanály poznámky, pokud trasování obsahuje události poznámky.Kanály poznámky se zpočátku zobrazí pod kanály vláken, které tyto události vygenerovaly.
Kanály GPU.
Následuje obrázek Zobrazení vláken:
Zobrazení vláken
Zpočátku jsou vlákna řazena v pořadí, ve kterém byla vytvořena, takže hlavní vlákno aplikace je uvedeno jako první.Je možné použít možnost seřazení v levém horním rohu zobrazení k seřazení vláken podle jiného kritéria (například podle největšího objemu provedené práce).
Je také možné skrýt vlákna, která neprovádějí žádnou práci výběrem jejich názvů ve sloupci vlevo a následným kliknutím na tlačítko Skrýt vybraná vlákna na panelu nástrojů.Je doporučeno skrýt vlákna, která jsou zcela blokovaná, protože jsou jejich statistiky nepodstatné a znepřehledňují výsledné sestavy.
Pro odhalení dalších vláken, které je vhodné skrýt, zvolte v aktivní legendě sestavu Souhrn dle vláken na kartě Sestava profilu.To zobrazí graf rozpisu spuštění, který zobrazí stav vláken pro aktuálně vybraný časový interval.Na některých úrovních zvětšení nemusí být zobrazena některá vlákna.V tomto případě se vpravo zobrazí elipsy.
Po výběru vhodného časového intervalu a některých vláken v tomto intervalu je možné spustit analýzu výkonu.
Analytické nástroje
Tato část popisuje sestavy a jiné analytické nástroje.
Podrobnosti o zablokování vlákna
Umístěním ukazatele na region se zobrazí popisek s informacemi o události blokování určitého vlákna v této oblasti.Obsahuje informace jako je kategorie, počáteční čas oblasti, trvání blokování a rozhraní API, které způsobilo blokování, jestli je obsaženo v dostupných informacích.Pokud je vybrána oblast blokování, zobrazí se v dolním podokně zásobník pro určený čas společně se stejnými informace zobrazenými v popisku.Prozkoumáním zásobníku volání je možné zjistit důvod pro vznik události blokování vlákna.Další informace o procesu a vlákně je možné zjistit výběrem oblasti a prozkoumáním karty Aktuální.
Cesta provádění může obsahovat více událostí blokování.Tyto události je možné prozkoumat podle kategorie blokování, aby bylo jednodušší nalézt problematické oblasti.Stačí zvolit jednu kategorii blokování v legendě na levé straně.
Závislosti mezi vlákny
Nástroj Concurrency Visualizer může zobrazit závislosti mezi vlákny procesu, takže je možné určit, co se blokované vlákno snažilo provést a zjistit, které jiné vlákno mu opět povolilo provádění.Vybráním příslušné oblasti blokování je možné zjistit, které vlákno odblokovalo jiné vlákno.Pokud dokáže nástroj Concurrency Visualizer určit vlákno, které provedlo odblokování, nakreslí čáru mezi tímto vláknem a oblastí vykonávání následující po oblasti blokování.Karta Zásobník odblokování navíc zobrazuje příslušný zásobník volání.
Podrobnosti provádění vlákna
Na grafu časové osy vlákna zobrazují zelené oblasti čas, kdy vlákno provádělo svůj kód.Je možné získat podrobnější informace o oblasti provádění.
Při výběru bodu v oblasti provádění vyhledá nástroj Concurrency Visualizer tento bod v čase v příslušném zásobníku volání, zobrazí černou stříšku nad vybraným bodem v oblasti spuštění a zobrazí samotný zásobník volání na kartě Aktuální zásobník.Je také možné vybrat více bodů v oblasti provádění.
[!POZNÁMKA]
Nástroj Concurrency Visualizer nemusí být schopen vyřešit výběr v oblasti provádění.K tomu obvykle dochází, když je délka oblasti menší než jedna milisekunda.
Zvolením tlačítka Provádění v aktivní legendě dojde k získání profilu provádění pro všechna povolená (neskrytá) vlákna v aktuálně vybraném časovém rozmezí.
Graf časové osy
Graf časové osy zobrazuje aktivitu všech vláken v procesu a všech fyzických jednotek disků v hostitelském počítači.Zobrazuje také aktivitu GPU a události poznámky. Je možné pohled přiblížit pro získání větších detailů, nebo oddálit pro zobrazení delšího časového intervalu.Je také možné vybrat body v grafu a získat detaily o jejich kategorii, počátečních časech, trváních a stavech zásobníku volání.
V grafu časové osy znázorňuje barva stav vlákna pro daný okamžik.Zelené oblasti například označují oblasti provádění, červené oblasti byly zablokované kvůli synchronizaci, žluté oblasti byly přepnuté a fialové oblasti se účastnily vstupu/výstupu na zařízení.Toto zobrazení je možné použít pro prozkoumání rozložení práce mezi vlákna, která se zapojila do provádění paralelní smyčky nebo souběžných úloh.Pokud vlákno trvá déle než ostatní, může být práce nesprávně rozložená.Tyto informace slouží ke zlepšení výkonu programu rovnoměrnějším rozdělením práce mezi vlákna.
Pokud je pouze jedno vlákno zelené (prováděné) v určitém čase, nemusí aplikace využívat všech výhod souběžnosti systému.Je také možné použít graf časové osy ke zkoumání závislostí mezi vlákny a dočasnými relacemi mezi blokujícími a blokovanými vlákny.Změna uspořádání vláken se provede zvolením vlákna a kliknutím na tlačítka nahoru nebo dolů na panelu nástrojů.Vlákno je možné skrýt jeho zvolením a kliknutím na tlačítko Skrýt vlákna.
Sestavy profilu
Pod grafem časové osy je zobrazen profil časové osy a podokno obsahující karty pro různé sestavy.Sestavy se automaticky obnovují se změnou Zobrazení vláken.Pro velká trasování nemusí být podokno sestav dostupné dokud nejsou aktualizace vypočteny.Každá sestava má dvě úpravy filtru: snížení hluku a Pouze můj kód.Snížení hluku slouží k filtrování položek stromu volání, ve kterých se strávilo málo času.Výchozí hodnota filtru je 2 procenta, ale je možné jej upravit v rozsahu 0 až 99 procent.Pro zobrazení stromu volání jen pro vlastní kód zaškrtněte zaškrtávací políčko Pouze můj kód.Pro zobrazení všech stromů volání zrušte zaškrtnutí tohoto zaškrtávacího políčka.
Sestava profilu
Tato karta zobrazuje sestavy, které odpovídají položkám v aktivní legendě.Pro zobrazení sestavy vyberte jednu z položek.
Aktuální zásobník
Tato karta zobrazuje zásobník volání pro vybraný bod oblasti vlákna v grafu časové osy.Zásobníky volání jsou zkráceny, aby ukazovaly jen aktivity spojené s vlastním programem.
Zásobník odblokování
Pro zobrazení vláken, která odblokovala vybrané vlákno a na jakém řádku kódu, zvolte kartu Zásobník odblokování.
Spuštění
Sestava provádění zobrazuje rozdělení času stráveného prováděním aplikace.
Pro vyhledání řádku kódu, ve kterém byl stráven čas provádění, rozbalte strom volání a v místní nabídce položky stromu volání zvolte položku Zobrazit zdroj nebo Zobrazit lokality volání.Položka Zobrazit zdroj vyhledá provedený řádek kódu.Položka Zobrazit lokality volání vyhledá řádek kódu, který zavolal provedený řádek kódu.Pokud existuje pouze jedna lokalita volání, její řádek v kódu je zvýrazněn.Pokud existuje více lokalit volání, je možné vybrat jen požadovanou lokalitu v dialogovém okně, které se zobrazí, a pak zvolit tlačítko Přejít ke zdroji, aby byl zvýrazněn vybraný řádek kódu.Často je nejužitečnější vyhledat lokalitu volání, která má nejvíce instancí, nejvíce stráveného času nebo obojí.Další informace naleznete v tématu Sestava profilu spuštění.
Synchronizace
Sestava synchronizace zobrazuje volání, která jsou zodpovědná za bloky synchronizace, společně s agregovanými časy blokování každého zásobníku volání.Další informace naleznete v tématu Čas synchronizace.
I/O
Sestava vstupu/výstupu zobrazuje volání, která jsou zodpovědná za bloky vstupu/výstupu, společně s agregovanými časy blokování každého zásobníku volání.Další informace naleznete v tématu Čas I/O (Zobrazení vláken).
Převést do režimu spánku
Sestava pozastavení zobrazuje volání, která jsou zodpovědná za bloky pozastavení, společně s agregovanými časy blokování každého zásobníku volání.Další informace naleznete v tématu Doba spánku.
Správa paměti
Sestava správy paměti zobrazuje volání, kde se vyskytovaly bloky správy paměti, společně s agregovanými časy blokování každého zásobníku volání.Tyto informace slouží k identifikaci oblastí, které mají problémy s nadměrným stránkováním nebo uvolňováním paměti. Další informace naleznete v tématu Čas správy paměti.
Přerušení
Sestava přerušení zobrazí instance, kde procesy v systému přerušily aktuální proces, a jednotlivá vlákna, která nahradila vlákna aktuálního procesu.Tyto informace slouží k určení procesů a vláken, která jsou nejvíce zodpovědná za přerušení.Další informace naleznete v tématu Čas přerušení.
Zpracování uživatelského rozhraní
Sestava zpracování uživatelského rozhraní zobrazuje volání, která jsou zodpovědná za bloky zpracování uživatelského rozhraní, společně s agregovanými časy blokování každého zásobníku volání.Další informace naleznete v tématu Doba zpracování uživatelského rozhraní.
Souhrn dle vláken
Tato karta zobrazuje barevně kódované sloupcové zobrazení celkového času, který každé vlákno strávilo ve stavu běhu, zablokování, vstupu/výstupu a v dalších stavech.Sloupce jsou označeny dole.Při úpravě úrovně zvětšení v grafu časové osy je tato karta automaticky aktualizována.Na některých úrovních zvětšení nemusí být zobrazena některá vlákna.V tomto případě se vpravo zobrazí elipsy.Pokud není požadované vlákno zobrazeno, je možné skrýt ostatní vlákna.Další informace naleznete v tématu Sestava souhrnu podle vláken.
Diskové operace
Tato karta zobrazuje procesy a vlákna, která se účastnila vstupně/výstupních operací na disku jménem aktuálního procesu, které soubory zpracovávala (například načtené knihovny DLL), kolik bajtů načetla a další informace.Tuto sestavu lze použít k vyhodnocení doby strávené přístupem k souborům během provádění, zejména pokud se proces chová jako vstupně/výstupně zaměřený proces.Další informace naleznete v tématu Sestava diskových operací (Zobrazení vláken).