Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
SPTDump — это инструмент командной строки для анализа файлов трассировки выборочного профиля (SPT), используемых в рабочих процессах оптимизации на основе выборочного профиля (SPGO). Используйте его для просмотра метаданных SPT и примеров данных. Проверьте содержимое трассировки перед преобразованием в SPD и устраняйте неполадки, такие как несоответствия версий SPD.
Файл SPT содержит необработанные события производительности оборудования, собранные из рабочей нагрузки приложения.
Syntax
SPTDump[параметры] sptfile
Параметры
параметры
Укажите следующие параметры для SPTDump:
- /all Выводит весь файл SPT. Этот параметр в установлен по умолчанию.
- /Заголовка Выводит заголовок SPT-файла.
- /Progid Идентификаторы программ вывода (GUID и возраст для каждого двоичного файла).
- /strtab Вывести таблицу строк.
- /event Выводит примеры событий.
- /help Отображает справочную информацию.
sptfile
Путь к SPT-файлу для проверки.
Замечания
Note
Запустите это средство из командной строки разработчика Visual Studio.
Используйте SPTDump, чтобы просмотреть содержимое файла трассировки профиля образца (SPT).
SPTAggregate создает файлы SPT из журналов трассировки событий ETL, собранных xperf. Импортируйте SPT-файлы в файл SPD (пример базы данных профиля) с помощью SPDConvert.
Чтобы диагностировать ошибку "Несовместимая версия SPD", используйте /progid для отображения GUID и возраста каждого двоичного файла в SPT-файле, а затем сравните эти значения со значениями в SPD-файле с помощью SPDDump /header.
Example
В этом примере выводится полное содержимое SPT-файла:
SPTDump sample.spt
В этом примере выводятся только идентификаторы программы (GUID и возраст) для двоичных файлов в SPT-файле:
SPTDump /progid sample.spt
Формат заголовка SPT
SPT-файл — это двоичный формат с 32-байтовым заголовком, строковой таблицей, таблицей идентификаторов программы и примером потока данных событий. В этом документе описана версия 1 формата. Поле версии обновляется, если макет изменится в будущем.
Заголовок SPT составляет 32 байта:
-
[0x00-0x03]Сигнатура (uint32 LE) = 0x5350543A ("SPT:") -
[0x04-0x07]Версия (uint32 LE) = 1 -
[0x08-0x0B]RawDataId (uint32 LE) = 0 (неиспользуемый или зарезервированный) -
[0x0C-0x0F]TargetArch (uint32 LE) = 0 (неиспользуемый или зарезервированный) -
[0x10-0x13]StringTableOffset (uint32 LE) = смещение к строковой таблице двоичного имени (обычно 0x20) -
[0x14-0x17]ProgramIdTableOffset (uint32 LE) = смещение к таблице RSDSKEY (обычно StringTableOffset+StringTableCapacity) -
[0x18-0x19]StringTableUsed (uint16 LE) = байты, используемые в строковой таблице -
[0x1A-0x1B]StringTableCapacity (uint16 LE) = байты, выделенные в строковой таблице (обычно 0x4000) -
[0x1C-0x1D]ProgramIdsUsed (uint16 LE) = количество идентификаторов программ (часто всего 1) -
[0x1E-0x1F]ProgramIdCapacity (uint16 LE) = емкость в количестве (не байтах) для идентификаторов программ (обычно 0x100)
Таблица строк непосредственно следует за заголовком по указанному смещению. Он содержит двоичное имя UTF-8, завершаемое значением NULL.
ProgramIdTable располагается после StringTable по указанному смещению. Каждая запись имеет размер 24 байта: 16-байтовый GUID потока данных Rich Signature (RSDS) + 4-байтовое значение age + 4-байтовый индекс строки в StringTable.
Поток данных начинается с ProgramIdTableOffset + (ProgramIdCapacity * 24) и начинается с кода операции SPT_OP_BINARY_ID.
SPT Opcodes
В следующих описаниях:
- RVA означает 32-разрядный относительный виртуальный адрес инструкции в бинарном файле, то есть её смещение в модуле.
- LE означает маленький байтовый порядок.
SPT_OP_REPEAT (0x82)
Повторите следующую запись указанное количество раз. Число повторов 2 означает, что в общей сложности 3 идентичных записей. Число повторений сбрасывается после обработки.
Структура: 1 байт: код операции 0x82. 1 байт: заполнитель. 8 байт: число повторов (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)
Структура: 1 байт: код операции. 1 байт: число RVA (N). 4N байт: N RVAs (uint32 LE каждый)
Каждому RVA соответствует число попаданий в выборку IP, равное 1 + числу повторов.
SPT_OP_LBR (0x10)
Структура: 1 байт: код операции 0x10. 1 байт: число событий (N). 8N байт: N пар LBR, каждая пара содержит: 4 байта: к RVA (uint32 LE), 4 байта: от RVA (uint32 LE)
Каждая пара представляет дугу ветви с числом попаданий = 1 + число повторов.
SPT_OP_ETW_CALLSTACK (0x42)
Структура: 1 байт: код операции 0x42. 1 байт: число RVA (N). 4N байт: N значений RVA (uint32 LE каждое), представляющих кадры стека.
Когда:
- N = 2: два RVA образуют одну дугу стека (RVA[0], RVA[1])
- N > 2. Создает дуги N-1 из последовательных пар: (RVA[0]->RVA[1]), (RVA[1]->RVA[2]), ..., (RVA[N-2]->RVA[N-1]) Каждая серия, будь то одна дуга или последовательные пары, имеет число попаданий = 1 + число повторов.
SPT_OP_BINARY_ID (0x81)
Структура: 1 байт: код операции 0x81. 1 байт: заполнение. 2 байта: идентификатор программы (uint16 LE). 4 байта: общая длина данных в этом сегменте (uint32 LE).
Помечает начало записей данных для определенного двоичного файла, указанного идентификатором индекса. Идентификатор индекса отсылает к RSDSKey и таблице строк двоичного имени в заголовке SPT.
Длина данных включает в себя поле длиной 4 байтов. Этот опкод может встречаться в потоке данных несколько раз.
См. также
Учебник: использование примера оптимизации, управляемой профилем (SPGO), для повышения производительности
SPDConvert
SPDDump
SPTAggregate