All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/29] Page Table Interface Explanation
@ 2007-01-13  2:45 Paul Davies
  2007-01-13  2:45 ` [PATCH 1/29] Abstract current page table implementation Paul Davies
                   ` (49 more replies)
  0 siblings, 50 replies; 60+ messages in thread
From: Paul Davies @ 2007-01-13  2:45 UTC (permalink / raw)
  To: linux-mm; +Cc: Paul Davies

PATCH 00

        A CLEAN PAGE TABLE INTERFACE FOR LINUX by Gelato@UNSW

Linux currently uses the same page table format regardless of
architecture.  Access to the page table is open-coded in a variety of
places.  Architectures that walk a different page table format in
hardware set up a hardware-walkable cache in their native format, that
then has to be kept in step with Linux's page table.

The first step to allowing different page table formats is to split
the page table implementation into separate files from its use.
This patch series abstracts the page table implementation, and cleans
it up, so that:
   1.  All page table operations are in one place, making future
       maintenance easier
   2.  Generic code no longer knows what format the page table is,
       opening the way to experimentation with different
       page table formats.

The interface is separated into two parts.  The first part is
architecture independent. All architectures must run through
this interface regardless of whether or not that architecture
can or will ever want to change page tables.

This patch series provides:
   1. Architecture independent page table interface to try on i386 and IA64
   2. Architecture dependent page table interface for IA64
   3. An alternative page table implementation (guarded page table) for IA64

   The GPT is a a compile time alternative to the current page table on IA64.  
   This is running rough at the moment and is intended as an example of
   an alternative page table running under the PTI.

Benchmarking results for the full page table interface on IA64
 * There is negligable regression demonstrated across the board
 demonstrated by testing so far.  For benchmarks, see the link below.
 
Benchmarking results for the arch independent PTI running on i386
 * There is negligable regression demonstrated across the board
 demonstrated by testing so far.  For benchmarks see the link below.

Benchmarking of the GPT shows poor performance and is intended
as a demonstration of an alternate implementation under the PTI.
The GPT is still "under construction".  For benchmarks see the link below.

INSTRUCTIONS,BENCHMARKS and further information at the site below:
 
http://www.gelato.unsw.edu.au/IA64wiki/PageTableInterface/PTI-LCA

                PAGE TABLE INTERFACE

int create_user_page_table(struct mm_struct *mm);

void destroy_user_page_table(struct mm_struct *mm);

pte_t *build_page_table(struct mm_struct *mm, unsigned long address,
		pt_path_t *pt_path);

pte_t *lookup_page_table(struct mm_struct *mm, unsigned long address,
		pt_path_t *pt_path);

void free_pt_range(struct mmu_gather **tlb, unsigned long addr,
		unsigned long end, unsigned long floor, unsigned long ceiling);

int copy_dual_iterator(struct mm_struct *dst_mm, struct mm_struct *src_mm,
		unsigned long addr, unsigned long end, struct vm_area_struct *vma);

unsigned long unmap_page_range_iterator(struct mmu_gather *tlb,
        struct vm_area_struct *vma, unsigned long addr, unsigned long end,
        long *zap_work, struct zap_details *details);

int zeromap_build_iterator(struct mm_struct *mm,
		unsigned long addr, unsigned long end, pgprot_t prot);

int remap_build_iterator(struct mm_struct *mm,
		unsigned long addr, unsigned long end, unsigned long pfn,
		pgprot_t prot);

void change_protection_read_iterator(struct vm_area_struct *vma,
		unsigned long addr, unsigned long end, pgprot_t newprot,
		int dirty_accountable);

void vunmap_read_iterator(unsigned long addr, unsigned long end);

int vmap_build_iterator(unsigned long addr,
		unsigned long end, pgprot_t prot, struct page ***pages);

int unuse_vma_read_iterator(struct vm_area_struct *vma,
		unsigned long addr, unsigned long end, swp_entry_t entry, struct page *page);

void smaps_read_iterator(struct vm_area_struct *vma,
		unsigned long addr, unsigned long end, struct mem_size_stats *mss);

int check_policy_read_iterator(struct vm_area_struct *vma,
		unsigned long addr, unsigned long end, const nodemask_t *nodes,
		unsigned long flags, void *private);

unsigned long move_page_tables(struct vm_area_struct *vma,
		unsigned long old_addr, struct vm_area_struct *new_vma,
		unsigned long new_addr, unsigned long len);


Paul Davies
Gelato@UNSW

Signed-Off-By: Paul Davies <pauld@gelato.unsw.edu.au>

---

 0 files changed
PATCH 00

        A CLEAN PAGE TABLE INTERFACE FOR LINUX by Gelato@UNSW

Linux currently uses the same page table format regardless of
architecture.  Access to the page table is open-coded in a variety of
places.  Architectures that walk a different page table format in
hardware set up a hardware-walkable cache in their native format, that
then has to be kept in step with Linux's page table.

The first step to allowing different page table formats is to split
the page table implementation into separate files from its use.
This patch series abstracts the page table implementation, and cleans
it up, so that:
   1.  All page table operations are in one place, making future
       maintenance easier
   2.  Generic code no longer knows what format the page table is,
       opening the way to experimentation with different
       page table formats.

The interface is separated into two parts.  The first part is
architecture independent. All architectures must run through
this interface regardless of whether or not that architecture
can or will ever want to change page tables.

This patch series provides:
   1. Architecture independent page table interface to try on i386 and IA64
   2. Architecture dependent page table interface for IA64
   3. An alternative page table implementation (guarded page table)

   The GPT is a a compile time alternative to the current page table on IA64.  
   This is running rough at the moment and is intended as an example of
   an alternative page table running under the PTI.

Benchmarking results for the full page table interface on IA64
 * There is negligable regression demonstrated at the moment for testing
 so far.  For benchmarks see the link below.
Benchmarking results for the arch independent PTI running on i386
 * There is negligable regression demonstrated at the moment for testing
 so far.  For benchmarks see link below.

INSTRUCTIONS,BENCHMARKS and further information at the site below:
 
http://www.gelato.unsw.edu.au/IA64wiki/PageTableInterface/PTI-LCA
and benchmarking results.

                PAGE TABLE INTERFACE

int create_user_page_table(struct mm_struct *mm);

void destroy_user_page_table(struct mm_struct *mm);

pte_t *build_page_table(struct mm_struct *mm, unsigned long address,
		pt_path_t *pt_path);

pte_t *lookup_page_table(struct mm_struct *mm, unsigned long address,
		pt_path_t *pt_path);

void free_pt_range(struct mmu_gather **tlb, unsigned long addr,
		unsigned long end, unsigned long floor, unsigned long ceiling);

int copy_dual_iterator(struct mm_struct *dst_mm, struct mm_struct *src_mm,
		unsigned long addr, unsigned long end, struct vm_area_struct *vma);

unsigned long unmap_page_range_iterator(struct mmu_gather *tlb,
        struct vm_area_struct *vma, unsigned long addr, unsigned long end,
        long *zap_work, struct zap_details *details);

int zeromap_build_iterator(struct mm_struct *mm,
		unsigned long addr, unsigned long end, pgprot_t prot);

int remap_build_iterator(struct mm_struct *mm,
		unsigned long addr, unsigned long end, unsigned long pfn,
		pgprot_t prot);

void change_protection_read_iterator(struct vm_area_struct *vma,
		unsigned long addr, unsigned long end, pgprot_t newprot,
		int dirty_accountable);

void vunmap_read_iterator(unsigned long addr, unsigned long end);

int vmap_build_iterator(unsigned long addr,
		unsigned long end, pgprot_t prot, struct page ***pages);

int unuse_vma_read_iterator(struct vm_area_struct *vma,
		unsigned long addr, unsigned long end, swp_entry_t entry, struct page *page);

void smaps_read_iterator(struct vm_area_struct *vma,
		unsigned long addr, unsigned long end, struct mem_size_stats *mss);

int check_policy_read_iterator(struct vm_area_struct *vma,
		unsigned long addr, unsigned long end, const nodemask_t *nodes,
		unsigned long flags, void *private);

unsigned long move_page_tables(struct vm_area_struct *vma,
		unsigned long old_addr, struct vm_area_struct *new_vma,
		unsigned long new_addr, unsigned long len);

Please send questions regarding the PTI to pauld@cse.unsw.edu.au

UNSW PhD student Adam Wiggins is the GPT author, questions regarding his
GPT model should be addressed to awiggins@cse.unsw.edu.au.

Signed-Off-By: Paul Davies <pauld@gelato.unsw.edu.au>

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

^ permalink raw reply	[flat|nested] 60+ messages in thread

end of thread, other threads:[~2007-01-18  6:53 UTC | newest]

Thread overview: 60+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-01-13  2:45 [PATCH 0/29] Page Table Interface Explanation Paul Davies
2007-01-13  2:45 ` [PATCH 1/29] Abstract current page table implementation Paul Davies
2007-01-13  2:45 ` [PATCH 2/29] " Paul Davies
2007-01-13  2:45 ` [PATCH 3/29] " Paul Davies
2007-01-16 18:55   ` Christoph Lameter
2007-01-13  2:46 ` [PATCH 4/29] Introduce Page Table Interface (PTI) Paul Davies
2007-01-16 19:02   ` Christoph Lameter
2007-01-13  2:46 ` [PATCH 5/29] Start calling simple PTI functions Paul Davies
2007-01-16 19:04   ` Christoph Lameter
2007-01-18  6:43     ` Paul Cameron Davies
2007-01-13  2:46 ` [PATCH 6/29] Tweak IA64 arch dependent files to work with PTI Paul Davies
2007-01-16 19:05   ` Christoph Lameter
2007-01-13  2:46 ` [PATCH 7/29] Continue calling simple PTI functions Paul Davies
2007-01-16 19:08   ` Christoph Lameter
2007-01-13  2:46 ` [PATCH 8/29] Clean up page fault handers Paul Davies
2007-01-13  2:46 ` [PATCH 9/29] Clean up page fault handlers Paul Davies
2007-01-13  2:46 ` [PATCH 10/29] Call simple PTI functions Paul Davies
2007-01-13  2:46 ` [PATCH 11/29] Call simple PTI functions cont Paul Davies
2007-01-13  2:46 ` [PATCH 12/29] Abstract page table tear down Paul Davies
2007-01-13  2:46 ` [PATCH 13/29] Finish abstracting " Paul Davies
2007-01-13  2:46 ` [PATCH 14/29] Abstract copy page range iterator Paul Davies
2007-01-13  2:46 ` [PATCH 15/29] Finish abstracting copy page range Paul Davies
2007-01-13  2:47 ` [PATCH 16/29] Abstract unmap page range iterator Paul Davies
2007-01-13  2:47 ` [PATCH 17/29] Finish abstracting unmap page range Paul Davies
2007-01-13  2:47 ` [PATCH 18/29] Abstract zeromap " Paul Davies
2007-01-13  2:47 ` [PATCH 19/29] Abstract remap pfn range Paul Davies
2007-01-13  2:47 ` [PATCH 20/29] Abstract change protection iterator Paul Davies
2007-01-13  2:47 ` [PATCH 21/29] Abstract unmap vm area Paul Davies
2007-01-13  2:47 ` [PATCH 22/29] Abstract map " Paul Davies
2007-01-13  2:47 ` [PATCH 23/29] Abstract unuse_vma Paul Davies
2007-01-13  2:47 ` [PATCH 24/29] Abstract smaps iterator Paul Davies
2007-01-13  2:47 ` [PATCH 25/29] Abstact mempolicy iterator Paul Davies
2007-01-13  2:47 ` [PATCH 26/29] Abstract mempolicy iterator cont Paul Davies
2007-01-13  2:48 ` [PATCH 27/29] Abstract implementation dependent code for mremap Paul Davies
2007-01-13  2:48 ` [PATCH 28/29] Abstract ioremap iterator Paul Davies
2007-01-13  2:48 ` [PATCH 29/29] Tweak i386 arch dependent files to work with PTI Paul Davies
2007-01-13  2:48 ` [PATCH 1/5] Introduce IA64 page table interface Paul Davies
2007-01-13  2:48 ` [PATCH 2/5] Abstract pgtable Paul Davies
2007-01-13  2:48 ` [PATCH 3/5] Abstact pgtable continued Paul Davies
2007-01-13  2:48 ` [PATCH 4/5] Abstract assembler lookup Paul Davies
2007-01-13  2:48 ` [PATCH 5/5] Abstract pgalloc Paul Davies
2007-01-13  2:48 ` [PATCH 1/12] Alternate page table implementation (GPT) Paul Davies
2007-01-13  2:48 ` [PATCH 2/12] Alternate page table implementation cont Paul Davies
2007-01-13  2:48 ` [PATCH 3/12] " Paul Davies
2007-01-13  2:49 ` [PATCH 4/12] " Paul Davies
2007-01-13  2:49 ` [PATCH 5/12] " Paul Davies
2007-01-13  2:49 ` [PATCH 6/12] " Paul Davies
2007-01-13  2:49 ` [PATCH 7/12] " Paul Davies
2007-01-13  2:49 ` [PATCH 8/12] " Paul Davies
2007-01-13  2:49 ` [PATCH 9/12] " Paul Davies
2007-01-13  2:49 ` [PATCH 10/12] " Paul Davies
2007-01-13  2:49 ` [PATCH 11/12] " Paul Davies
2007-01-13  2:49 ` [PATCH 12/12] " Paul Davies
2007-01-13 19:29 ` [PATCH 0/29] Page Table Interface Explanation Peter Zijlstra
2007-01-14 10:06   ` Paul Cameron Davies
2007-01-16 18:49 ` Christoph Lameter
2007-01-18  6:22   ` Paul Cameron Davies
2007-01-16 18:51 ` Christoph Lameter
2007-01-18  6:53   ` Paul Cameron Davies
2007-01-16 19:14 ` Christoph Lameter

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.