[Gllug] Pages marked as present but not mapped

Adrian McMenamin adrian at mcmen.demon.co.uk
Tue Aug 30 20:34:43 UTC 2011

On Tue, August 30, 2011 11:48 am, Christian Smith wrote:
> On Mon, Aug 29, 2011 at 12:06:26PM +0100, Adrian McMenamin wrote:
>> I wonder if one of the kernel gurus here can help me with this - I have
>> rifled through a lot of literature but cannot find a comprehensive
>> explanation.
>> I have written some code (https://github.com/mcmenaminadrian/valext)
>> that
>> uses ptrace to step through the execution of a Linux program and on
>> every
>> step query the /proc/PID/pagemap to record how many pages are present.
>> The code seems to work fine (but if anyone spots an error in it let me
>> know!) but returns a lot of pages which are marked as present but which
>> have no page table entries. Typically these are as numerous as pages
>> which
>> are present and have a PTE.
>> Now, what I read is that these pages do exist - but nowhere have I read
>> a
>> decent explanation of what they are. Anyone here able to give me an
>> explanation or point me towards one?
> What I suspect is happening is that you're reading entries for pages that
> are not present (else the present bit would be 1) but are not swapped.
> This will be mmap'ed pages that have never been referenced. mmap'ed
> pages are never "swapped", they are written to their underlying file
> if dirty. Only anonymouse and private pages are swapped to the swap files.
> Unreferenced mmap pages simply use the virtual memory map information
> to locate their data from the file, so don't need the swap information.
> So your comment needs fixing to report these pages differently:
> --- valext.c.orig       2011-08-30 11:43:10.000000000 +0100
> +++ valext.c    2011-08-30 11:44:12.000000000 +0100
> @@ -176,7 +176,8 @@
>         } else if (*pgstatus & present) {
>             presentcnt++;
>         } else {
> -           //page is present but not in page table
> +           //page is not present but in page table
> +           //unmapped mmap'ed data
>             notpresentcnt++;
>         }
>         i++;
Thanks for the reply. I understand the point about (not) swapping and
file-backed pages - but why do these pages not have a page table entry?
They definitely do not have a PTE - this is not about not having a swap
reference. Are these soft/minor faulted in when they are referenced?


Gllug mailing list  -  Gllug at gllug.org.uk

More information about the GLLUG mailing list