[runtime]wrong frequency estimation

Stone, Joshua I joshua.i.stone@intel.com
Thu Jun 7 02:12:00 GMT 2007


Hi Masami,

Masami Hiramatsu wrote:
> Hi,
> 
> I found that __stp_estimate_cpufreq() in runtime/time.c returned inaccurate
> cpu frequency, especially on Xen kernel. If frequency is estimated smaller
> than true frequency, gettimeofday_*() can rewind.

Yes, virtualization can certainly be a cause of measurement error.

> Thus, I think we better use special methods for each architecture,
> e.g. cpufreq_quick_get() and cpu_khz for i386/x86-64 and local_cpu_data->
> itc_freq for ia64. If we can't use those methods, estimating frequency by
> using udeley() is the last resort.
> I attached a patch to do that.
> 
> What would you think about this idea?

If you look in _stp_init_time, the frequency from __stp_estimate_cpufreq 
is overridden by a call to cpufreq_get().  It's missing your 
alternatives of using cpu_khz or itc_freq, but you could add it there.


I've been thinking about this as part of bug #3916.  The other thing 
that I think is causing gettimeofday_*() rewinds is a broken assumption 
of mine -- get_cycles() is *not* necessarily related to the current CPU 
frequency.

On ia64, the ITC is always independent of the instruction frequency.  We 
should always be using itc_freq for our calculations.

On older Intel x86 processors, the TSC rate is equal to the processor 
clock cycle, which may be affected by SpeedStep.  Thus hooking into 
cpufreq APIs is probably necessary.

But for some Intel Xeons (family F, models 3+), Intel Core, and Intel 
Core 2, the TSC increments at a constant rate, regardless of the current 
CPU clock.  Thus it's incorrect for us to use the cpufreq APIs for these 
processors.  I'm still not sure how to determine what the actual TSC 
rate is, but the udelay estimation might have to do.

I haven't looked at what AMD processors do with TSC, or any other 
architectures with their get_cycles().  If others can chime in here, I 
would appreciate it.

Thanks,

Josh



More information about the Systemtap mailing list