Linux – Understanding Processor Frequency part of cat /proc/cpuinfo

cpulinux

I was looking at my processor SPECS on my Ubuntu Linux 11.10 system.

Here is the end of the output of the command cat /proc/cpuinfo:

processor   : 3
vendor_id   : GenuineIntel
cpu family  : 6
model       : 37
model name  : Intel(R) Core(TM) i3 CPU       M 330  @ 2.13GHz
stepping    : 2
cpu MHz     : 933.000
cache size  : 3072 KB
physical id : 0
siblings    : 4
core id     : 2
cpu cores   : 2
apicid      : 5
initial apicid  : 5
fdiv_bug    : no
hlt_bug     : no
f00f_bug    : no
coma_bug    : no
fpu     : yes
fpu_exception   : yes
cpuid level : 11
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm arat dts tpr_shadow vnmi flexpriority ept vpid
bogomips    : 4256.47
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management:

What I don't get are the lines marked:

model name  : Intel(R) Core(TM) i3 CPU       M 330  @ 2.13GHz
cpu MHz     : 933.000

The processor frequency here is 2.13 GHz on the first line and 933 Mhz on the second. Which
is the correct one? Is the 2.13 GHz a refer to the sum of the frequencies of the cores?

Finally, which of these frequency tells me about the cycles per second / clock ticks per second taken by my system clock?

EDIT: In a small extension to Bruno Pereira's nice answer, I found that making a processor operate at different frequencies on the fly is also dynamic frequency scaling or cpu throttling.
Here are two webpages which could be of interest:

http://en.wikipedia.org/wiki/Dynamic_frequency_scaling

http://en.wikipedia.org/wiki/SpeedStep

Best Answer

Linux uses governors to set which stepping your CPU will operate (if your CPU supports stepping settings).

Normally those are set to On Demmand by default which means your CPU's frequency will be lowered when not under intensive usage.

cpufreq-info is an utility to check the steps available from your CPU, which kernel governor is in use currently per core of your CPU and much more information about your CPU capabilities.
It returns something like

cpufrequtils 007: cpufreq-info (C) Dominik Brodowski 2004-2009
Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:
  driver: powernow-k8
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 8.0 us.
  hardware limits: 800 MHz - 3.00 GHz
  available frequency steps: 3.00 GHz, 2.30 GHz, 1.80 GHz, 800 MHz
  available cpufreq governors: conservative, ondemand, userspace, powersave, performance
  current policy: frequency should be within 800 MHz and 3.00 GHz.
                  The governor "ondemand" may decide which speed to use
                  within this range.
  current CPU frequency is 800 MHz.
  cpufreq stats: 3.00 GHz:10.45%, 2.30 GHz:0.29%, 1.80 GHz:1.72%, 800 MHz:87.55%  (28605)

For more information on how to check and set your CPU stepping from the command line I have created an answer to another question that explains how to do so here, have a look.

You CPUs maximum frequency is 2.13Ghz but unless your Kernel governor is set to Performance your system will, most of it's idle time, lower that frequency.

933Mhz is the lowest stepping available for your CPU and means probably that your system is not under heavy stress at the moment or it is using a power savings governor.

You can test if you get the same results when your system is under load, if the frequency does not change then you are using a Power savings governor and that is keeping your CPU's frequency at 933Mhz all the time.

Related Question