cvs commit: src/sys/alpha/include cpu.h src/sys/amd64/include
cpu.h src/sys/arm/include cpu.h src/sys/i386/include cpu.h
src/sys/ia64/include cpu.h src/sys/powerpc/include cpu.h
src/sys/sparc64/include cpu.h src/sys/kern kern_mutex.c
dfr at nlsystems.com
Wed Aug 4 01:24:54 PDT 2004
On Tuesday 03 August 2004 21:23, Maxime Henrion wrote:
> Marcel Moolenaar wrote:
> > On Tue, Aug 03, 2004 at 06:44:27PM +0000, Maxime Henrion wrote:
> > > mux 2004-08-03 18:44:27 UTC
> > >
> > > FreeBSD src repository
> > >
> > > Modified files:
> > > sys/alpha/include cpu.h
> > > sys/amd64/include cpu.h
> > > sys/arm/include cpu.h
> > > sys/i386/include cpu.h
> > > sys/ia64/include cpu.h
> > > sys/powerpc/include cpu.h
> > > sys/sparc64/include cpu.h
> > > sys/kern kern_mutex.c
> > > Log:
> > > Instead of calling ia32_pause() conditionally on __i386__ or
> > > __amd64__ being defined, define and use a new MD macro,
> > > cpu_spinwait(). It only expands to something on i386 and amd64,
> > > so the compiled code should be identical.
> > Cool, but can you explain to me how exactly cpu_spinwait() is to be
> > different from cpu_idle() that we cannot use cpu_idle()?
> They serve very different purposes. The cpu_spinwait() macro is used
> on x86 and amd64 to insert a "pause" instruction before retrying to
> obtain a spin mutex. It is supposed to improve performance on P4 and
> newer machines. It is empty on other architectures because we don't
> have such a thing, or at least it's not implemented.
> The cpu_idle() hook is called in the idle process, and on x86 it only
> does the "sti; hlt" instructions, so it can't fulfill the role of the
> cpu_spinwait() macro.
In particular, on P4s with HTT, a pause instruction will briefly give
all cpu resources to the other virtual cpu, which means that the
virtual cpu waiting on the lock is not wasting valuable cpu resources.
More information about the cvs-all