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>

index | next in thread | previous in thread | raw e-mail

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.


home | help

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