Question: I found two commands to output information about my CPU: `cat /proc/cpuinfo` and `lscpu`. `/proc/cpuinfo` shows that my CPU speed is 2.1 Ghz, whereas `lspcu` says it is 3167 Mhz. Which one is correct?

This is my exact output from `cat /proc/cpuinfo` about my processor speed:

```
model name  : Intel(R) Core(TM) i7-4600U CPU @ 2.10GHz

```

And this is from `lscpu`:

```
CPU MHz:               3225.234

```

(For some reason, `lscpu` outputs differently every time, varying between 3100 and 3300 MHz)

Answer: 
To see the current speed of each core I do this:

```
watch -n.1 "grep \"^[c]pu MHz\" /proc/cpuinfo"

```

**Notes:**

This does not work on server CPUs such as the Intel Xeon series. On such machines it will show the base frequency only. To show the turbo frequency, you'll need cpupower or turbostat. See @Maxim Egorushkin's answer.

If your `watch` command does not work with intervals smaller than one second, modify the interval like so:

```
watch -n1 "grep \"^[c]pu MHz\" /proc/cpuinfo"

```

This displays the `cpu speed` of each core in real time.

By running the following command, one or more times, from another terminal one can see the speed change with the above `watch` command, assuming `SpeedStep` is enabled (`Cool'n'Quiet` for `AMD`).

```
echo "scale=10000; 4*a(1)" | bc -l &

```

(This command uses `bc` to calculate `pi` to 10000 places.)
CPU frequencies are kept in the kernel but they can be a little "off". You can see them using:

```
$ cd /sys/devices/system/cpu
$ paste <(cat cpu*/cpufreq/affected_cpus) <(cat cpu*/cpufreq/scaling_cur_freq) | column -s $'\t' -t
0  833914
1  800021
2  800086
3  800029
4  800036
5  800460
6  800118
7  800141

```

If you don't need to know the CPU #'s a shorter method is simply using:

```
$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
1396354
800058
800050
800024
800005
800017
800001
1392006

```