Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
SPTDump é uma ferramenta de linha de comando para inspecionar arquivos SPT (rastro de perfil por amostragem) usados em fluxos de trabalho de SPGO (otimização guiada por perfil por amostragem). Use-o para exibir metadados SPT e dados de exemplo. Valide o conteúdo de rastreamento antes da conversão para SPD e solucione problemas como incompatibilidades de versão do SPD.
Um arquivo SPT contém eventos brutos de amostragem de desempenho de hardware coletados de uma carga de trabalho de aplicativo.
Sintaxe
SPTDump[opções] sptfile
Parâmetros
Opções
Especifique as seguintes opções para SPTDump:
- /all Exibe todo o arquivo SPT. Esta opção é a predefinição.
- /header Exiba o cabeçalho do arquivo SPT.
- /Progid IDs do programa de saída (GUID e idade para cada binário).
- /strtab Exibe a tabela de strings.
- /Evento Eventos de exemplo de saída.
- /Ajuda Exibir informações de ajuda.
sptfile
O caminho para o arquivo SPT a ser inspecionado.
Observações
Note
Inicie essa ferramenta em um prompt de comando do desenvolvedor Visual Studio.
Use SPTDump para inspecionar o conteúdo de um arquivo de Rastreamento de Perfil de Amostra (SPT).
SPTAggregate produz arquivos SPT a partir de logs de rastreamento de eventos de ETL coletados por xperf. Importe arquivos SPT para um arquivo SPD (Banco de Dados de Perfil de Exemplo) usando SPDConvert.
Para diagnosticar um erro "Incompatível com a versão do SPD", use /progid para exibir o GUID e a idade de cada binário no arquivo SPT e, em seguida, compare esses valores com o arquivo SPD usando SPDDump /header.
Example
Este exemplo gera o conteúdo completo de um arquivo SPT:
SPTDump sample.spt
Este exemplo gera apenas as IDs do programa (GUID e idade) para binários em um arquivo SPT:
SPTDump /progid sample.spt
Formato de cabeçalho SPT
O arquivo SPT é um formato binário com um cabeçalho de 32 bytes, uma tabela de cadeia de caracteres, uma tabela de ID do programa e um fluxo de dados de evento de exemplo. Este documento descreve a versão 1 do formato. O campo de versão será atualizado se o layout for alterado no futuro.
O cabeçalho SPT é de 32 bytes:
-
[0x00-0x03]Assinatura (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) = deslocamento para a tabela de strings de nomes binários (normalmente 0x20) -
[0x14-0x17]ProgramIdTableOffset (uint32 LE) = deslocamento até a tabela RSDSKEY (normalmente StringTableOffset+StringTableCapacity) -
[0x18-0x19]StringTableUsed (uint16 LE) = bytes usados na tabela de cadeia de caracteres -
[0x1A-0x1B]StringTableCapacity (uint16 LE) = bytes alocados na tabela de cadeia de caracteres (normalmente 0x4000) -
[0x1C-0x1D]ProgramIdsUsed (uint16 LE) = número de IDs do programa (geralmente apenas 1) -
[0x1E-0x1F]ProgramIdCapacity (uint16 LE) = capacidade em contagem (não bytes) para IDs do programa (normalmente 0x100)
A tabela de strings fica imediatamente após o cabeçalho, no deslocamento especificado. Ele contém um nome de arquivo binário UTF-8 encerrado em nulo.
A ProgramIdTable vem após a StringTable no deslocamento especificado. Cada entrada é de 24 bytes: GUID RSDS (Rich Signature Data Stream) de 16 bytes + idade de 4 bytes + índice de cadeia de caracteres de 4 bytes em StringTable.
O fluxo de dados começa em ProgramIdTableOffset + (ProgramIdCapacity * 24), e começa com um SPT_OP_BINARY_ID opcode.
SPT Opcodes
Nas seguintes descrições:
- RVA significa o endereço virtual relativo de 32 bits de uma instrução no binário, ou seja, seu deslocamento no módulo.
- LE significa ordem de bytes little-endian.
SPT_OP_REPEAT (0x82)
Repita o próximo registro o número de vezes especificado. Uma contagem de repetição de 2 significa que há três registros idênticos no total. A contagem de repetição é redefinida após ser processada.
Estrutura: 1 byte: opcode 0x82. 1 byte: preenchimento. 8 bytes: contagem de repetição (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 um)
Cada RVA representa uma contagem de acertos da amostra de IP = 1 + contagem de repetições.
SPT_OP_LBR (0x10)
Estrutura: 1 byte: opcode 0x10. 1 byte: contagem de eventos (N). 8N bytes: N pares LBR, cada par consiste em: 4 bytes: To RVA (uint32 LE), 4 bytes: From RVA (uint32 LE)
Cada par representa um arco de ramificação com contagem de ocorrências = 1 + contagem de repetição.
SPT_OP_ETW_CALLSTACK (0x42)
Formato: 1 byte: opcode 0x42. 1 byte: contagem de RVAs (N). 4N bytes: N RVAs (uint32 LE cada um, representando frames da pilha).
Quando:
- N = 2: Dois RVAs formam um único arco de pilha (RVA[0], RVA[1])
- N > 2: Cria arcos N-1 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 contagem de ocorrências = 1 + contagem de repetição.
SPT_OP_BINARY_ID (0x81)
Formato: 1 byte: opcode 0x81. 1 byte: preenchimento. 2 bytes: ID do programa (uint16 LE). 4 bytes: tamanho total de dados neste segmento (uint32 LE).
Marca o início dos registros de dados para um binário específico especificado por uma ID de índice. O identificador do índice remete à RSDSKey e à tabela de strings de nomes binários no cabeçalho SPT.
O comprimento dos dados inclui o próprio campo de comprimento de 4 bytes. Esse opcode pode ocorrer várias vezes em um fluxo de dados.
Consulte também
Tutorial: usar a SPGO (Otimização Guiada por Perfil de Amostra) para melhorar o desempenho
SPDConvert
SPDDump
SPTAggregate