回答:
ほとんどの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です。
システムのモードはスケーリングガバナーと呼ばれます。車の知事に似ています。次のコマンドで、どれが利用可能かを確認できます。
$ 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周波数スケーリングを参照してください。
このパラメーターは、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でスローダウンを示していることがわかります。
/sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_cur_freq
は最高速度を示していますが、それらの名前は現在の速度を意味しますが、これはあなたが求めている切断ですよね?私のシステムも同様にそれらを表示します。
/sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
cat /proc/cpuinfo | grep MHz
、現在のクロック速度を返さなくなりました。カーネルBugzillaで、彼らはそれが意図的であると言います。bugzilla.kernel.org/show_bug.cgi?id=197009を参照してください。また、ここに述べています:phoronix.com/...
/proc/cpuinfo
、同じことを報告しませんcpuinfo_cur_freq
か?それは明らかにしません!私の質問の核心は未解決のままです。どういうわけか「真の頻度」を報告するように見えるこのツールを明らかにしましたが、それが正しく機能するかどうかはわかりません。それはそのアルゴリズムのいくつかのソースを提供しますが、実際には不一致の優れた説明を提供しません。