禁用RtlValidSecurityDescriptor

时间:2019-01-07 15:46:54

标签: python performance windbg pykd

使用heap_stat(基于PYKD库的Python脚本,用于在Windbg环境中运行Python脚本)时,我为该脚本完成工作所需的大量时间感到沮丧。

因此,我已经开始使用“ 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 :(得分:1)

我在这里看到了xperf日志和结果:

25%的CPU接到电话 heap_output = dbgCommand('!heap -h 0')。split('\ n')

75%循环 对于heap_output中的heap_block: 而主要的CPU使用者是pykd.ptrPtr

CPU丢失的主要原因是调试引擎在内部大量调用dbgeng!FlushCallbacks。实际上,所有的调试引擎功能都回想起这种方法,我不明白为什么。

我建议您重构一下heap_stat.py并使用ptrDword或ptrQword重写您自己的ptrPtr函数,这可能会减少CPU损失。