SPTDump

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