SPTDump

SPTDump, Örnek Profil Yönlendirmeli İyileştirme (SPGO) iş akışlarında kullanılan Örnek Profil İzi (SPT) dosyalarını incelemeye yönelik bir komut satırı aracıdır. SPT meta verilerini ve örnek verileri görüntülemek için bunu kullanın. SPD'ye dönüştürmeden önce izleme içeriğini doğrulayın ve SPD sürüm uyuşmazlıkları gibi sorunları giderin.

SPT dosyası, bir uygulama iş yükünden toplanan ham donanım performansı örnek olaylarını içerir.

Syntax

SPTDump [seçenekler] sptfile

Parametreler

Seçenekler
Aşağıdaki seçenekleri SPTDump için belirtin:

  • /all Tüm SPT dosyasını çıkarır. Bu seçenek varsayılandır.
  • /Üstbilgi SPT dosya üst bilgisinin çıktısını alır.
  • /progid Program kimliklerinin çıktısını verir (her ikili dosya için GUID ve yaş).
  • /strtab Dize tablosunu çıktı olarak verin.
  • /Olay Çıkış örnek olayları.
  • /Yardım Yardım bilgilerini görüntüleme.

sptfile
İncelenecek SPT dosyasının yolu.

Remarks

Note

Bu aracı bir Visual Studio geliştirici komut isteminden başlatın.

Örnek Profil İzleme (SPT) dosyasının içeriğini incelemek için kullanın SPTDump . SPTAggregate , tarafından xperftoplanan ETL olay izleme günlüklerinden SPT dosyaları üretir. SPDConvert kullanarak SPT dosyalarını bir SPD dosyasına (Örnek Profil Veritabanı) aktarın.

"SPD version incompatible" hatasını tanılamak için, SPT dosyasındaki her ikili için GUID'yi ve yaşı görüntülemek üzere /progid komutunu kullanın ve ardından bu değerleri SPD dosyasıyla karşılaştırmak için SPDDump /header komutunu kullanın.

Example

Bu örnek, bir SPT dosyasının tam içeriğinin çıkışını oluşturur:

SPTDump sample.spt

Bu örnek, bir SPT dosyasındaki ikili dosyalar için yalnızca program kimliklerini (GUID ve yaş) oluşturur:

SPTDump /progid sample.spt

SPT üst bilgi biçimi

SPT dosyası, 32 baytlık üst bilgi, dize tablosu, program kimliği tablosu ve örnek olay veri akışı içeren ikili bir biçimdir. Bu belgede biçimin 1. sürümü açıklanmaktadır. Düzen gelecekte değişirse sürüm alanı güncelleştirilir.

SPT üst bilgisi 32 bayttır:

  • [0x00-0x03] signature (uint32 LE) = 0x5350543A ("SPT:")
  • [0x04-0x07] Sürüm (uint32 LE) = 1
  • [0x08-0x0B] RawDataId (uint32 LE) = 0 (kullanılmıyor/ayrılmıştır)
  • [0x0C-0x0F] TargetArch (uint32 LE) = 0 (kullanılmıyor/ayrılmıştır)
  • [0x10-0x13] StringTableOffset (uint32 LE) = ikili ad dizesi tablosuna uzaklık (genellikle 0x20)
  • [0x14-0x17] ProgramIdTableOffset (uint32 LE) = RSDSKEY tablosuna uzaklık (genellikle StringTableOffset+StringTableCapacity)
  • [0x18-0x19] StringTableUsed (uint16 LE) = dize tablosunda kullanılan bayt sayısı
  • [0x1A-0x1B] StringTableCapacity (uint16 LE) = dize tablosunda ayrılan bayt sayısı (genellikle 0x4000)
  • [0x1C-0x1D] ProgramIdsUsed (uint16 LE) = program kimliklerinin sayısı (genellikle yalnızca 1)
  • [0x1E-0x1F] ProgramIdCapacity (uint16 LE) = program kimlikleri için sayı (bayt değil) cinsinden kapasite (genellikle 0x100)

StringTable, belirtilen uzaklıkta üst bilgiyi hemen izler. Null olarak sonlandırılan UTF-8 ikili dosya adını içerir.

ProgramIdTable, belirtilen uzaklıkta StringTable'a uyar. Her giriş 24 bayttır: 16 baytlık Rich Signature Data Stream (RSDS) GUID'si + 4 baytlık yaş + StringTable içindeki 4 baytlık dize dizini.

Veri akışı adresinden ProgramIdTableOffset + (ProgramIdCapacity * 24)başlar ve bir SPT_OP_BINARY_ID opcode ile başlar.

SPT İşlem Kodları

Aşağıdaki açıklamalarda:

  • RVA, ikilideki bir yönergenin 32 bitlik göreli sanal adresi, yani modül içindeki ofseti anlamına gelir.
  • LE, küçük endian bayt sırası anlamına gelir.

SPT_OP_REPEAT (0x82)
Sonraki kaydı belirtilen sayıda yineleyin. 2 yineleme sayısı, toplamda 3 özdeş kayıt olduğu anlamına gelir. Yineleme sayısı işlendikten sonra sıfırlanır.
Düzen: 1 bayt: opcode 0x82. 1 bayt: doldurma. 8 bayt: yineleme sayısı (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)
Düzen: 1 bayt: opcode. 1 bayt: RVA sayısı (N). 4N bayt: N RVA (her biri uint32 LE)
Her RVA, 1 + tekrar sayısına eşit olan bir IP örneği isabet sayısını temsil eder.

SPT_OP_LBR (0x10)
Düzen: 1 bayt: opcode 0x10. 1 bayt: olay sayısı (N). 8N bayt: N LBR çifti, her bir çift şu şekildedir: 4 bayt: Hedef RVA (uint32 LE), 4 bayt: Kaynak RVA (uint32 LE)
Her çift, isabet sayısı = 1 + yineleme sayısı olan bir dal yayı temsil eder.

SPT_OP_ETW_CALLSTACK (0x42)
Düzen: 1 bayt: opcode 0x42. 1 bayt: RVA sayısı (N). 4N bayt: N RVA (her biri yığın çerçevelerini temsil eden uint32 LE).
Ne zaman:

  • N = 2: İki RVA tek bir yığın yayı oluşturur (RVA[0], RVA[1])
  • N > 2: Ardışık çiftlerden N-1 yaylar oluşturur: (RVA[0]->RVA[1]), (RVA[1]->RVA[2]), ..., (RVA[N-2]->RVA[N-1]) Tek bir yay veya ardışık çiftler olsun, her serinin isabet sayısı = 1 + yineleme sayısı olur.

SPT_OP_BINARY_ID (0x81)
Düzen: 1 bayt: opcode 0x81. 1 bayt: doldurma. 2 bayt: program kimliği (uint16 LE). 4 bayt: Bu segmentteki toplam veri uzunluğu (uint32 LE).
Dizin kimliğiyle belirtilen belirli bir ikili için veri kayıtlarının başlangıcını işaretler. Dizin kimliği, SPT üst bilgisindeki RSDSKey ve ikili ad dizesi tablosuna geri başvurur.
Veri uzunluğu, 4 bayt uzunluğundaki alanın kendisini içerir. Bu işlem kodu bir veri akışında birden çok kez oluşabilir.

Ayrıca bakınız

Öğretici: Performansı iyileştirmek için Örnek Profil Kılavuzlu Optimizasyonunu (SPGO) kullanma
SPDConvert
SPDDump
SPTAggregate