Subject: Re: microtime(9) slow on i386?
To: Perry E. Metzger <perry@wasabisystems.com>
From: Jaromir Dolecek <jdolecek@NetBSD.org>
List: tech-perform
Date: 10/23/2001 22:39:56
Perry E. Metzger wrote:
> We can check the cycle timer, but the problem there is that we can
> easily lose on a machine with a variable rate clock.
True, but we might use aproximation like this:
1. In hardclock(9), remember rdtsc value (to, say 'hardclock_rdtsc')
2. change microtime(9) to compute the time like:
struct timeval tv;
int s = splclock();
tv = mono_time;
splx(s);
tv.tv_usec += (current_rdtsc - hardclock_rdtsc) * curr_proc_clock_rate;
iv (tv.tv_usec > 1000000) {
tv.tv_sec++;
tv.tv_usec -= 1000000;
}
This should be much faster. This should be as accurate as current
method on fixed-clock-rate processors, and since the base ('mono_time')
is updated each 1/100 s on i386, the difference in accuracy of time
on variable rate processors should be negliable too.
Jaromir
--
Jaromir Dolecek <jdolecek@NetBSD.org> http://www.NetBSD.org/Ports/i386/ps2.html
-= Those who would give up liberty for a little temporary safety deserve =-
-= neither liberty nor safety, and will lose both. -- Benjamin Franklin =-