3

我有两个问题:

  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 堆栈遍历代码不允许触摸分页页面。

    这是否需要为xperf在 64 位 Windows 上运行的 32 位应用程序收集数据?

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

4

3 回答 3

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/上的详细信息

于 2013-12-14T05:38:18.627 回答
1

根据Microsoft 博客文章,从 Windows 8 / 2012 开始,似乎不再需要禁用分页执行程序来获取 WPT 跟踪中的完整堆栈。

在解释禁用分页执行的过程时,它特别指出:

[禁用分页执行] 是否需要在 Windows Server 2012 或 32 位/64 位 Windows 8 中完成?没有

我在阅读另一篇(几年前的)文章后发现了这一点,该文章指出在第一次启动 WPR 时,它应该提示您禁用分页执行程序(如果还没有的话)。尽管 DisablePagingExecutive 注册表项设置为零,但我没有收到此提示,因此我进行了一些挖掘并找到了上述信息。

文章日期为 2012 年,因此这些是当时最新的 Windows 版本。大概这在以后的版本中已经延续(我在 Server 2016 上运行 WPR 并且没有收到提示)。

于 2018-05-13T20:26:06.720 回答
0

您必须使用 64 位版本的 WPT,并且必须将其设置DisablePagingExecute为 1。

于 2013-06-28T06:12:09.940 回答