SPTDump

SPTDump egy parancssori eszköz a mintaprofilkövetési (SPT) fájlok vizsgálatához, amelyeket a mintaprofil-vezérelt optimalizálási (SPGO) munkafolyamatokban használnak. Használatával megtekintheti az SPT metaadatait és a mintaadatokat. Ellenőrizze a nyomkövetési tartalmakat az SPD-re való átalakítás előtt, és elhárítsa az olyan problémákat, mint az SPD-verzióeltérések.

Az SPT-fájlok nyers hardverteljesítmény-mintaeseményeket tartalmaznak, amelyeket egy alkalmazás számítási feladatából gyűjtenek össze.

Szemantika

SPTDump [beállítások] sptfile

Paraméterek

beállítások
A következő beállításokat adja meg a(z) SPTDump számára:

  • /all Kiírja a teljes SPT-fájlt. Ez az alapértelmezett beállítás.
  • /Fejléc Adja ki az SPT-fájlfejlécet.
  • /Progid Kimeneti programazonosítók (GUID és kor minden binárishoz).
  • /strtab Kiírja a karakterlánc-táblát.
  • /Esemény Kimeneti mintaesemények.
  • /segítség Súgóinformációk megjelenítése.

sptfile
A vizsgálandó SPT-fájl elérési útja.

Remarks

Note

Indítsa el ezt az eszközt egy Visual Studio fejlesztői parancssorból.

A mintaprofil-nyomkövetési (SPT-) fájl tartalmának vizsgálatára használható SPTDump . Az SPTAggregate SPT-fájlokat hoz létre az általuk gyűjtött ETL eseménykövetési xperfnaplókból. SPT-fájlokat importál egy SPD-fájlba (mintaprofil-adatbázisba) az SPDConvert használatával.

Az "SPD-verzió nem kompatibilis" hiba diagnosztizálásához használja /progid az SPT-fájlban lévő egyes bináris fájlok GUID-azonosítójának és korának megjelenítéséhez, majd hasonlítsa össze ezeket az értékeket az SPD-fájllal a használatával SPDDump /header.

Example

Ez a példa egy SPT-fájl teljes tartalmát adja ki:

SPTDump sample.spt

Ez a példa csak az SPT-fájl bináris fájljaihoz tartozó programazonosítókat (GUID és kor) adja ki:

SPTDump /progid sample.spt

SPT-fejlécformátum

Az SPT-fájl egy bináris formátum, amely 32 bájtos fejlécet, sztringtáblát, programazonosító táblát és mintaesemény-adatfolyamot tartalmaz. Ez a dokumentum a formátum 1. verzióját ismerteti. A verzió mező frissül, ha az elrendezés a jövőben megváltozik.

Az SPT-fejléc 32 bájt:

  • [0x00-0x03] Aláírás (uint32 LE) = 0x5350543A ("SPT:")
  • [0x04-0x07] Verzió (uint32 LE) = 1
  • [0x08-0x0B] RawDataId (uint32 LE) = 0 (nem használt/fenntartott)
  • [0x0C-0x0F] TargetArch (uint32 LE) = 0 (nem használt/fenntartott)
  • [0x10-0x13] StringTableOffset (uint32 LE) = eltolás a bináris név karakterlánc-táblájához (általában 0x20)
  • [0x14-0x17] ProgramIdTableOffset (uint32 LE) = eltolás az RSDSKEY táblához (jellemzően StringTableOffset+StringTableCapacity)
  • [0x18-0x19] StringTableUsed (uint16 LE) = a sztringtáblában használt bájtok száma
  • [0x1A-0x1B] StringTableCapacity (uint16 LE) = a sztringtáblában lefoglalt bájtok (általában 0x4000)
  • [0x1C-0x1D] ProgramIdsUsed (uint16 LE) = a programazonosítók száma (gyakran csak 1)
  • [0x1E-0x1F] ProgramIdCapacity (uint16 LE) = a programazonosítók kapacitása darabszámban (nem bájtokban) (általában 0x100)

A StringTable azonnal követi a fejlécet a megadott eltolásnál. Nullával lezárt UTF-8 kódolású bináris fájlnevet tartalmaz.

A ProgramIdTable a megadott offsetnél a StringTable után következik. Minden bejegyzés 24 bájt: 16 bájtos Rich Signature Data Stream (RSDS) GUID + 4 bájtos age mező + 4 bájtos, a StringTable-be mutató karakterláncindex.

Az adatfolyam ekkor ProgramIdTableOffset + (ProgramIdCapacity * 24)kezdődik, és egy SPT_OP_BINARY_ID opcode-val kezdődik.

SPT műveleti kódok

Az alábbi leírásokban:

  • Az RVA azt jelenti, hogy egy utasítás 32 bites relatív virtuális címe a binárisban, vagyis eltolás a modulban.
  • A LE kis végű bájtsorrendet jelent.

SPT_OP_REPEAT (0x82)
Ismételje meg a következő rekordot a megadott számú alkalommal. A 2 ismétlési szám azt jelenti, hogy összesen 3 azonos rekord van. Az ismétlésszám a feldolgozása után visszaáll.
Elrendezés: 1 bájt: opcode 0x82. 1 bájt: kitöltés. 8 bájt: ismétlések száma (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)
Elrendezés: 1 bájt: műveleti kód. 1 bájt: RVA-szám (N). 4N bájt: N RVA (uint32 LE mindegyik)
Minden RVA egy IP-minta találatszámát jelenti, ahol a találatszám = 1 + ismétlésszám.

SPT_OP_LBR (0x10)
Elrendezés: 1 bájt: opcode 0x10. 1 bájt: eseményszám (N). 8N bájt: N LBR-pár, mindegyik pár a következőkből áll: 4 bájt: cél-RVA (uint32 LE), 4 bájt: forrás-RVA (uint32 LE)
Minden pár egy elágazási ívet jelöl, amelynek találatszáma = 1 + ismétlésszám.

SPT_OP_ETW_CALLSTACK (0x42)
Elrendezés: 1 bájt: opcode 0x42. 1 bájt: RVA-szám (N). 4N bájt: N RVA(uint32 LE mindegyik, veremkereteket jelöl).
Időpont:

  • N = 2: Két RVA egyetlen veremívet alkot (RVA[0], RVA[1])
  • N > 2: N-1 íveket hoz létre egymást követő párokból: (RVA[0]->RVA[1]), (RVA[1]->RVA[2]), ..., (RVA[N-2]->RVA[N-1]) Minden sorozat, akár egyetlen ívről, akár egymást követő párról van szó, a találatok száma = 1 + ismétlésszám.

SPT_OP_BINARY_ID (0x81)
Elrendezés: 1 bájt: opcode 0x81. 1 bájt: kitöltés. 2 bájt: programazonosító (uint16 LE). 4 bájt: teljes adathossz ebben a szegmensben (uint32 LE).
Az indexazonosító által megadott adott bináris adatrekordok kezdetét jelöli. Az indexazonosító visszautal az SPT-fejlécben található RSDSKey-re és a binárisnév-karakterlánctáblára.
Az adathossz magában foglalja magát a 4 bájt hosszúságú mezőt. Ez az opcode többször is előfordulhat egy adatfolyamban.

Lásd még

Oktatóanyag: A mintavételes profilvezérelt optimalizálás (SPGO) használata a teljesítmény javításához
SPDConvert
SPDDump
SPTAggregate