私がする時
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です。
システムのモードはスケーリングガバナーと呼ばれます。車の知事に似ています。次のコマンドで、どれが利用可能かを確認できます。
_$ 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
_のみが含まれています。パスの_*
_を代入してすべてのコアを表示するか、または_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でのCPU周波数スケーリングとcpufreq を参照してください。
このパラメーターは、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のスローダウンを示していることがわかります。