Messages in this thread | | | Subject | Re: [PATCH v2 1/1] Documentation: update pagemap with shmem exceptions | From | David Hildenbrand <> | Date | Mon, 20 Sep 2021 19:36:08 +0200 |
| |
On 20.09.21 18:49, Tiberiu A Georgescu wrote: > Mentioning the current missing information in the pagemap and alternatives > on how to retrieve it, in case someone stumbles upon unexpected behaviour. > > Signed-off-by: Tiberiu A Georgescu <tiberiu.georgescu@nutanix.com> > Reviewed-by: Ivan Teterevkov <ivan.teterevkov@nutanix.com> > Reviewed-by: Florian Schmidt <florian.schmidt@nutanix.com> > Reviewed-by: Carl Waldspurger <carl.waldspurger@nutanix.com> > Reviewed-by: Jonathan Davies <jonathan.davies@nutanix.com> > --- > Documentation/admin-guide/mm/pagemap.rst | 22 ++++++++++++++++++++++ > 1 file changed, 22 insertions(+) > > diff --git a/Documentation/admin-guide/mm/pagemap.rst b/Documentation/admin-guide/mm/pagemap.rst > index fb578fbbb76c..ea3f88f3c18d 100644 > --- a/Documentation/admin-guide/mm/pagemap.rst > +++ b/Documentation/admin-guide/mm/pagemap.rst > @@ -196,6 +196,28 @@ you can go through every map in the process, find the PFNs, look those up > in kpagecount, and tally up the number of pages that are only referenced > once. > > +Exceptions for Shared Memory > +============================ > + > +Page table entries for shared pages are cleared when the pages are zapped or > +swapped out. This makes swapped out pages indistinguishable from never-allocated > +ones. > + > +In kernel space, the swap location can still be retrieved from the page cache. > +However, values stored only on the normal PTE get lost irretrievably when the > +page is swapped out (i.e. SOFT_DIRTY). > + > +In user space, whether the page is swapped or none can be deduced with the > +lseek system call. For a single page, the algorithm is: > + > +0. If the pagemap entry of the page has bit 63 (page present) set, the page > + is present. > +1. Otherwise, get an fd to the file where the page is backed. For anonymous > + shared pages, the file can be found in ``/proc/pid/map_files/``. > +2. Call lseek with LSEEK_DATA flag and seek to the virtual address of the page > + you wish to inspect. If it overshoots the PAGE_SIZE, the page is NONE. > +3. Otherwise, the page is in swap. > + > Other notes > =========== > >
Thanks!
Reviewed-by: David Hildenbrand <david@redhat.com>
-- Thanks,
David / dhildenb
| |