Date: Wed, 2 Jan 2002 15:53:55 +0100 (CET) From: Michal Mertl <mime@traveller.cz> To: Matthew Dillon <dillon@apollo.backplane.com> Cc: Bruce Evans <bde@zeta.org.au>, Mike Smith <msmith@FreeBSD.ORG>, Bernd Walter <ticso@cicely8.cicely.de>, <arch@FreeBSD.ORG> Subject: Re: When to use atomic_ functions? (was: 64 bit counters) Message-ID: <Pine.BSF.4.41.0201021003580.18429-100000@prg.traveller.cz> In-Reply-To: <200201012349.g01NnKA40071@apollo.backplane.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 1 Jan 2002, Matthew Dillon wrote:
>
> :On Tue, 1 Jan 2002, Mike Smith wrote:
> :
> :> > MBs are not needed for the variable itself, but they are making this
> :> > family of functions very expensive.
> :> > It's not very wise to handle counters with atomic_ functions unless
> :> > the need to have MBs in them is not removed.
> :>
> :> It's imperative to use atomic operations for counters on SMP systems.
> :
> :Not true. Atomic operations for counters are not needed on SMP systems
> :in at least the following cases:
> :- if there is a lock that prevents other processes from accessing the
> : counter
> :- if the counters are per-CPU. See previous mail by someone named msmith.
> :
> :Bruce
>
> Well, I'm not sure how I got on the Cc list but I agree with Bruce
> on this one. An SMP-synchronized counter increment is a ridiculous
> waste of time. They should be per-cpu and then we don't care *how*
> wide the counters are. Having programs like netstat, or our sysctl
> mechanism, aggregate the count values is easy.
>
I don't know how much time will be wasted - my measurements on pII show
the atomic_ operations aren't that expensive.
There is a lot of counters and to have all of them for each processor
would waste a bit of memory but more importantly it would require some
structural changes - which may end up causing counters update being even
more expensive that atomic_. Using atomic ops is easy. Even if you
somewhere forget to use atomic_, if would still work - only with slight
chance the value become wrong.
Anyway I'm just building world with my changes (only kernel and netstat
modified). I'm sure I missed several places to do some changes but at
least it runs and counts (I hope I'm wrong - I used egrep a lot).
Do I understand correctly that on i386 I don't need anything special for
atomic_XXX_{rel|acq}? I implemented only one version (with cmpxchg8b - on
SMP with lock prepended) and others are just #defines to use the same
function.
My patch will break other archs but I'll look at their atomic.h and see if
I can make appropriate changes.
--
Michal Mertl
mime@traveller.cz
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-arch" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.41.0201021003580.18429-100000>
