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>