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

John Baldwin jhb at FreeBSD.org
Mon Nov 1 11:31:20 PST 2004


On Friday 29 October 2004 06:51 pm, Mike Silbersack wrote:
> On Fri, 29 Oct 2004, John Baldwin wrote:
> > On Friday 29 October 2004 03:10 pm, Alan Cox wrote:
> >>   Implement per-CPU SYSMAPs, i.e., CADDR* and CMAP*, to reduce lock
> >>   contention within pmap_zero_page() and pmap_copy_page().
> >
> > Cool.  One note: I think you have to move the sched_pin before the lookup
> > in the sysmaps_pcpu[] table so you don't migrate to another CPU if you
> > get an interrupt after you've locked the sysmap.  I'm curious if can get
> > rid of the sysmaps lock altogether actually.  It might require a critical
> > section to do so though, and zero'ing page(s) is probably too long to
> > defer interrupts.
> >
> > --
> > John Baldwin <jhb at FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
>
> I think we really need some sort of light-weight critical_enter that
> simply assures you that you won't get rescheduled to another CPU, but
> gives no guarantees beyond that.

That's very easy, it's just critical_enter/exit() without the 
cpu_critical_*().  As mentioned in the SMP "design doc", the cpu_critical_*() 
are only needed for spin mutexes that are used in both top-half and 
bottom-half code (where ithreads are top-half, but "fast" interrupts and the 
code that schedules ithreads are bottom-half).  I've thought about shoving 
cpu_critical_*() off into another API that spin mutexes would use, but that 
not all critical sections would use, this would give us critical sections 
that don't block interrupts, but just block preempting.  For idle page 
zeroing though, I'm not sure we really want to use even a cheap critical 
section since it would still defer an ithread from running, and ithreads are 
more important than idle page zeroing.

Note that you can easily pin the current thread to its current CPU via 
sched_pin/unpin() and that that works across preemptions.

-- 
John Baldwin <jhb at FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org


More information about the cvs-all mailing list