当我做
sudo watch -n1 cat /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_cur_freq
我得到 1.8 - 2.7 GHz。它永远不会超过 2.7。
当我这样做时
watch -n1 "cat /proc/cpuinfo | grep MHz"
我得到 768 MHz - 1.8 GHz。它永远不会超过 1.8。
有人知道发生了什么事吗?
答案1
大多数 CPU 现在都具有调整速度的功能,以帮助节省电池/电源的使用。它通常被称为CPU频率缩放。 CPU 的实时速度报告如下:
$ sudo cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
绝对(最大)CPU 速度报告如下:
$ cat /proc/cpuinfo
具体来说这一行:
model name : Intel(R) Core(TM) i5 CPU M 560 @ 2.67GHz
显示的行cpu MHz
不显示您的 CPU 的最大速度。这个值就是你当前的速度。在多核系统(例如 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。
CPU 缩放和调节?
您的系统所处的模式称为缩放调节器。类似于汽车上的调速器。您可以使用此命令查看哪些可用:
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
powersave ondemand userspace performance
您还可以查看当前处于活动状态的一项:
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
ondemand
笔记:我显示的命令仅包括第一个 cpu cpu0
,.您可以在*
路径中替换 a 以查看所有核心,也可以有选择地查看cpu1
等。
您可以查看您的调控器配置文件可用的最大和最小 CPU 速度:
$ 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 调整 CPU 频率。
那么cpuinfo_cur_freq呢?
该参数更多地与 CPU 的规格及其当前所处的配置文件有关,而不是与 CPU 当前运行方式相关的任何有用参数。对于实际操作遥测,我将使用scaling_*
内核可调参数。
例子
我将以下脚本放在一起以按列显示 CPU 核心,这样可以更轻松地查看各种内核可调参数的外观:
#!/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 的速度减慢。