I have two questions:
I found a blog entry saying that DisablePagingExecutive
should be set when using xperf
:
http://blogs.msdn.com/b/pigscanfly/archive/2009/08/06/stack-walking-in-xperf.aspx
Disable Paging Executive
In order for tracing to work on 64-bit Windows you need to set theDisablePagingExecutive
registry key. This tells the operating system not to page kernel mode drivers and system code to disk, which is a prerequisite for getting 64-bit call stacks using xperf, because 64-bit stack walking depends on metadata in the executable images, and in some situations the xperf stack walk code is not allowed to touch paged out pages.
Is this required to collect xperf
data for a 32-bit application running on 64-bit Windows?
When collecting data with xperf
for a 32-bit process on a 64-bit OS, should I be using the x86 or x64 version?
You should set DisablePagingExecutive to 1 and use the 64-bit version of WPT if you are using 64-bit Windows.
The 64-bit version of WPT is needed because the 32-bit version won't even install on 64-bit Windows.
Setting DisablePagingExecutive to 1 is needed because even a 32-bit program can make calls into the 64-bit kernel. In order to get full call stacks that include the kernel code you need to lock the metadata into non-pageable memory, which is what setting DisablePagingExecutive does.
Just set it. It doesn't cost much (it uses a bit more memory) and if you set it you don't need to worry about it.
And the simplest way to set it is to use a trace recording UI. wprui is one choice (it ships with the Windows Performance Toolkit) but I prefer UIforETW. Details at https://randomascii.wordpress.com/2015/09/24/etw-central/