cvs commit: src/sys/i386/i386 pmap.c

Alan Cox alc at cs.rice.edu
Sun Oct 26 13:54:52 PST 2003


On Sun, Oct 26, 2003 at 12:45:31AM -0700, Don Lewis wrote:
> 
> Why not allow preemption, but just mark the thread as being ineligable
> for migration while it is executing pmap_zero_page() and similar bits of
> code?  The thread might have to wait longer to get the CPU again after
> it was preempted, but so what.

You could.  My thoughts are:

 - Preemption encourages you, the kernel developer, to distinguish
   between what is shared and what is thread private, as opposed
   to what is shared and what is CPU private.  The distinction
   between thread private and CPU private only matters when you're
   dealing with low-level state such as TLBs.

 - The switchin mechanism is very simple to implement and use.
   Setup and shutdown are two assignment statements.  The overhead
   on a context switch is a conditional branch.  I don't think
   what you propose has any less overhead.
    - I expect, however, that our scheduler(s) will someday support
      what you propose.

 - Most of the overhead in pmap_zero_page() stems from the use
   of a single, shared KVA.  A mapping using that KVA is thread
   private, hence the use of the switchin mechanism to avoid IPIs
   for TLB shootdown, but the KVA itself is shared, hence the use
   of a mutex to control access to it.

 - I would rather see us eliminate the mutex by developing a low-
   overhead scheme for allocating temporary KVA.  This scheme, like
   the switchin mechanism, has many possible uses throughout the
   kernel, both for thread private and shared mappings.  In fact,
   this scheme might itself be implemented using CPU private data
   for efficiency.  That's ok as far as I'm concerned because we've
   then encapsulated the aspects of managing CPU private stuff
   behind one general-purpose API, rather than having it pop up
   in pmap_zero_page(), SMP optimized pipes, etc.

Regards,
Alan





More information about the cvs-all mailing list