提高 PYKD heap_stat 性能,禁用 RtlValidSecurityDescriptor
Increase PYKD heap_stat performance, disabling RtlValidSecurityDescriptor
在使用 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
分析才能衡量哪个函数需要多少时间?
我看到了你的 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 损失。
在使用 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
分析才能衡量哪个函数需要多少时间?
我看到了你的 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 损失。