Skip site navigation (1)Skip section navigation (2)
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>