Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 14 Jan 2002 18:41:25 -0800
From:      Terry Lambert <tlambert2@mindspring.com>
To:        David Greenman <dg@root.com>
Cc:        "James E. Housley" <jeh@FreeBSD.org>, Thomas Hurst <tom.hurst@clara.net>, arch@FreeBSD.org
Subject:   Re: 64 bit counters again
Message-ID:  <3C4396D5.93A84596@mindspring.com>
References:  <Pine.BSF.4.41.0201132057560.62182-100000@prg.traveller.cz> <3C41F3FD.4ECC8CD@mindspring.com> <20020113231459.GA30349@voi.aagh.net> <3C42390A.F9E9F533@mindspring.com> <3C42E899.CB21BD0A@FreeBSD.org> <3C431EE5.1CFF557B@mindspring.com> <20020114100633.B8955@nexus.root.com> <3C43355D.8C9A35A0@mindspring.com> <20020114115739.E8955@nexus.root.com>

next in thread | previous in thread | raw e-mail | index | archive | help
David Greenman wrote:
> >Use a modular counter; count bytes, and reflect them out at 1K
> >boundaries.  Thus the accuracy is 1K, but the precision is 1
> >byte.
> 
>    It's not how we "reflect them out" that's the problem. It's the overflow
> on the internal 32bit precision that's the problem. You could export the
> data in Kbps for all I care, but that has nothing to do with the problem.

The overflow you fear never happens, because you subtract out
the div'ed value from the internal counter each time you add it
to the externalized one, which is why it's a "modular counter",
e.g.:

	driver_byte_count_32 += bytes_this_ISR;
	driver_k_count_32 = driver_byte_count_32 >> 10;
	lock_global_stat();
	global_k_count_32 += driver_k_count_32;
	unlock_global_stat();
	/* avoid feared overflow: this is a modular counter */
	driver_byte_count_32 -= driver_k_count_32 << 10;

-- Terry

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?3C4396D5.93A84596>