From: mterrisse on
Hello,

I am using Windows 7 64-bit but I develop a 32-bit application. When
It is running, the Windows task manager reports millions of page
faults and I am trying to track them to improve performance.
The number of page faults reported for the same program using a 32-bit
version of Windows is not so big, so it has to do with WOW64.

I try to focus on faults directly linked to my code but most of the
page faults come from Windows Api like ReadFile or SysAllocStringLen,
and I cannot change anything to that.
Is it well known that Win32 APIs can generate a lot of page faults, or
is there anything I can do to limit that ?

Note that I have 16 GB RAM installed on the machine, that is large,
and a test program I wrote can generate thousands of pages faults
immediately while it comsumes less than 1 MB.

Regards,

Michel
From: Lorne on
"mterrisse" <mterrisse(a)free.fr> wrote in message
news:2b11c987-030a-4f96-9269-398fc72ec559(a)v15g2000yqe.googlegroups.com...
> Hello,
>
> I am using Windows 7 64-bit but I develop a 32-bit application. When
> It is running, the Windows task manager reports millions of page
> faults and I am trying to track them to improve performance.
> The number of page faults reported for the same program using a 32-bit
> version of Windows is not so big, so it has to do with WOW64.
>
> I try to focus on faults directly linked to my code but most of the
> page faults come from Windows Api like ReadFile or SysAllocStringLen,
> and I cannot change anything to that.
> Is it well known that Win32 APIs can generate a lot of page faults, or
> is there anything I can do to limit that ?
>
> Note that I have 16 GB RAM installed on the machine, that is large,
> and a test program I wrote can generate thousands of pages faults
> immediately while it comsumes less than 1 MB.
>
> Regards,
>
> Michel

Are you sure these are real faults? Every time your program asks windows to
look for some data and it is not already in RAM it will load it and the
failure to find it first time is recorded as a fault. The first time you
program executes anything or during its startup my guess is that it will
throw many page faults which are just related to data being loaded into RAM.
I just looked on my machine and even Microsoft software like Outlook is
showing over 50,000 "page faults".

From: mterrisse on
> Are you sure these are real faults?
I don't know what you call "real faults". Page faults here are not
invalid page faults or protection faults. The process runs with no
error.

> Those page faults are due to data not already in memory but
> Every time your program asks windows to
> look for some data and it is not already in RAM it will load it and the
> failure to find it first time is recorded as a fault.  The first time you
> program executes anything or during its startup my guess is that it will
> throw many page faults which are just related to data being loaded into RAM.
> I just looked on my machine and even Microsoft software like Outlook is
> showing over 50,000 "page faults"
I understand that. What I can't understand is how a small program
(code : ~ 300 KB, memory usage : ~ 500 KB) can generate millions of
such page faults in a few seconds. The number of page faults is far
greater than the number of bytes consumed by the process, this means
that data is being loaded into RAM not only the first time it needs to
access a page, but thousands of times for the same page. Strange.
And this does not happen with the 32-bit version of Windows 7.

Michel