cvs commit: src/sys/conf options.i386 src/sys/i386/i386
machdep.c mp_machdep.c pmap.c swtch.s src/sys/i386/include md_var.h
pmap.h smp.h src/sys/i386/isa apic_vector.s intr_machdep.h
src/sys/kern kern_switch.c kern_synch.c kern_thr.c kern_thread.c
peter at wemm.org
Wed Apr 2 17:23:43 PST 2003
Nate Lawson wrote:
> On Wed, 2 Apr 2003, Peter Wemm wrote:
> > Commit a partial lazy thread switch mechanism for i386. it isn't as lazy
> > as it could be and can do with some more cleanup. Currently its under
> > options LAZY_SWITCH. What this does is avoid %cr3 reloads for short
> > context switches that do not involve another user process.
> This is awesome!
> > One non-trivial change was to select a new thread before calling
> > cpu_switch() in the first place. This allows us to catch the silly
> > case of doing a cpu_switch() to the current process. This happens
> > uncomfortably often. This simplifies a bit of the asm code in cpu_switch
> > (no longer have to call choosethread() in the middle). This has been
> > implemented on i386 and (thanks to jake) sparc64. The others will come
> > soon. This is actually seperate to the lazy switch stuff.
> Shouldn't there be a "if (thread == curthread) return;" in the scheduling
> code somewhere?
There is now. :-)
newtd = choosethread();
if (td != newtd)
cpu_switch(td, newtd); /* SHAZAM!! */
sparc64's cpu_switch() already optimized this case. i386 didn't. I haven't
checked alpha/ia64 yet, but they're still using the old no-args API.
Peter Wemm - peter at wemm.org; peter at FreeBSD.org; peter at yahoo-inc.com
"All of this is for nothing if we don't go to the stars" - JMS/B5
More information about the cvs-all