我有两个问题:
我发现一条博客文章说使用DisablePagingExecutive
时应设置xperf
:
http://blogs.msdn.com/b/pigscanfly/archive/2009/08/06/stack-walking-in-xperf.aspx
禁用分页执行
要使跟踪在64位Windows上运行,您需要设置DisablePagingExecutive
注册表项。这告诉操作系统不要将内核模式驱动程序和系统代码分页到磁盘,这是使用xperf获取64位调用堆栈的先决条件,因为64位堆栈遍历取决于可执行映像中的元数据,在某些情况下xperf堆栈遍历代码不允许触摸分页页面。
是否需要为在64位Windows上运行的32位应用程序收集xperf
数据?
在64位操作系统上为32位进程收集xperf
的数据时,我应该使用x86还是x64版本?
答案 0 :(得分:6)
如果您使用的是64位Windows,则应将DisablePagingExecutive设置为1并使用64位版本的WPT。
需要64位版本的WPT,因为32位版本甚至不能安装在64位Windows上。
需要将DisablePagingExecutive设置为1,因为即使是32位程序也可以调用64位内核。为了获得包含内核代码的完整调用堆栈,您需要将元数据锁定到不可分页的内存中,这就是设置DisablePagingExecutive所做的事情。
设置它。它不会花费太多(它使用更多的内存),如果你设置它,你不需要担心它。
设置它的最简单方法是使用跟踪记录UI。 wprui是一个选择(它附带Windows性能工具包),但我更喜欢UIforETW。详情请见https://randomascii.wordpress.com/2015/09/24/etw-central/
答案 1 :(得分:0)
您必须使用64位版本的WPT,并且必须将DisablePagingExecute
设置为1。
答案 2 :(得分:0)
根据a Microsoft blog article,,从Windows 8/2012开始,不再需要禁用分页执行程序来获取WPT跟踪中的完整堆栈。
在解释禁用分页执行的过程时,它具体说明:
是否需要在Windows Server 2012或32位/ 64位中执行[禁用分页执行程序] Windows 8? 否强>
我在阅读了另一篇(几年前)的文章后发现了这一点,该文章指出,在第一次启动WPR时,它应该提示你禁用分页执行程序(如果它还没有)。尽管DisablePagingExecutive注册表项设置为零,但我没有得到此提示,所以我做了一些挖掘并找到了上述信息。
这篇文章的日期是2012年,所以这些是当时最新的Windows版本。据推测,这在后来的版本中得到了延续(我在Server 2016上运行WPR并且没有提示)。