SPTDump

SPTDump is een opdrachtregelprogramma voor het inspecteren van SPT-bestanden (Sample Profile Trace) die worden gebruikt in SPGO-werkstromen (Sample Profile-Guided Optimization). Gebruik deze om SPT-metagegevens en voorbeeldgegevens weer te geven. Valideer traceringsinhoud vóór conversie naar SPD en los problemen op, zoals niet-overeenkomende SPD-versies.

Een SPT-bestand bevat onbewerkte voorbeeldgebeurtenissen voor hardwareprestaties die zijn verzameld uit een toepassingsworkload.

Syntax

SPTDump [opties] sptfile

Parameters

Opties
Geef de volgende opties op voor SPTDump:

  • /Alle Voer het hele SPT-bestand uit. Dit is de standaardoptie.
  • /Header Voer de SPT-bestandsheader uit.
  • /Progid Uitvoerprogramma-id's (GUID en leeftijd voor elk binair bestand).
  • /strtab Voer de tekenreekstabel uit.
  • /Gebeurtenis Voorbeeldgebeurtenissen uitvoeren.
  • /Help Help-informatie weergeven.

sptfile
Het pad naar het SPT-bestand dat moet worden gecontroleerd.

Opmerkingen

Note

Start dit hulpprogramma vanaf een Visual Studio opdrachtprompt voor ontwikkelaars.

Hiermee SPTDump inspecteert u de inhoud van een SPT-bestand (Sample Profile Trace). SPTAggregate genereert SPT-bestanden uit ETL-logboeken met gebeurtenistraceringen die zijn verzameld door xperf. Importeer SPT-bestanden in een SPD-bestand (Sample Profile Database) met behulp van SPDConvert.

Als u een fout met de melding 'SPD-versie incompatibel' wilt diagnosticeren, gebruikt u /progid om de GUID en leeftijd van elk binair bestand in het SPT-bestand weer te geven en vergelijkt u die waarden vervolgens met het SPD-bestand met behulp van SPDDump /header.

Example

In dit voorbeeld wordt de volledige inhoud van een SPT-bestand uitgevoerd:

SPTDump sample.spt

In dit voorbeeld worden alleen de programma-id's (GUID en leeftijd) uitgevoerd voor binaire bestanden in een SPT-bestand:

SPTDump /progid sample.spt

SPT-headerindeling

Het SPT-bestand is een binaire indeling met een header van 32 byte, een stringtabel, een programma-id-tabel en een gegevensstroom van samplegebeurtenissen. In dit document wordt versie 1 van de indeling beschreven. Het versieveld wordt bijgewerkt als de indeling in de toekomst verandert.

De SPT-koptekst is 32 bytes:

  • [0x00-0x03] Handtekening (uint32 LE) = 0x5350543A ("SPT:")
  • [0x04-0x07] Versie (uint32 LE) = 1
  • [0x08-0x0B] RawDataId (uint32 LE) = 0 (ongebruikt/gereserveerd)
  • [0x0C-0x0F] TargetArch (uint32 LE) = 0 (ongebruikt/gereserveerd)
  • [0x10-0x13] StringTableOffset (uint32 LE) = verschuiving naar tabel met binaire naamtekenreeks (meestal 0x20)
  • [0x14-0x17] ProgramIdTableOffset (uint32 LE) = offset van de RSDSKEY-tabel (meestal StringTableOffset+StringTableCapacity)
  • [0x18-0x19] StringTableUsed (uint16 LE) = aantal gebruikte bytes in de stringtabel
  • [0x1A-0x1B] StringTableCapacity (uint16 LE) = bytes gereserveerd voor de stringtabel (meestal 0x4000)
  • [0x1C-0x1D] ProgramIdsUsed (uint16 LE) = aantal programma-id's (vaak slechts 1)
  • [0x1E-0x1F] ProgramIdCapacity (uint16 LE) = capaciteit in aantal (geen bytes) voor programma-id's (meestal 0x100)

De StringTable volgt direct op de header bij de opgegeven offset. Het bevat een door null beëindigde UTF-8 binaire bestandsnaam.

De ProgramIdTable volgt op de StringTable bij de opgegeven offset. Elke vermelding is 24 bytes: 16-byte Rich Signature Data Stream (RSDS)-GUID + 4-byte ouderdom + 4-byte stringindex naar StringTable.

De gegevensstroom begint bij ProgramIdTableOffset + (ProgramIdCapacity * 24)en begint met een SPT_OP_BINARY_ID opcode.

SPT Opcodes

In de volgende beschrijvingen:

  • RVA betekent het 32-bits relatieve virtuele adres van een instructie in het binaire bestand, dat wil zeggen dat het in de module wordt verschoven.
  • LE betekent de little-endian-bytevolgorde.

SPT_OP_REPEAT (0x82)
Herhaal het volgende record het opgegeven aantal keer. Een herhalingsaantal van 2 betekent dat er in totaal 3 identieke records zijn. Het aantal herhalingen wordt opnieuw ingesteld na verwerking.
Indeling: 1 byte: opcode 0x82. 1 byte: opvulling. 8 bytes: aantal herhalingen (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)
Indeling: 1 byte: opcode. 1 byte: aantal RVA's (N). 4N bytes: N RVAs (uint32 LE elk)
Elke RVA vertegenwoordigt een IP-sampletrefferaantal = 1 + herhalingsaantal.

SPT_OP_LBR (0x10)
Indeling: 1 byte: opcode 0x10. 1 byte: aantal gebeurtenissen (N). 8N bytes: N LBR-paren, elk paar bestaat uit: 4 bytes: Naar RVA (uint32 LE), 4 bytes: Van RVA (uint32 LE)
Elk paar vertegenwoordigt een vertakkingsboog met het aantal treffers = 1 + aantal herhalingen.

SPT_OP_ETW_CALLSTACK (0x42)
Indeling: 1 byte: opcode 0x42. 1 byte: aantal RVA's (N). 4N bytes: N RVA's (uint32 LE elk, die stackframes vertegenwoordigen).
Wanneer:

  • N = 2: Twee RVA's vormen één stapelboog (RVA[0], RVA[1])
  • N > 2: Maakt N-1 boogs van opeenvolgende paren: (RVA[0]->RVA[1]), (RVA[1]->RVA[2]), ..., (RVA[N-2]->RVA[N-1]) Elke reeks, ongeacht of het een enkele boog of opeenvolgende paren is, heeft hit count = 1 + repeat count.

SPT_OP_BINARY_ID (0x81)
Indeling: 1 byte: opcode 0x81. 1 byte: opvulling. 2 bytes: programma-id (uint16 LE). 4 bytes: totale gegevenslengte in dit segment (uint32 LE).
Hiermee markeert u het begin van gegevensrecords voor een specifiek binair bestand dat is opgegeven door een index-id. De index-ID verwijst terug naar RSDSKey en de tekenreekstabel met binaire namen in de SPT-header.
De gegevenslengte omvat het lengteveld van 4 bytes zelf. Deze opcode kan meerdere keren voorkomen in een gegevensstroom.

Zie ook

Zelfstudie: Voorbeeld Profile-Guided Optimization (SPGO) gebruiken om de prestaties te verbeteren
SPDConvert
SPDDump
SPTAggregate