Re: [PATCH 12/13] maps#2: Add /proc/pid/pagemap interface

2007-04-19 Thread Matt Mackall
On Thu, Apr 19, 2007 at 12:12:29PM -0700, Dave Hansen wrote:
> On Fri, 2007-04-06 at 17:03 -0500, Matt Mackall wrote:
> > 
> > +static int pagemap_pte_range(pmd_t *pmd, unsigned long addr, unsigned
> > long end,
> > +void *private)
> > +{
> > +   struct pagemapread *pm = private;
> > +   pte_t *pte;
> > +   int err;
> > +
> > +   pte = pte_offset_map(pmd, addr);
> > +   for (; addr != end; pte++, addr += PAGE_SIZE) {
> > +   if (addr < pm->next)
> > +   continue;
> > +   if (!pte_present(*pte))
> > +   err = add_to_pagemap(addr, -1, pm);
> > +   else
> > +   err = add_to_pagemap(addr, pte_pfn(*pte), pm);
> > +   if (err)
> > +   return err;
> > +   }
> > +   pte_unmap(pte - 1);
> > +   return 0;
> > +} 
> 
> Sorry for the horribly late reply. ;)
> 
> Would you have any problems with this being extended for the !
> pte_present() case to show pages that happen to be in swap?
> 
> I'm playing with some process checkpoint/restart code, and using the
> existing swap mechanisms to get the current memory contents out of the
> process.  I've also created a hackish syscall to make a pretty raw dump
> of pte contents.
> 
> Perhaps we could steal the high bits of the pfn and have its presence in
> swap, plus some handle to which swapfile it is in.  Or, would you rather
> I just create a new /proc file that utilizes most of the code you
> already put in place, and _just_ deals with swap?

It seems reasonable to deal with swap here in some fashion. It's just
a matter of how. Current swap entries aren't terribly portable.

I'm planning on using a couple high bits for exposing active/dirty.
Adding present should be fine as well.

-- 
Mathematics is the supreme nostalgia of our time.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 12/13] maps#2: Add /proc/pid/pagemap interface

2007-04-19 Thread Dave Hansen
On Fri, 2007-04-06 at 17:03 -0500, Matt Mackall wrote:
> 
> +static int pagemap_pte_range(pmd_t *pmd, unsigned long addr, unsigned
> long end,
> +void *private)
> +{
> +   struct pagemapread *pm = private;
> +   pte_t *pte;
> +   int err;
> +
> +   pte = pte_offset_map(pmd, addr);
> +   for (; addr != end; pte++, addr += PAGE_SIZE) {
> +   if (addr < pm->next)
> +   continue;
> +   if (!pte_present(*pte))
> +   err = add_to_pagemap(addr, -1, pm);
> +   else
> +   err = add_to_pagemap(addr, pte_pfn(*pte), pm);
> +   if (err)
> +   return err;
> +   }
> +   pte_unmap(pte - 1);
> +   return 0;
> +} 

Sorry for the horribly late reply. ;)

Would you have any problems with this being extended for the !
pte_present() case to show pages that happen to be in swap?

I'm playing with some process checkpoint/restart code, and using the
existing swap mechanisms to get the current memory contents out of the
process.  I've also created a hackish syscall to make a pretty raw dump
of pte contents.

Perhaps we could steal the high bits of the pfn and have its presence in
swap, plus some handle to which swapfile it is in.  Or, would you rather
I just create a new /proc file that utilizes most of the code you
already put in place, and _just_ deals with swap?

-- Dave

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 12/13] maps#2: Add /proc/pid/pagemap interface

2007-04-19 Thread Dave Hansen
On Fri, 2007-04-06 at 17:03 -0500, Matt Mackall wrote:
 
 +static int pagemap_pte_range(pmd_t *pmd, unsigned long addr, unsigned
 long end,
 +void *private)
 +{
 +   struct pagemapread *pm = private;
 +   pte_t *pte;
 +   int err;
 +
 +   pte = pte_offset_map(pmd, addr);
 +   for (; addr != end; pte++, addr += PAGE_SIZE) {
 +   if (addr  pm-next)
 +   continue;
 +   if (!pte_present(*pte))
 +   err = add_to_pagemap(addr, -1, pm);
 +   else
 +   err = add_to_pagemap(addr, pte_pfn(*pte), pm);
 +   if (err)
 +   return err;
 +   }
 +   pte_unmap(pte - 1);
 +   return 0;
 +} 

Sorry for the horribly late reply. ;)

Would you have any problems with this being extended for the !
pte_present() case to show pages that happen to be in swap?

I'm playing with some process checkpoint/restart code, and using the
existing swap mechanisms to get the current memory contents out of the
process.  I've also created a hackish syscall to make a pretty raw dump
of pte contents.

Perhaps we could steal the high bits of the pfn and have its presence in
swap, plus some handle to which swapfile it is in.  Or, would you rather
I just create a new /proc file that utilizes most of the code you
already put in place, and _just_ deals with swap?

-- Dave

-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 12/13] maps#2: Add /proc/pid/pagemap interface

2007-04-19 Thread Matt Mackall
On Thu, Apr 19, 2007 at 12:12:29PM -0700, Dave Hansen wrote:
 On Fri, 2007-04-06 at 17:03 -0500, Matt Mackall wrote:
  
  +static int pagemap_pte_range(pmd_t *pmd, unsigned long addr, unsigned
  long end,
  +void *private)
  +{
  +   struct pagemapread *pm = private;
  +   pte_t *pte;
  +   int err;
  +
  +   pte = pte_offset_map(pmd, addr);
  +   for (; addr != end; pte++, addr += PAGE_SIZE) {
  +   if (addr  pm-next)
  +   continue;
  +   if (!pte_present(*pte))
  +   err = add_to_pagemap(addr, -1, pm);
  +   else
  +   err = add_to_pagemap(addr, pte_pfn(*pte), pm);
  +   if (err)
  +   return err;
  +   }
  +   pte_unmap(pte - 1);
  +   return 0;
  +} 
 
 Sorry for the horribly late reply. ;)
 
 Would you have any problems with this being extended for the !
 pte_present() case to show pages that happen to be in swap?
 
 I'm playing with some process checkpoint/restart code, and using the
 existing swap mechanisms to get the current memory contents out of the
 process.  I've also created a hackish syscall to make a pretty raw dump
 of pte contents.
 
 Perhaps we could steal the high bits of the pfn and have its presence in
 swap, plus some handle to which swapfile it is in.  Or, would you rather
 I just create a new /proc file that utilizes most of the code you
 already put in place, and _just_ deals with swap?

It seems reasonable to deal with swap here in some fashion. It's just
a matter of how. Current swap entries aren't terribly portable.

I'm planning on using a couple high bits for exposing active/dirty.
Adding present should be fine as well.

-- 
Mathematics is the supreme nostalgia of our time.
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 12/13] maps#2: Add /proc/pid/pagemap interface

2007-04-07 Thread Matt Mackall
On Fri, Apr 06, 2007 at 11:55:10PM -0700, Andrew Morton wrote:
> On Fri, 06 Apr 2007 17:03:13 -0500 Matt Mackall <[EMAIL PROTECTED]> wrote:
> 
> > Add /proc/pid/pagemap interface
> > 
> > This interface provides a mapping for each page in an address space to
> > its physical page frame number, allowing precise determination of what
> > pages are mapped and what pages are shared between processes.
> 
> Could we please have a simple read-proc-pid-pagemap.c placed under
> Documentation/ somewhere?  Also some sample output for the changelog
> so we can see what all this does.

Working on that. The userspace portion of my tools are very rough at
the moment. And in Python.
 
> Also for kpagemap, please.
> 
> Should /proc/pid/pagemap and kpagemap be versioned?

They've both got a variable-sized header, so we can add things there. 

-- 
Mathematics is the supreme nostalgia of our time.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 12/13] maps#2: Add /proc/pid/pagemap interface

2007-04-07 Thread Andrew Morton
On Fri, 06 Apr 2007 17:03:13 -0500 Matt Mackall <[EMAIL PROTECTED]> wrote:

> Add /proc/pid/pagemap interface
> 
> This interface provides a mapping for each page in an address space to
> its physical page frame number, allowing precise determination of what
> pages are mapped and what pages are shared between processes.

Could we please have a simple read-proc-pid-pagemap.c placed under
Documentation/ somewhere?  Also some sample output for the changelog
so we can see what all this does.

Also for kpagemap, please.

Should /proc/pid/pagemap and kpagemap be versioned?
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 12/13] maps#2: Add /proc/pid/pagemap interface

2007-04-07 Thread Andrew Morton
On Fri, 06 Apr 2007 17:03:13 -0500 Matt Mackall [EMAIL PROTECTED] wrote:

 Add /proc/pid/pagemap interface
 
 This interface provides a mapping for each page in an address space to
 its physical page frame number, allowing precise determination of what
 pages are mapped and what pages are shared between processes.

Could we please have a simple read-proc-pid-pagemap.c placed under
Documentation/ somewhere?  Also some sample output for the changelog
so we can see what all this does.

Also for kpagemap, please.

Should /proc/pid/pagemap and kpagemap be versioned?
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 12/13] maps#2: Add /proc/pid/pagemap interface

2007-04-07 Thread Matt Mackall
On Fri, Apr 06, 2007 at 11:55:10PM -0700, Andrew Morton wrote:
 On Fri, 06 Apr 2007 17:03:13 -0500 Matt Mackall [EMAIL PROTECTED] wrote:
 
  Add /proc/pid/pagemap interface
  
  This interface provides a mapping for each page in an address space to
  its physical page frame number, allowing precise determination of what
  pages are mapped and what pages are shared between processes.
 
 Could we please have a simple read-proc-pid-pagemap.c placed under
 Documentation/ somewhere?  Also some sample output for the changelog
 so we can see what all this does.

Working on that. The userspace portion of my tools are very rough at
the moment. And in Python.
 
 Also for kpagemap, please.
 
 Should /proc/pid/pagemap and kpagemap be versioned?

They've both got a variable-sized header, so we can add things there. 

-- 
Mathematics is the supreme nostalgia of our time.
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/