cpuinfo_cur_freq와 / proc / cpuinfo가 다른 숫자를보고하는 이유는 무엇입니까?


13

내가 할 때

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 이상으로 올라가지 않습니다.

아무도 무슨 일인지 알고 있습니까?

답변:


14

대부분의 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의 최대 속도가 표시 cpu MHz 되지 않습니다 . 이 값은 현재 속도입니다. 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. *경로 에서를 대체하여 모든 코어를 보거나 선택적으로 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에서 속도 저하를 보이고 있음을 알 수 있습니다 .


그것이 사실이라면, ? /proc/cpuinfo와 동일하게보고 하지 않을 것입니다 cpuinfo_cur_freq. 분명히 그렇지 않습니다! 내 질문의 핵심은 여전히 ​​해결되지 않은 채 남아 있습니다. 어떻게 든 "진정한 빈도"를보고하는 것처럼 보이는 이 도구 를 찾았 지만 제대로 작동하는지 확실하지 않습니다. 알고리즘의 일부 소스를 제공하지만 실제로 불일치에 대한 훌륭한 설명 을 제공하지는 않습니다 .
wulftone

/sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_cur_freq이름이 현재 속도를 암시하더라도 최대 속도를 표시하는 등의 행 은 요청하는 연결 끊기입니다. 내 시스템도이 방법을 보여줍니다.
slm

주파수 스케일링을 켜면 실제 CPU 주파수를 얻기 위해 이것을 사용해야합니다./sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
slm

2
참고 : 커널 4.13부터는 cat /proc/cpuinfo | grep MHz더 이상 현재 클럭 속도를 반환하지 않습니다 . 커널 부질 라에서는 의도적이라고 말합니다. bugzilla.kernel.org/show_bug.cgi?id=197009를 참조하십시오 . 또한 여기에서 언급됩니다 : phoronix.com/…
Marc.2377

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.