Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 19 Dec 2009 12:27:12 +0100
From:      Ulrich =?utf-8?B?U3DDtnJsZWlu?= <uqs@spoerlein.net>
To:        John Baldwin <jhb@freebsd.org>
Cc:        Harti Brandt <harti@freebsd.org>, freebsd-arch@freebsd.org
Subject:   Re: network statistics in SMP
Message-ID:  <20091219112711.GR55913@acme.spoerlein.net>
In-Reply-To: <200912151313.28326.jhb@freebsd.org>
References:  <20091215103759.P97203@beagle.kn.op.dlr.de> <200912150812.35521.jhb@freebsd.org> <20091215183859.S53283@beagle.kn.op.dlr.de> <200912151313.28326.jhb@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 15.12.2009 at 13:13:28 -0500, John Baldwin wrote:
> On Tuesday 15 December 2009 12:45:13 pm Harti Brandt wrote:
> > I see. I was also thinking along these lines, but was not sure whether it 
> > is worth the trouble. I suppose this does not help to implement 64-bit 
> > counters on 32-bit architectures, though, because you cannot read them 
> > reliably without locking to sum them up, right?
> 
> Either that or you just accept that you have a small race since it is only stats. :)

This might be stupid, but can we not easily *read* 64bit counters
on 32bit machines like this:

do {
    h1 = read_upper_32bits;
    l1 = read_lower_32bits;
    h2 = read_upper_32bits;
    l2 = read_lower_32bits; /* not needed */
} while (h1 != h2);

sum64 = (h1<<32) + l1;

or something like that? If h2 does not change between readings, no
wrap-around has occured. If l1 was read in between the readings of h1
and h2, the code above is sound. Right?

Regards,
Uli



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