Timers and timing, was: MySQL Performance 6.0rc1
Chuck Swiger
cswiger at mac.com
Fri Oct 28 13:44:38 PDT 2005
Benjamin Lutz wrote:
> Chuck Swiger wrote:
>>For one case, I have some code which needs to update statistics like
>>"packets sent per second" (or "per minute" or "per hour") on a periodic
>>basis. I use a reasonable timeout-- ~50ms-- for a call to select() (or
>>pcap_dispatch(), etc) so I check time() perhaps 20 times a second, and
>>then update my per-second stats when I notice that time(&now) returns a
>>different value.
>>
>>Is there a better way of running code once a second, as close to the
>>time the clock ticks?
>
> Once you've seen the clock tick, you can then probably use a longer
> timeout in the next select, something in the 700ms range?
I use alarm() to schedule period wakeups at one-minute, hourly etc intervals,
after doing a shuffle to sync with localtime() and the fractional second part
so that they are neatly aligned.
Well, the issue is that these calls don't always return within the time you
give them, and the pcap_dispatch() timer doesn't even start counting until it
sees a packet, so my choice of timeout length is driven more by how much off am
I willing to be if the call returns late. Giving them a half-second timeout
sometimes seems to mean up to a 1.5 or 2 second pause if the network is
completely quiet. [1]
Take care,
--
-Chuck
[1]: If I don't use threaded DNS resolver code that was foisted upon me and
avoid -pthreads it's better. :-)
More information about the freebsd-current
mailing list