cpuinfo_cur_freqと/proc/cpuinfoが異なる数値を報告するのはなぜですか?

cpuinfo_cur_freqと/proc/cpuinfoが異なる数値を報告するのはなぜですか?

私がするとき

sudo watch -n1 cat /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_cur_freq

1.8~2.7GHzが出ます。絶対2.7を超えません。

私がするとき

watch -n1 "cat /proc/cpuinfo | grep MHz"

768MHz~1.8GHzを得る。絶対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でCPU周波数を調整するには、cpufreqを使用してください。

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の速度が遅くなることがわかります。

おすすめ記事