Увеличьте производительность PYKD heap_stat, отключив RtlValidSecurityDescriptor - PullRequest
0 голосов
/ 07 января 2019

Работая с heap_stat (скрипт Python на основе библиотеки PYKD для запуска скриптов Python в среде Windbg), я расстраиваюсь из-за огромного времени, которое требуется этому скрипту для выполнения своей работы.

Итак, я начал сеанс профилирования, используя " Very Sleepy ", и это дало следующий результат:

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, чтобы можно было измерить, какая функция занимает какое время?

1 Ответ

0 голосов
/ 09 января 2019

Я видел ваш журнал xperf и вот ваши результаты:

25% ЦП получил вызов heap_output = dbgCommand ('! heap -h 0'). split ('\ n')

75% петля для heap_block в heap_output: и основным потребителем процессора является pykd.ptrPtr

Основной причиной потери ЦП является массовый вызов dbgeng! FlushCallbacks внутри Debug Engine. Фактически все функции Debug Engine вызывают этот метод, и я не понимаю, почему.

Я могу посоветовать вам изменить рефакторинг heap_stat.py и переписать вашу собственную функцию ptrPtr с помощью ptrDword или ptrQword, это может уменьшить потери процессора.

...