為什麼 cpuinfo_cur_freq 和 /proc/cpuinfo 報告不同的數字?
當我做
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。
有誰知道發生了什麼?
大多數 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
本文提供了更多詳細資訊,標題為:使用 cpufreq 在 Linux 中進行 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 中顯示出減速。