This is the mail archive of the
cygwin
mailing list for the Cygwin project.
Re: strange bug in gettimeofday function
- From: "Cary Jamison" <Cary_Jamison at Symantec dot com>
- To: cygwin at cygwin dot com
- Date: Mon, 12 Feb 2007 14:17:26 -0700
- Subject: Re: strange bug in gettimeofday function
- References: <1562006224.20070211192014@gnu.org>
Andrew Makhorin wrote:
>> Hi,
>>
>> I detected a strange bug in the standard function gettimeofday.
>> It *sometimes* reports the time which being expressed as the integer
>> number of milliseconds is *less* than the time obtained *earlier*
>> with the same function.
>>
>> The expression 1000000 * tv.tv_sec + tv.tv_usec is calculated in
>> 64-bit arithmetic, so overflow cannot happen. The negative difference
>> in the time values on two successive calls is about 100 milliseconds.
Is this a dual-core AMD perchance?
There are some high-performance timing instructions that can get off between
the two cores. I wouldn't think that gettimeofday would use these, but
maybe?
Let's see, it looks like the RDTSC instruction, or the Windows
QueryPerformanceCounter(). This problem doesn't occur on Intel multi-cores.
It is caused by AMD attempting to save power by throttling the cores back
separately. You can google for lots of information about the pros/cons of
different patches by Microsoft and AMD to resolve the problem.
I don't have the cygwin source to check if these are used anywhere.
Cary
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/