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>
