cvs commit: src/lib/libthread_xu Makefile src/lib/libthread_xu/arch src/lib/libthread_xu/arch/alpha src/lib/libthread_xu/arch/alpha/alpha pthread_md.c src/lib/libthread_xu/arch/alpha/include pthread_md.h src/lib/libthread_xu/arch/amd64 ...

davidxu davidxu at
Tue Feb 1 16:08:19 PST 2005

Joerg Sonnenberger wrote:
On Tue, Feb 01, 2005 at 03:14:47PM -0800, Matthew Dillon wrote:

:This is an optimisation for the intra-program switch if you want to call it so.
:I would argue that the normal switch case is either user -> kernel or to
:a different kernel thread.
   You pretty much always want to have just a single page table with a
   threaded program.  The %cr3 optimization is a nice plus, but it isn't
   why the page table is being shared.  The page table is being shared
   because trying to build a threaded program WITHOUT sharing the page
   table is extremely expensive.  Every time you'd allocate memory or map
   something it would have to be replicated across N page tables.  
   Performance would be destroyed.

But you can still share most parts of the page table, if you exploit
the two level approach.
Yes, you can rewrite a pte, but an invlpg intruction is very expensive!
remember you have to operate TLB, which should be avoided in most time.


More information about the Commits mailing list