From: Carl E. L. <ce...@li...> - 2013-08-05 16:35:56
|
OProfile, fix the units for the reported CPU frequency. The freqency of the processor is found by function op_cpu_frequency() in libutil/op_cpufreq.c by either checking for the frequency in the file /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq or from /proc/cpuinfo. Most of the Intel processors get the frequency from cpuinfo_max_freq. The frequency stored in this file is stored in units of KHz for the Intel processors I can check. I do not know what other architectures store the CPU frequency in this file. When this value is printed, the value is printed by the routine describe_cpu() in libpp/op_header.cpp the assumption is the freqency is assumed to be MHz. For example, the following is what is printed by my laptop after running opreport Using /home/carll/oprofile_data/samples/ for samples directory. CPU: Core 2, speed 2.534e+06 MHz (estimated) Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit ma\ sk of 0x00 (Unhalted core cycles) count 100000 Note the speed is stated as 2.534e+06 MHz that is Mega Mega Hz or Tera Hz which is a factor of 1000 high. The fix is to have the function op_cpu_freq_sys_devices() in libutil/op_cpufreq.c to adjust the frequency read from the file /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq by dividing by 1000 to return the frequency in units of MHz. The following patch implements this fix for reporting the estimated processor frequency. Signed-off-by: Carl Love <ce...@us...> --- libutil/op_cpufreq.c | 5 ++++- 1 files changed, 4 insertions(+), 1 deletions(-) diff --git a/libutil/op_cpufreq.c b/libutil/op_cpufreq.c index 17cfee4..8678b08 100644 --- a/libutil/op_cpufreq.c +++ b/libutil/op_cpufreq.c @@ -110,7 +110,10 @@ static double op_cpu_freq_sys_devices(void) free(line); op_close_file(fp); - return fval; + /* Return the frequency in MHz. When the frequency is + * printed it is assumed to be in units of MHz. + */ + return fval/1000; } -- 1.7.1 |
From: Maynard J. <may...@us...> - 2013-08-07 12:38:25
|
On 08/05/2013 09:41 AM, Carl E. Love wrote: > OProfile, fix the units for the reported CPU frequency. > > The freqency of the processor is found by function op_cpu_frequency() in > libutil/op_cpufreq.c by either checking for the frequency in the file > /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq or from /proc/cpuinfo. > > Most of the Intel processors get the frequency from cpuinfo_max_freq. The > frequency stored in this file is stored in units of KHz for the Intel > processors I can check. *Suravee, Will, Andi*, can you please check the /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq file on AMD, ARM, and Intel processors to validate Carl's assumption that the value is stored in units of KHz. Thanks. -Maynard > I do not know what other architectures store the > CPU frequency in this file. When this value is printed, the value is printed > by the routine describe_cpu() in libpp/op_header.cpp the assumption is the > freqency is assumed to be MHz. For example, the following is what is printed > by my laptop after running opreport > > Using /home/carll/oprofile_data/samples/ for samples directory. > CPU: Core 2, speed 2.534e+06 MHz (estimated) > Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit ma\ > sk of 0x00 (Unhalted core cycles) count 100000 > > Note the speed is stated as 2.534e+06 MHz that is Mega Mega Hz or Tera Hz which > is a factor of 1000 high. > > The fix is to have the function op_cpu_freq_sys_devices() in > libutil/op_cpufreq.c to adjust the frequency read from the file > /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq by dividing by 1000 > to return the frequency in units of MHz. The following patch implements this > fix for reporting the estimated processor frequency. > > Signed-off-by: Carl Love <ce...@us...> > --- > libutil/op_cpufreq.c | 5 ++++- > 1 files changed, 4 insertions(+), 1 deletions(-) > > diff --git a/libutil/op_cpufreq.c b/libutil/op_cpufreq.c > index 17cfee4..8678b08 100644 > --- a/libutil/op_cpufreq.c > +++ b/libutil/op_cpufreq.c > @@ -110,7 +110,10 @@ static double op_cpu_freq_sys_devices(void) > free(line); > op_close_file(fp); > > - return fval; > + /* Return the frequency in MHz. When the frequency is > + * printed it is assumed to be in units of MHz. > + */ > + return fval/1000; > } > > |
From: Andi K. <an...@fi...> - 2013-08-07 14:53:23
|
On Wed, Aug 07, 2013 at 07:37:00AM -0500, Maynard Johnson wrote: > On 08/05/2013 09:41 AM, Carl E. Love wrote: > > OProfile, fix the units for the reported CPU frequency. > > > > The freqency of the processor is found by function op_cpu_frequency() in > > libutil/op_cpufreq.c by either checking for the frequency in the file > > /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq or from /proc/cpuinfo. > > > > Most of the Intel processors get the frequency from cpuinfo_max_freq. The > > frequency stored in this file is stored in units of KHz for the Intel > > processors I can check. > > *Suravee, Will, Andi*, can you please check the /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq file on AMD, ARM, and Intel processors to validate Carl's assumption that the value is stored in units of KHz. Thanks. It's stored in Khz, but it's not necessarily the max frequency on Intel systems these days due to turbo. It would be better to report the average frequency for the measurement. This would need new interfaces unfortunately. Maybe it would be best to just drop the information for now. -Andi |
From: Maynard J. <may...@us...> - 2013-08-07 16:04:05
|
On 08/07/2013 09:53 AM, Andi Kleen wrote: > On Wed, Aug 07, 2013 at 07:37:00AM -0500, Maynard Johnson wrote: >> On 08/05/2013 09:41 AM, Carl E. Love wrote: >>> OProfile, fix the units for the reported CPU frequency. >>> >>> The freqency of the processor is found by function op_cpu_frequency() in >>> libutil/op_cpufreq.c by either checking for the frequency in the file >>> /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq or from /proc/cpuinfo. >>> >>> Most of the Intel processors get the frequency from cpuinfo_max_freq. The >>> frequency stored in this file is stored in units of KHz for the Intel >>> processors I can check. >> >> *Suravee, Will, Andi*, can you please check the /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq file on AMD, ARM, and Intel processors to validate Carl's assumption that the value is stored in units of KHz. Thanks. > > It's stored in Khz, but it's not necessarily the max frequency on Intel systems these days due to turbo. It would be better to report the average frequency for the measurement. This would need new interfaces unfortunately. > > Maybe it would be best to just drop the information for now. Thanks for the reply, Andi. If we dropped that info from the opreport output for Intel systems having turbo, we would need to version our opreport schema, since the current doc/opreport.xsd has the following attribute: <xs:attribute name="mhz" type="xs:decimal" use="required"/> We could change this to 'optional' versus 'required', but that change may break tools that currently use the oprofile XML output, requiring an update to such tools to recognize the new schema version. The srcdoc for op_cpu_frequency() says it returns "the estimated cpu frequency in Mhz", so I think this is probably OK as is. -Maynard > > -Andi > |
From: Maynard J. <may...@us...> - 2013-08-12 16:31:29
|
On 08/05/2013 09:41 AM, Carl E. Love wrote: > OProfile, fix the units for the reported CPU frequency. Patch committed. Thanks. -Maynard > > The freqency of the processor is found by function op_cpu_frequency() in > libutil/op_cpufreq.c by either checking for the frequency in the file > /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq or from /proc/cpuinfo. > > Most of the Intel processors get the frequency from cpuinfo_max_freq. The > frequency stored in this file is stored in units of KHz for the Intel > processors I can check. I do not know what other architectures store the > CPU frequency in this file. When this value is printed, the value is printed > by the routine describe_cpu() in libpp/op_header.cpp the assumption is the > freqency is assumed to be MHz. For example, the following is what is printed > by my laptop after running opreport > > Using /home/carll/oprofile_data/samples/ for samples directory. > CPU: Core 2, speed 2.534e+06 MHz (estimated) > Counted CPU_CLK_UNHALTED events (Clock cycles when not halted) with a unit ma\ > sk of 0x00 (Unhalted core cycles) count 100000 > > Note the speed is stated as 2.534e+06 MHz that is Mega Mega Hz or Tera Hz which > is a factor of 1000 high. > > The fix is to have the function op_cpu_freq_sys_devices() in > libutil/op_cpufreq.c to adjust the frequency read from the file > /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq by dividing by 1000 > to return the frequency in units of MHz. The following patch implements this > fix for reporting the estimated processor frequency. > > Signed-off-by: Carl Love <ce...@us...> > --- > libutil/op_cpufreq.c | 5 ++++- > 1 files changed, 4 insertions(+), 1 deletions(-) > > diff --git a/libutil/op_cpufreq.c b/libutil/op_cpufreq.c > index 17cfee4..8678b08 100644 > --- a/libutil/op_cpufreq.c > +++ b/libutil/op_cpufreq.c > @@ -110,7 +110,10 @@ static double op_cpu_freq_sys_devices(void) > free(line); > op_close_file(fp); > > - return fval; > + /* Return the frequency in MHz. When the frequency is > + * printed it is assumed to be in units of MHz. > + */ > + return fval/1000; > } > > |