Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
SPTDump je nástroj příkazového řádku pro zkoumání souborů SPT (Sample Profile Trace) používaných v postupech vzorkové optimalizace řízené profily (SPGO). Slouží k zobrazení metadat SPT a ukázkových dat. Před převodem na SPD ověřte obsah trasovacích dat a řešte potíže, například nesoulad verzí SPD.
Soubor SPT obsahuje nezpracované vzorky událostí výkonu hardwaru shromážděné během pracovní zátěže aplikace.
Syntax
SPTDump[možnosti] sptfile
Parametry
možnosti
Zadejte u SPTDump následující možnosti:
- /all Vypíše celý soubor SPT. Tato možnost je výchozí.
- /header Vypíše hlavičku souboru SPT.
- /progid Vypíše identifikátory programu (GUID a stáří pro každý binární soubor).
- /strtab Vypíše tabulku řetězců.
- /Událost Výstup ukázkových událostí
- /Pomoc Zobrazení informací nápovědy
sptfile
Cesta k souboru SPT, který chcete zkontrolovat.
Remarks
Note
Spusťte tento nástroj z příkazového řádku Visual Studio developer.
Pomocí SPTDump prozkoumejte obsah souboru Sample Profile Trace (SPT).
SPTAggregate vytváří soubory SPT z protokolů trasování událostí ETL shromažďovaných protokoly xperf. Naimportujte soubory SPT do souboru SPD (ukázková databáze profilu) pomocí SPDConvert.
Chcete-li diagnostikovat chybu "Nekompatibilní verze SPD", použijte /progid k zobrazení identifikátoru GUID a stáří každého binárního souboru v souboru SPT a pak tyto hodnoty porovnejte se souborem SPD pomocí SPDDump /header.
Example
Tento příklad vypíše úplný obsah souboru SPT:
SPTDump sample.spt
Tento příklad vypíše pouze ID programu (GUID a věk) binárních souborů v souboru SPT:
SPTDump /progid sample.spt
Formát záhlaví SPT
SPT soubor je binární formát s hlavičkou 32 bajtů, řetězcovou tabulkou, tabulkou ID programu a ukázkovým datovým proudem událostí. Tento dokument popisuje verzi 1 formátu. Pole verze se aktualizuje, pokud se rozložení v budoucnu změní.
Hlavička SPT je 32 bajtů:
-
[0x00-0x03]Podpis (uint32 LE) = 0x5350543A ("SPT:") -
[0x04-0x07]Verze (uint32 LE) = 1 -
[0x08-0x0B]RawDataId (uint32 LE) = 0 (nevyužité/rezervované) -
[0x0C-0x0F]TargetArch (uint32 LE) = 0 (nevyužité/rezervované) -
[0x10-0x13]StringTableOffset (uint32 LE) = offset na tabulku řetězců binárních názvů (obvykle 0x20) -
[0x14-0x17]ProgramIdTableOffset (uint32 LE) = posun na tabulku RSDSKEY (obvykle StringTableOffset+StringTableCapacity) -
[0x18-0x19]StringTableUsed (uint16 LE) = bajty používané v řetězcové tabulce -
[0x1A-0x1B]StringTableCapacity (uint16 LE) = bajty přidělené v řetězcové tabulce (obvykle 0x4000) -
[0x1C-0x1D]ProgramIdsUsed (uint16 LE) = počet ID programů (často jen 1) -
[0x1E-0x1F]ProgramIdCapacity (uint16 LE) = kapacita počtu (nikoli bajtů) pro ID programů (obvykle 0x100)
StringTable bezprostředně následuje za hlavičkou na zadaném offsetu. Obsahuje binární název souboru UTF-8 s ukončenou hodnotou null.
ProgramIdTable následuje za StringTable na zadaném offsetu. Každá položka má 24 bajtů: 16bajtový identifikátor GUID datového proudu Rich Signature Data Stream (RSDS) + 4bajtové pole „age“ + 4bajtový řetězcový index do StringTable.
Datový proud začíná u ProgramIdTableOffset + (ProgramIdCapacity * 24) a začíná opkódem SPT_OP_BINARY_ID.
SPT Opcodes
V následujících popisech:
- RVA znamená 32bitovou relativní virtuální adresu instrukce v binárním souboru, tedy jde o její offset v modulu.
- LE znamená malé-endové bajtové pořadí.
SPT_OP_REPEAT (0x82)
Opakujte další záznam pro zadaný počet opakování. Počet opakování 2 znamená, že celkem jsou 3 identické záznamy. Počet opakování se po zpracování resetuje.
Rozložení: 1 bajt: opcode 0x82. 1 bajt: výplň. 8 bajtů: počet opakování (uint64 LE)
SPT_OP_UNHALT_CYCLE, SPT_OP_RETIRE_INSTR, , SPT_OP_RETIRE_BR_INSTRSPT_OP_L1_ICACHE_MISS, , , SPT_OP_L1_DCACHE_MISSSPT_OP_ETW_INSTR (0x01, 0x02, 0x03, 0x04, 0x05, 0x41)
Rozložení: 1 bajt: operační kód. 1 bajt: počet RVA (N). 4N bajty: N RVA (uint32 LE každý)
Každá hodnota RVA představuje počet přístupů vzorku IP adres = 1 + počet opakování.
SPT_OP_LBR (0x10)
Rozvržení: 1 bajt: operační kód 0x10. 1 bajt: počet událostí (N). 8N bytů: N dvojic LBR, každá dvojice obsahuje: 4 byty: To RVA (uint32 LE), 4 byty: From RVA (uint32 LE)
Každý pár představuje oblouk větvení s počtem zásahů = 1 + počet opakování.
SPT_OP_ETW_CALLSTACK (0x42)
Struktura: 1 bajt: operační kód 0x42. 1 bajt: počet RVA (N). 4N bajtů: N RVA (uint32 LE, každý z nich představuje rámce zásobníku).
Kdy:
- N = 2: Dvě RVA tvoří jeden oblouk zásobníku (RVA[0], RVA[1])
- N > 2: Vytvoří oblouky N-1 z po sobě jdoucích párů: (RVA[0]->RVA[1]), (RVA[1]->RVA[2]), ..., (RVA[N-2]->RVA[N-1]) Každá řada, bez ohledu na to, jestli se jedná o jeden oblouk nebo po sobě jdoucí páry, má počet výskytů = 1 + počet opakování.
SPT_OP_BINARY_ID (0x81)
Rozložení: 1 bajt: opcode 0x81. 1 bajt: výplň. 2 bajty: ID programu (uint16 LE). 4 bajty: celková délka dat v tomto segmentu (uint32 LE).
Označí začátek datových záznamů pro určitý binární soubor určený ID indexu. Identifikátor indexu odkazuje na RSDSKey a tabulku řetězců binárních názvů v hlavičce SPT.
Délka dat zahrnuje samotné pole o délce 4 bajtů. Tento operační kód se může v datovém proudu vyskytnout vícekrát.
Viz také
Návod: Použití optimalizace řízené profilem pomocí vzorkování (SPGO) ke zvýšení výkonu
SPDConvert
SPDDump
SPTAggregate