Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
SPTDump är ett kommandoradsverktyg för att inspektera SPT-filer (Sample Profile Trace) som används i SPGO-arbetsflöden (Sample Profile-Guided Optimization). Använd den för att visa SPT-metadata och exempeldata. Validera spårinnehåll före konvertering till SPD och felsök problem, till exempel felmatchningar mellan SPD-versioner.
En SPT-fil innehåller råa exempelhändelser för maskinvaruprestanda som samlats in från en programarbetsbelastning.
Syntax
SPTDump[alternativ] sptfile
Parameters
alternativ
Ange följande alternativ till SPTDump:
- /all Skriver ut hela SPT-filen. Det här alternativet är standardinställningen.
- /Huvudet Mata ut SPT-filrubriken.
- /progid Visar program-ID:n (GUID och ålder för varje binärfil).
- /strtab Mata ut strängtabellen.
- /event Mata ut exempelhändelser.
- /Hjälp Visa hjälpinformation.
sptfile
Sökvägen till SPT-filen som ska inspekteras.
Anmärkningar
Note
Starta det här verktyget från en utvecklarkommandotolk för Visual Studio.
Använd SPTDump för att granska innehållet i en SPT-fil (Sample Profile Trace).
SPTAggregate skapar SPT-filer från ETL-händelsespårningsloggar som samlas in av xperf. Importera SPT-filer till en SPD-fil (exempelprofildatabas) med hjälp av SPDConvert.
Använd /progid för att visa GUID:en och åldern för varje binärfil i SPT-filen om du vill diagnostisera felet ”SPD-version inkompatibel”, och jämför sedan dessa värden med SPD-filen med SPDDump /header.
Example
Det här exemplet matar ut det fullständiga innehållet i en SPT-fil:
SPTDump sample.spt
I det här exemplet matas endast program-ID:t (GUID och ålder) ut för binärfiler i en SPT-fil:
SPTDump /progid sample.spt
SPT-rubrikformat
SPT-filen är ett binärt format med en 32-bytesrubrik, strängtabell, program-ID-tabell och exempelhändelsedataström. Det här dokumentet beskriver version 1 av formatet. Versionsfältet uppdateras om layouten ändras i framtiden.
SPT-huvudet är 32 byte:
-
[0x00-0x03]Signatur (uint32 LE) = 0x5350543A ("SPT:") -
[0x04-0x07]Version (uint32 LE) = 1 -
[0x08-0x0B]RawDataId (uint32 LE) = 0 (oanvänd/reserverad) -
[0x0C-0x0F]TargetArch (uint32 LE) = 0 (oanvänd/reserverad) -
[0x10-0x13]StringTableOffset (uint32 LE) = förskjutning till strängtabell med binärt namn (vanligtvis 0x20) -
[0x14-0x17]ProgramIdTableOffset (uint32 LE) = förskjutning till RSDSKEY-tabell (vanligtvis StringTableOffset+StringTableCapacity) -
[0x18-0x19]StringTableUsed (uint16 LE) = byte som används i strängtabell -
[0x1A-0x1B]StringTableCapacity (uint16 LE) = byte som allokerats i strängtabellen (vanligtvis 0x4000) -
[0x1C-0x1D]ProgramIdsUsed (uint16 LE) = antal program-ID:n (ofta bara 1) -
[0x1E-0x1F]ProgramIdCapacity (uint16 LE) = kapacitet i antal (inte byte) för program-ID :n (vanligtvis 0x100)
StringTable följer omedelbart efter huvudet med det angivna offsetvärdet. Den innehåller ett null-avslutat UTF-8 binärt filnamn.
ProgramIdTable följer efter StringTable med den angivna förskjutningen. Varje post är 24 byte: en 16-byte Rich Signature Data Stream (RSDS)-GUID + 4-byte åldersvärde + 4-byte strängindex i StringTable.
Dataströmmen börjar vid ProgramIdTableOffset + (ProgramIdCapacity * 24)och börjar med en SPT_OP_BINARY_ID opcode.
SPT Opcodes
I följande beskrivningar:
- RVA avser den 32-bitars relativa virtuella adressen för en instruktion i binärfilen, det vill säga dess offset i modulen.
- LE betyder lite endiansk byteordning.
SPT_OP_REPEAT (0x82)
Upprepa nästa post för det angivna antalet gånger. Ett upprepningsantal på 2 innebär att det finns totalt 3 identiska poster. Antalet upprepningar återställs efter bearbetningen.
Layout: 1 byte: opcode 0x82. 1 byte: utfyllnad. 8 byte: upprepningsantal (uint64 LE)
SPT_OP_UNHALT_CYCLE, SPT_OP_RETIRE_INSTR, SPT_OP_RETIRE_BR_INSTR, SPT_OP_L1_ICACHE_MISS, SPT_OP_L1_DCACHE_MISS( SPT_OP_ETW_INSTR 0x01, 0x02, 0x03, 0x04, 0x05, 0x41)
Layout: 1 byte: opcode. 1 byte: antal RVA (N). 4N byte: N RVA:er (uint32 i LE-format vardera)
Varje RVA representerar ett ANTAL IP-exempelträffar = 1 + upprepat antal.
SPT_OP_LBR (0x10)
Struktur: 1 byte: operationskod 0x10. 1 byte: antal händelser (N). 8N byte: N LBR-par, varje par är: 4 byte: Till RVA (uint32 LE), 4 byte: Från RVA (uint32 LE)
Varje par representerar en grenbåge med träffantalet = 1 + antal upprepningar.
SPT_OP_ETW_CALLSTACK (0x42)
Layout: 1 byte: opcode 0x42. 1 byte: antal RVA:er (N). 4N byte: N RVA:er (uint32 LE varje, som motsvarar stackramar).
När:
- N = 2: Två RVA:er bildar en enda stackbåge (RVA[0], RVA[1])
- N > 2: Skapar N-1 bågar av på varandra följande par: (RVA[0]->RVA[1]), (RVA[1]->RVA[2]), ..., (RVA[N-2]->RVA[N-1]) Varje serie, oavsett om den består av en enda båge eller av på varandra följande par, har träffantal = 1 + upprepningsantal.
SPT_OP_BINARY_ID (0x81)
Layout: 1 byte: opcode 0x81. 1 byte: utfyllnad. 2 byte: program-ID (uint16 LE). 4 byte: total datalängd i det här segmentet (uint32 LE).
Markerar början av dataposter för en specifik binär fil som anges av ett index-ID. Index-ID:t refererar tillbaka till strängtabellen RSDSKey och det binära namnet i SPT-huvudet.
Datalängden innehåller själva fältet med 4 bytes längd. Den här opcode-koden kan inträffa flera gånger i en dataström.
Se även
Självstudie: Använda SPGO (Sample Profile-Guided Optimization) för att förbättra prestanda
SPDConvert
SPDDump
SPTAggregate