Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 4 Aug 2004 09:24:46 +0100
From:      Doug Rabson <dfr@nlsystems.com>
To:        Maxime Henrion <mux@FreeBSD.org>
Cc:        Marcel Moolenaar <marcel@xcllnt.net>
Subject:   Re: 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
Message-ID:  <200408040924.46223.dfr@nlsystems.com>
In-Reply-To: <20040803202342.GH13608@elvis.mu.org>
References:  <200408031844.i73IiRb4082245@repoman.freebsd.org> <20040803191313.GB99599@ns1.xcllnt.net> <20040803202342.GH13608@elvis.mu.org>

next in thread | previous in thread | raw e-mail | index | archive | help
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.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200408040924.46223.dfr>