Большинство процессоров теперь имеют возможность регулировать их скорость, чтобы помочь сэкономить на батарее / потреблении энергии. Обычно это называется масштабированием частоты процессора . Скорость процессора в реальном времени сообщается этим:
$ sudo cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
Абсолютная (максимальная) скорость процессора сообщается этим:
$ cat /proc/cpuinfo
Конкретно эта строка:
model name : Intel(R) Core(TM) i5 CPU M 560 @ 2.67GHz
Строка, которая показывает cpu MHz
, не показывает максимальную скорость вашего процессора. Это значение вашей текущей скорости. В многоядерной системе, такой как i7 или i5, вы можете увидеть это с помощью этой команды:
$ cat /proc/cpuinfo |grep MHz
cpu MHz : 1199.000
cpu MHz : 1199.000
cpu MHz : 1199.000
cpu MHz : 2667.000
Однако вы можете увидеть абсолютную (максимальную) скорость с помощью этой команды:
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
CPU(s): 4
Thread(s) per core: 2
Core(s) per socket: 2
CPU socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 37
Stepping: 5
CPU MHz: 2667.000
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 3072K
NUMA node0 CPU(s): 0-3
ПРИМЕЧАНИЕ: количество ядер, которые у него есть, NUMAS node0 CPU(s)
равно 4, т. Е. 0,1,2 и 3.
Масштабирование и управление процессором?
Режим, в котором находится ваша система, называется регулятором масштабирования. Похож на губернатора на авто. Вы можете увидеть, какие из них доступны с помощью этой команды:
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
powersave ondemand userspace performance
Вы также можете увидеть, какой из них в данный момент активен:
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
ondemand
Примечание: Команды я показываю включают только 1 - й центральный процессор, cpu0
. Вы можете либо заменить *
путь, чтобы увидеть все ядра, либо выборочно увидеть cpu1
и т. Д.
Вы можете увидеть максимальную и минимальную скорости процессора, доступные для профиля вашего губернатора:
$ sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
2667000
$ sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq
1199000
Более подробная информация доступна в этой статье под названием: Масштабирование частоты процессора в Linux с помощью cpufreq .
Так что насчет cpuinfo_cur_freq?
Этот параметр больше связан со спецификацией ЦП и профилем, в котором он находится в данный момент, а не с полезной информацией о том, как работает ЦП в данный момент. Для реальной оперативной телеметрии я бы использовал scaling_*
настройки ядра.
пример
Я соединил следующий сценарий, чтобы показать столбцы ЦП по столбцам, чтобы было легче увидеть, как выглядят различные настраиваемые ядра:
#!/bin/bash
nthCore=$(lscpu|grep node0|cut -d"-" -f2)
for i in /sys/devices/system/cpu/cpu0/cpufreq/{cpuinfo,scaling}_*; do
pname=$(basename $i)
[[ "$pname" == *available* ]] || [[ "$pname" == *transition* ]] || \
[[ "$pname" == *driver* ]] || [[ "$pname" == *setspeed* ]] && continue
echo "$pname: "
for j in `seq 0 $nthCore`;do
kparam=$(echo $i | sed "s/cpu0/cpu$j/")
sudo cat $kparam
done
done | paste - - - - - | column -t
Когда вы запустите его, вы получите следующий вывод:
$ ./cpuinfo.bash
cpuinfo_cur_freq: 2667000 2667000 2667000 2667000
cpuinfo_max_freq: 2667000 2667000 2667000 2667000
cpuinfo_min_freq: 1199000 1199000 1199000 1199000
scaling_cur_freq: 2667000 2266000 1333000 2667000
scaling_governor: ondemand ondemand ondemand ondemand
scaling_max_freq: 2667000 2667000 2667000 2667000
scaling_min_freq: 1199000 1199000 1199000 1199000
Вы можете видеть, что scaling_cur_freq
перестраиваемый модуль показывает замедление в ядрах № 1 и 2.
/proc/cpuinfo
сообщили бы так же, какcpuinfo_cur_freq
? Это явно не так! Суть моего вопроса до сих пор остается нерешенной. Я обнаружил этот инструмент, который как-то сообщает «истинную частоту», но я не уверен, что он работает правильно. Он предоставляет некоторые источники для своего алгоритма, но на самом деле не дает большого объяснения несоответствия.