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>