SPTDump

SPTDump es una herramienta de línea de comandos para inspeccionar archivos de traza de perfiles de muestreo (SPT) utilizados en flujos de trabajo de optimización guiada por perfiles de muestreo (SPGO). Úselo para ver los metadatos de SPT y los datos de ejemplo. Valide el contenido del seguimiento antes de la conversión a SPD y solucione problemas como errores de coincidencia de versiones de SPD.

Un archivo SPT contiene eventos de muestreo de rendimiento de hardware sin procesar recopilados a partir de la carga de trabajo de una aplicación.

Syntax

SPTDump [opciones] sptfile

Parámetros

Opciones
Especifique las siguientes opciones para SPTDump:

  • /todo Genera todo el archivo SPT. Esta opción es la predeterminada.
  • /header Genera el encabezado de archivo SPT.
  • /progid Identificadores de programa de salida (GUID y antigüedad para cada binario).
  • /strtab Genera la tabla de cadenas.
  • /event Eventos de ejemplo de salida.
  • /Ayuda Mostrar información de ayuda.

sptfile
Ruta de acceso al archivo SPT que se va a inspeccionar.

Observaciones

Note

Inicie esta herramienta desde un símbolo del sistema para desarrolladores de Visual Studio.

Use SPTDump para inspeccionar el contenido de un archivo de seguimiento de perfil de ejemplo (SPT). SPTAggregate genera archivos SPT a partir de registros de seguimiento de eventos ETL recopilados por xperf. Importe archivos SPT en un archivo SPD (base de datos de perfil de ejemplo) mediante SPDConvert.

Para diagnosticar un error "versión incompatible de SPD", use /progid para mostrar el GUID y la antigüedad de cada binario en el archivo SPT y, a continuación, comparar esos valores con el archivo SPD mediante SPDDump /header.

Example

En este ejemplo se genera el contenido completo de un archivo SPT:

SPTDump sample.spt

En este ejemplo solo se generan los identificadores de programa (GUID y edad) para los archivos binarios de un archivo SPT:

SPTDump /progid sample.spt

Formato de encabezado SPT

El archivo SPT es un formato binario con un encabezado de 32 bytes, una tabla de cadenas, una tabla de id. de programa y un flujo de datos de eventos de ejemplo. En este documento se describe la versión 1 del formato. El campo de versión se actualiza si el diseño cambia en el futuro.

El encabezado SPT es de 32 bytes:

  • [0x00-0x03] Signatura (uint32 LE) = 0x5350543A ("SPT:")
  • [0x04-0x07] Versión (uint32 LE) = 1
  • [0x08-0x0B] RawDataId (uint32 LE) = 0 (sin usar/reservado)
  • [0x0C-0x0F] TargetArch (uint32 LE) = 0 (sin usar/reservado)
  • [0x10-0x13] StringTableOffset (uint32 LE) = desplazamiento de la tabla de cadenas de nombres binarios (normalmente 0x20)
  • [0x14-0x17] ProgramIdTableOffset (uint32 LE) = desplazamiento de la tabla RSDSKEY (normalmente StringTableOffset+StringTableCapacity)
  • [0x18-0x19] StringTableUsed (uint16 LE) = bytes usados en la tabla de cadenas
  • [0x1A-0x1B] StringTableCapacity (uint16 LE) = bytes asignados en la tabla de cadenas (normalmente 0x4000)
  • [0x1C-0x1D] ProgramIdsUsed (uint16 LE) = número de identificadores de programa (a menudo solo 1)
  • [0x1E-0x1F] ProgramIdCapacity (uint16 LE) = capacidad medida en número de elementos (no en bytes) para identificadores de programa (normalmente 0x100)

StringTable sigue inmediatamente al encabezado en el desplazamiento especificado. Contiene un nombre de archivo binario UTF-8 terminado en null.

La tabla ProgramIdTable sigue a StringTable en el desplazamiento especificado. Cada entrada es de 24 bytes: GUID de 16 bytes del flujo de datos RSDS de firma enriquecida + age de 4 bytes + índice de cadena de 4 bytes en StringTable.

El flujo de datos comienza en ProgramIdTableOffset + (ProgramIdCapacity * 24)y comienza con un SPT_OP_BINARY_ID código de operación.

Códigos de operación de SPT

En las descripciones siguientes:

  • RVA significa la dirección virtual relativa de 32 bits de una instrucción dentro del binario; es decir, su desplazamiento dentro del módulo.
  • LE significa orden de bytes de extremo pequeño.

SPT_OP_REPEAT (0x82)
Repita el siguiente registro el número de veces especificado. Un recuento de repeticiones de 2 significa que hay 3 registros idénticos en total. El recuento de repeticiones se restablece después de procesarlo.
Formato: 1 byte: código de operación 0x82. 1 byte: relleno. 8 bytes: recuento de repeticiones (uint64 LE)

SPT_OP_UNHALT_CYCLE, SPT_OP_RETIRE_INSTR, SPT_OP_RETIRE_BR_INSTR, SPT_OP_L1_ICACHE_MISSSPT_OP_L1_DCACHE_MISSSPT_OP_ETW_INSTR (0x01, 0x02, 0x03, 0x04, 0x05, 0x41)
Formato: 1 byte: código de operación. 1 byte: recuento de RVA (N). 4N bytes: N RVAs (uint32 LE cada uno)
Cada RVA representa un recuento de llamadas de ejemplo de IP = 1 + recuento de repeticiones.

SPT_OP_LBR (0x10)
Estructura: 1 byte: código de operación 0x10. 1 byte: recuento de eventos (N). 8N bytes: N pares LBR, cada par es: 4 bytes: a RVA (uint32 LE), 4 bytes: de RVA (uint32 LE)
Cada par representa un arco de rama con recuento de aciertos = 1 + recuento de repeticiones.

SPT_OP_ETW_CALLSTACK (0x42)
Formato: 1 byte: código de operación 0x42. 1 byte: recuento de RVA (N). 4N bytes: N RVAs (uint32 LE cada una, que representa marcos de pila).
Cuándo:

  • N = 2: Dos RVAs forman un solo arco de pila (RVA[0], RVA[1])
  • N > 2: Crea arcos N-1 a partir de pares consecutivos: (RVA[0]->RVA[1]), (RVA[1]->RVA[2]), ..., (RVA[N-2]->RVA[N-1]) Cada serie, ya sea un solo arco o pares consecutivos, tiene recuento de aciertos = 1 + recuento de repeticiones.

SPT_OP_BINARY_ID (0x81)
Formato: 1 byte: código de operación 0x81. 1 byte: relleno. 2 bytes: id. de programa (uint16 LE). 4 bytes: longitud total de datos en este segmento (uint32 LE).
Marca el inicio de los registros de datos para un binario específico especificado por un identificador de índice. El identificador de índice remite a la RSDSKey y a la tabla de cadenas con nombres binarios del encabezado SPT.
La longitud de datos incluye el propio campo de longitud de 4 bytes. Este código de operación puede producirse varias veces en un flujo de datos.

Consulte también

Tutorial: Usar la optimización guiada por perfiles de muestra (SPGO) para mejorar el rendimiento
SPDConvert
SPDDump
SPTAggregate