Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
SPTDump é uma ferramenta de linha de comandos para inspecionar ficheiros Sample Profile Trace (SPT) utilizados em fluxos de trabalho de Sample Profile-Guided Optimization (SPGO). Use-o para visualizar metadados SPT e dados de amostra. Valide o conteúdo dos traços antes da conversão para SPD e resolva problemas como incompatibilidades de versões SPD.
Um ficheiro SPT contém eventos brutos de desempenho de hardware recolhidos de uma carga de trabalho de aplicação.
Syntax
SPTDump[opções] sptfile
Parâmetros
Opções
Especifique as seguintes opções para SPTDump:
- /all Produz o ficheiro SPT inteiro. Esta é a opção predefinida.
- /header Apresenta o cabeçalho do ficheiro SPT.
- /progid Apresenta os identificadores do programa (GUID e idade para cada binário).
- /strtab Mostra a tabela de cadeias de caracteres.
- /event Produz eventos de exemplo.
- /ajuda Mostre informações de ajuda.
sptfile
O caminho para o ficheiro SPT a inspecionar.
Remarks
Note
Inicie esta ferramenta a partir de um prompt de comandos do Visual Studio para programadores.
Use SPTDump para inspecionar o conteúdo de um ficheiro Sample Profile Trace (SPT).
O SPTAggregate produz ficheiros SPT a partir dos registos de rastreio de eventos ETL recolhidos por xperf. Importa ficheiros SPT para um ficheiro SPD (Sample Profile Database) usando SPDConvert.
Para diagnosticar um erro de "versão SPD incompatível", use /progid para mostrar o GUID e a idade de cada binário no ficheiro SPT, e depois comparar esses valores com o ficheiro SPD usando SPDDump /header.
Example
Este exemplo gera o conteúdo completo de um ficheiro SPT:
SPTDump sample.spt
Este exemplo fornece apenas os IDs de programa (GUID e idade) para binários num ficheiro SPT:
SPTDump /progid sample.spt
Formato do cabeçalho SPT
O ficheiro SPT é um formato binário com um cabeçalho de 32 bytes, tabela de strings, tabela ID do programa e fluxo de dados de eventos de exemplo. Este documento descreve a versão 1 do formato. O campo de versão atualiza-se se o layout mudar no futuro.
O cabeçalho SPT tem 32 bytes:
-
[0x00-0x03]Signature (uint32 LE) = 0x5350543A ("SPT:") -
[0x04-0x07]Versão (uint32 LE) = 1 -
[0x08-0x0B]RawDataId (uint32 LE) = 0 (não utilizado/reservado) -
[0x0C-0x0F]TargetArch (uint32 LE) = 0 (não utilizado/reservado) -
[0x10-0x13]StringTableOffset (uint32 LE) = offset para tabela de cadeias binárias de nomes (tipicamente 0x20) -
[0x14-0x17]ProgramIdTableOffset (uint32 LE) = deslocamento da tabela RSDSKEY (tipicamente StringTableOffset+StringTableCapacity) -
[0x18-0x19]StringTableUsed (uint16 LE) = bytes utilizados na tabela de cadeias de caracteres -
[0x1A-0x1B]StringTableCapacity (uint16 LE) = bytes atribuídos na tabela de cadeias de caracteres (tipicamente 0x4000) -
[0x1C-0x1D]ProgramIdsUsed (uint16 LE) = número de IDs de programa (frequentemente apenas 1) -
[0x1E-0x1F]ProgramIdCapacity (uint16 LE) = capacidade em contagem (não bytes) para IDs de programa (tipicamente 0x100)
A StringTable surge imediatamente após o cabeçalho no deslocamento especificado. Contém um nome de ficheiro binário UTF-8 terminado por nulo.
O ProgramIdTable segue o StringTable no deslocamento especificado. Cada entrada tem 24 bytes: GUID de 16 bytes do fluxo de dados Rich Signature (RSDS) + 4 bytes de idade + 4 bytes de índice de cadeia na StringTable.
O fluxo de dados começa em ProgramIdTableOffset + (ProgramIdCapacity * 24), e começa com um SPT_OP_BINARY_ID opcode.
SPT Opcodes
Nas descrições seguintes:
- RVA significa o endereço virtual relativo de 32 bits de uma instrução num binário, isto é, o seu deslocamento no módulo.
- LE significa ordem dos bytes do menos significativo para o mais significativo.
SPT_OP_REPEAT (0x82)
Repita o próximo registo o número de vezes especificado. Uma contagem repetida de 2 significa que existem 3 registos idênticos no total. A contagem de repetições é reiniciada depois de a processar.
Estrutura: 1 byte: opcode 0x82. 1 byte: enchimento (padding). 8 bytes: contagem de repetições (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)
Estrutura: 1 byte: opcode. 1 byte: contagem de RVA (N). 4N bytes: N RVAs (uint32 LE cada)
Cada RVA representa uma contagem de ocorrências da amostra de IP = 1 + contagem de repetições.
SPT_OP_LBR (0x10)
Estrutura: 1 byte: código de operação 0x10. 1 byte: número de eventos (N). 8N bytes: N pares de LBR, cada par é composto por: 4 bytes: RVA de destino (uint32 LE), 4 bytes: RVA de origem (uint32 LE)
Cada par representa um arco de ramificação com número de ocorrências = 1 + contagem de repetições.
SPT_OP_ETW_CALLSTACK (0x42)
Formato: 1 byte: opcode 0x42. 1 byte: número de RVA (N). 4N bytes: N RVAs (uint32 LE cada, representando frames de pilha).
Quando:
- N = 2: Duas RVAs formam um único arco de pilha (RVA[0], RVA[1])
- N > 2: Cria N-1 arcos a partir de pares consecutivos: (RVA[0]->RVA[1]), (RVA[1]->RVA[2]), ..., (RVA[N-2]->RVA[N-1]) Cada série, seja um único arco ou pares consecutivos, tem número de acertos = 1 + contagem de repetições.
SPT_OP_BINARY_ID (0x81)
Formato: 1 byte: código de operação 0x81. 1 byte: enchimento (padding). 2 bytes: ID do programa (uint16 LE). 4 bytes: comprimento total dos dados neste segmento (uint32 LE).
Marca o início dos registos de dados para um binário específico especificado por um ID de índice. O ID do índice remete para a RSDSKey e para a tabela de cadeias de caracteres dos nomes binários no cabeçalho SPT.
O comprimento dos dados inclui o próprio campo de tamanho de 4 bytes. Este opcode pode ocorrer várias vezes num fluxo de dados.
Ver também
Tutorial: Usar a Otimização Guiada por Perfis de Amostragem (SPGO) para melhorar o desempenho
SPDConvert
SPDDump
SPTAggregate