Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
SPTDump adalah alat baris perintah untuk memeriksa file Sample Profile Trace (SPT) yang digunakan dalam alur kerja Sample Profile-Guided Optimization (SPGO). Gunakan untuk melihat metadata SPT dan data sampel. Validasi konten pelacakan sebelum konversi ke SPD, dan pecahkan masalah seperti ketidakcocokan versi SPD.
File SPT berisi peristiwa sampel performa perangkat keras mentah yang dikumpulkan dari beban kerja aplikasi.
Syntax
SPTDump[opsi] sptfile
Parameter-parameternya
opsi
Tentukan opsi berikut untuk SPTDump:
- /Semua Keluarkan seluruh file SPT. Ini adalah opsi default.
- /header Menampilkan header berkas SPT.
- /progid ID program output (GUID dan usia untuk setiap biner).
- /strtab Keluarkan tabel string.
- /event Keluarkan contoh event.
- /Tolong Tampilkan informasi bantuan.
sptfile
Path ke file SPT yang akan diperiksa.
Komentar
Note
Mulai alat ini dari prompt perintah pengembang Visual Studio.
Gunakan SPTDump untuk memeriksa konten file Sample Profile Trace (SPT).
SPTAggregate menghasilkan file SPT dari log jejak peristiwa ETL yang dikumpulkan oleh xperf. Impor file SPT ke dalam file SPD (Database Profil Sampel) dengan menggunakan SPDConvert.
Untuk mendiagnosis kesalahan "versi SPD tidak kompatibel", gunakan /progid untuk menampilkan GUID dan usia untuk setiap biner dalam file SPT, lalu bandingkan nilai tersebut dengan file SPD dengan menggunakan SPDDump /header.
Example
Contoh ini menghasilkan konten lengkap file SPT:
SPTDump sample.spt
Contoh ini hanya menghasilkan ID program (GUID dan usia) untuk biner dalam file SPT:
SPTDump /progid sample.spt
Format header SPT
File SPT adalah format biner dengan header 32-byte, tabel string, tabel ID program, dan aliran data peristiwa sampel. Dokumen ini menjelaskan format versi 1. Bidang versi diperbarui jika tata letak berubah di masa mendatang.
Header SPT adalah 32 byte:
-
[0x00-0x03]Tanda tangan (uint32 LE) = 0x5350543A ("SPT:") -
[0x04-0x07]Versi (uint32 LE) = 1 -
[0x08-0x0B]RawDataId (uint32 LE) = 0 (tidak digunakan/dicadangkan) -
[0x0C-0x0F]TargetArch (uint32 LE) = 0 (tidak digunakan/dicadangkan) -
[0x10-0x13]StringTableOffset (uint32 LE) = offset untuk tabel string nama biner (biasanya 0x20) -
[0x14-0x17]ProgramIdTableOffset (uint32 LE) = offset ke tabel RSDSKEY (biasanya StringTableOffset+StringTableCapacity) -
[0x18-0x19]StringTableUsed (uint16 LE) = jumlah byte yang digunakan dalam tabel string -
[0x1A-0x1B]StringTableCapacity (uint16 LE) = byte yang dialokasikan dalam tabel string (biasanya 0x4000) -
[0x1C-0x1D]ProgramIdsUsed (uint16 LE) = jumlah ID program (seringkali hanya 1) -
[0x1E-0x1F]ProgramIdCapacity (uint16 LE) = kapasitas dalam hitungan (bukan byte) untuk ID program (biasanya 0x100)
StringTable segera mengikuti header pada offset yang ditentukan. Ini berisi nama file biner UTF-8 yang diakhiri dengan null.
ProgramIdTable mengikuti StringTable pada offset yang ditentukan. Setiap entri berukuran 24 byte: GUID Rich Signature Data Stream (RSDS) 16 byte + age 4 byte + indeks string 4 byte ke StringTable.
Aliran data dimulai di ProgramIdTableOffset + (ProgramIdCapacity * 24), dan dimulai dengan SPT_OP_BINARY_ID opcode.
SPT Opcodes
Dalam deskripsi berikut:
- RVA berarti alamat virtual relatif 32-bit dari sebuah instruksi di dalam biner, yakni offset-nya dalam modul.
- LE berarti urutan bita little-endian.
SPT_OP_REPEAT (0x82)
Ulangi rekaman berikutnya untuk jumlah waktu yang ditentukan. Jumlah pengulangan 2 berarti total ada 3 rekaman yang identik. Jumlah pengulangan diatur ulang setelah diproses.
Susunan: 1 byte: opcode 0x82. 1 byte: padding. 8 bita: jumlah pengulangan (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)
Tata letak: 1 byte: opcode. 1 byte: Jumlah RVA (N). 4N byte: N RVA (masing-masing berupa uint32 LE)
Setiap RVA mewakili jumlah hit sampel IP, yaitu 1 + jumlah pengulangan.
SPT_OP_LBR (0x10)
Tata letak: 1 byte: 0x10 opcode. 1 byte: jumlah kejadian (N). 8N byte: N pasangan LBR, setiap pasangan terdiri dari: 4 byte: RVA tujuan (uint32 LE), 4 byte: RVA asal (uint32 LE)
Setiap pasangan mewakili busur cabang dengan jumlah hit = 1 + jumlah pengulangan.
SPT_OP_ETW_CALLSTACK (0x42)
Tata letak: 1 byte: opcode 0x42. 1 byte: Jumlah RVA (N). 4N byte: N RVA (masing-masing berupa uint32 LE, mewakili frame tumpukan).
Kapan:
- N = 2: Dua RVA membentuk busur tumpukan tunggal (RVA[0], RVA[1])
- N > 2: Membuat N-1 busur dari pasangan berurutan: (RVA[0]->RVA[1]), (RVA[1]->RVA[2]), ..., (RVA[N-2]->RVA[N-1]) Setiap rangkaian, baik berupa satu busur maupun pasangan berurutan, memiliki jumlah hit = 1 + jumlah pengulangan.
SPT_OP_BINARY_ID (0x81)
Tata letak: 1 byte: opcode 0x81. 1 byte: padding. 2 byte: ID program (uint16 LE). 4 byte: total panjang data dalam segmen ini (uint32 LE).
Menandai awal rekaman data untuk biner tertentu yang ditentukan oleh ID indeks. ID indeks mengacu kembali ke tabel string RSDSKey dan nama biner di header SPT.
Panjang data mencakup bidang panjang 4 byte itu sendiri. Opcode ini dapat terjadi beberapa kali dalam aliran data.
Baca juga
Tutorial: Menggunakan Sample Profile-Guided Optimization (SPGO) untuk meningkatkan performa
SPDConvert
SPDDump
SPTAggregate