Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
SPTDump è uno strumento a riga di comando per analizzare i file SPT (Sample Profile Trace) usati nei flussi di lavoro di ottimizzazione guidata da profili campionati (SPGO). Usarlo per visualizzare i metadati SPT e i dati di esempio. Verificare il contenuto della traccia prima della conversione in SPD e risolvere problemi quali incongruenze tra versioni di SPD.
Un file SPT contiene eventi di esempio di prestazioni hardware non elaborati raccolti da un carico di lavoro dell'applicazione.
Sintassi
SPTDump[opzioni] sptfile
Parametri
Opzioni
Specificare le opzioni seguenti per SPTDump:
- /all Restituisce l'intero file SPT. Questa è l'opzione predefinita.
- /header Genera l'intestazione del file SPT.
- /progid Visualizza gli ID del programma (GUID e age per ogni file binario).
- /strtab Restituire la tabella di stringhe.
- /Evento Eventi di esempio di output.
- /Guida Visualizzare le informazioni della Guida.
sptfile
Percorso del file SPT da esaminare.
Osservazioni:
Note
Avviare questo strumento da un prompt dei comandi per sviluppatori Visual Studio.
Usare SPTDump per esaminare il contenuto di un file SPT (Sample Profile Trace).
SPTAggregate produce file SPT dai log di traccia eventi ETL raccolti da xperf. Importare file SPT in un file SPD (database del profilo di esempio) usando SPDConvert.
Per diagnosticare un errore di "versione spd non compatibile", usare /progid per visualizzare il GUID e l'età per ogni file binario nel file SPT e quindi confrontarli con il file SPD usando SPDDump /header.
Example
In questo esempio viene restituito il contenuto completo di un file SPT:
SPTDump sample.spt
In questo esempio vengono restituiti solo gli ID programma (GUID e età) per i file binari in un file SPT:
SPTDump /progid sample.spt
Formato dell'intestazione SPT
Il file SPT è un formato binario con un'intestazione a 32 byte, una tabella di stringhe, una tabella ID programma e un flusso di dati di eventi di esempio. Questo documento descrive la versione 1 del formato. Il campo della versione viene aggiornato se il layout cambia in futuro.
L'intestazione SPT è di 32 byte:
-
[0x00-0x03]Signature (uint32 LE) = 0x5350543A ("SPT:") -
[0x04-0x07]Versione (uint32 LE) = 1 -
[0x08-0x0B]RawDataId (uint32 LE) = 0 (inutilizzato/riservato) -
[0x0C-0x0F]TargetArch (uint32 LE) = 0 (inutilizzato/riservato) -
[0x10-0x13]StringTableOffset (uint32 LE) = offset della tabella binaria delle stringhe dei nomi (in genere 0x20) -
[0x14-0x17]ProgramIdTableOffset (uint32 LE) = offset della tabella RSDSKEY (in genere StringTableOffset+StringTableCapacity) -
[0x18-0x19]StringTableUsed (uint16 LE) = byte utilizzati nella tabella di stringhe -
[0x1A-0x1B]StringTableCapacity (uint16 LE) = byte allocati nella tabella di stringhe (in genere 0x4000) -
[0x1C-0x1D]ProgramIdsUsed (uint16 LE) = numero di ID programma (spesso solo 1) -
[0x1E-0x1F]ProgramIdCapacity (uint16 LE) = capacità espressa come numero di elementi (non in byte) per gli ID di programma (tipicamente 0x100)
StringTable segue immediatamente l'intestazione in corrispondenza dell'offset specificato. Contiene un nome file binario UTF-8 con terminazione Null.
ProgramIdTable segue la tabella StringTable in corrispondenza dell'offset specificato. Ogni voce è di 24 byte: GUID RSDS (flusso di dati Rich Signature) di 16 byte + età di 4 byte + indice di stringa di 4 byte nella StringTable.
Il flusso di dati inizia da ProgramIdTableOffset + (ProgramIdCapacity * 24)e inizia con un SPT_OP_BINARY_ID codice operativo.
SPT Opcodes
Nelle descrizioni seguenti:
- RVA indica l'indirizzo virtuale relativo a 32 bit di un'istruzione nel binario, cioè il suo offset all'interno del modulo.
- LE indica l'ordine dei byte little-endian.
SPT_OP_REPEAT (0x82)
Ripetere il record successivo per il numero specificato di volte. Un conteggio ripetuto pari a 2 indica che sono presenti 3 record identici in totale. Il conteggio delle ripetizioni viene reimpostato dopo l'elaborazione.
Struttura: 1 byte: opcode 0x82. 1 byte: riempimento. 8 byte: numero di ripetizioni (uint64 LE)
SPT_OP_UNHALT_CYCLE
SPT_OP_RETIRE_INSTR, SPT_OP_RETIRE_BR_INSTR, SPT_OP_L1_ICACHE_MISS, SPT_OP_L1_DCACHE_MISSSPT_OP_ETW_INSTR (0x01, 0x02, 0x03, 0x04, 0x05, 0x41)
Struttura: 1 byte: opcode. 1 byte: numero di RVA (N). 4N byte: N RVA (uint32 LE ciascuno)
Ogni RVA rappresenta un numero di riscontri di esempio IP = 1 + numero di ripetizioni.
SPT_OP_LBR (0x10)
Struttura: 1 byte: opcode 0x10. 1 byte: numero di eventi (N). 8N byte: N coppie LBR, ogni coppia è composta da: 4 byte: verso RVA (uint32 LE), 4 byte: da RVA (uint32 LE)
Ogni coppia rappresenta un arco di ramo con numero di passaggi = 1 + numero di ripetizioni.
SPT_OP_ETW_CALLSTACK (0x42)
Struttura: 1 byte: opcode 0x42. 1 byte: numero di RVA (N). 4N byte: N RVA (uint32 LE ciascuno, che rappresentano frame dello stack).
Quando:
- N = 2: due RVA formano un singolo arco dello stack (RVA[0], RVA[1])
- N > 2: crea N-1 archi a partire da coppie consecutive: (RVA[0]->RVA[1]), (RVA[1]->RVA[2]), ..., (RVA[N-2]->RVA[N-1]) Ogni serie, che si tratti di un singolo arco o di coppie consecutive, ha un conteggio dei riscontri = 1 + numero di ripetizioni.
SPT_OP_BINARY_ID (0x81)
Layout: 1 byte: opcode 0x81. 1 byte: riempimento. 2 byte: ID del programma (uint16 LE). 4 byte: lunghezza totale dei dati in questo segmento (uint32 LE).
Contrassegna l'inizio dei record di dati per un file binario specifico specificato da un ID di indice. L'ID di indice rimanda alla RSDSKey e alla tabella di stringhe del nome binario nell'intestazione SPT.
La lunghezza dei dati include il campo di lunghezza stesso, di 4 byte. Questo codice operativo può verificarsi più volte in un flusso di dati.
Vedere anche
Tutorial: Usa l'ottimizzazione guidata dal profilo di esempio (SPGO) per migliorare le prestazioni
SPDConvert
SPDDump
SPTAggregate