Во время работы с heap_stat (скрипт Python, основанный на библиотеке PYKD для запуска скриптов Python в среде Windbg) меня расстраивает огромное количество времени, которое требуется этому скрипту для выполнения своей работы.
Итак, я начал сеанс профилирования, используя "Очень сонный", и это дало следующий результат:
Name Exclusive Inclusive % Excl. %Incl. Module
RtlValidSecurityDescriptor 2561.56s 5123.12s 50.00% 100.00% ntdll
ZwWaitForSingleObject 1280.78s 1280.78s 25.00% 25.00% ntdll
NtUserWaitMessage 1279.73s 1279.73s 24.98% 24.98% win32u
Как видите, большая часть времени тратится на функцию, проверяя некоторую валидность (что я не думаю, что это необходимо). Есть ли способ отключить эту проверку (конфигурация Windows, настройка реестра, ...)?
Редактировать после первого комментария
Поскольку был запрошен анализ xperf, я выполнил следующие команды xperf:
Запустите профилирование:
xperf -start "DDS_LoggerName" -StackWalk ObjectCreate+ObjectDelete+ObjectReference -heap -Pids 28068
Остановите профилирование:
xperf -stop "DDS_LoggerName"
Я открыл результат (неполный, потому что сначала хотел посмотреть, как выглядит результат) с помощью Windows Performance Analyzer, но для меня это не имеет смысла. Я считаю, что моя конфигурация xperf плохая. Как мне нужно запустить профилирование xperf, чтобы иметь возможность измерить, какая функция занимает какое количество времени?






Я видел ваш журнал xperf, и вот результаты:
25% ЦП получил вызов heap_output = dbgCommand ('! куча -h 0'). split ('\ n')
75% петля для heap_block в heap_output: а основным потребителем ЦП является pykd.ptrPtr
Основная причина потери ЦП - массовый вызов dbgeng! FlushCallbacks внутри Debug Engine. Фактически, все функции Debug Engine напоминают этот метод, и я не понимаю, почему.
Я могу посоветовать вам провести рефакторинг heap_stat.py и переписать свою собственную функцию ptrPtr с помощью ptrDword или ptrQword, это может снизить потери ЦП.
Большое спасибо за анализ, посмотрю.
мы постараемся расследовать это дело
Я полагаю, вы использовали Windows Performance Analyzer для анализа? Какой отчет вы просматривали, чтобы увидеть эти результаты? (Или для этого нужны символы PYKD?)
К сожалению, я только что попытался заменить ptrPtr на ptrDWord, и производительность выглядит примерно так же.
запустил проблему с бэктрекером pykd: githomelab.ru/pykd/pykd/issues/36