是否需要DisablePagingExecutive以允许xPerf在64位Windows上运行的32位应用程序的stackwalk

时间:2013-06-27 17:44:24

标签: xperf

我有两个问题:

  1. 我发现一条博客文章说使用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数据?

  2. 在64位操作系统上为32位进程收集xperf的数据时,我应该使用x86还是x64版本?

3 个答案:

答案 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并且没有提示)。