Cpuinfo_cur_freq ve / proc / cpuinfo neden farklı sayılar bildiriyor?


13

Ben yaparken

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

1.8 - 2.7 GHz alıyorum. Asla 2.7'nin üzerine çıkmaz.

Ve yaptığımda

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

768 MHz - 1.8 GHz alıyorum. Asla 1.8'in üzerine çıkmaz.

Birileri neler olduğunu biliyor mu?

Yanıtlar:


14

Çoğu CPU şimdi pil / güç kullanımından tasarruf etmek için hızlarını ayarlama yeteneğine sahiptir. Genellikle CPU frekans ölçeklemesi olarak adlandırılır . CPU'nun gerçek zamanlı hızı şu şekilde bildirilir:

$ sudo cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq

Mutlak (maks.) CPU hızı şu şekilde bildirilir:

$ cat /proc/cpuinfo

Özellikle bu satır:

model name  : Intel(R) Core(TM) i5 CPU       M 560  @ 2.67GHz

Gösterileri satır cpu MHz gelmez CPU maksimum hızı gösterir. Bu değer mevcut hızınızdır. İ7 veya i5 gibi çok çekirdekli bir sistemde bunu şu komutla görebilirsiniz:

$ cat /proc/cpuinfo |grep MHz
cpu MHz     : 1199.000
cpu MHz     : 1199.000
cpu MHz     : 1199.000
cpu MHz     : 2667.000

Ancak bu komutla mutlak (maks.) Hızı görebilirsiniz:

$ 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

NOT / BILGI: sahip olduğu çekirdek sayısı NUMAS node0 CPU(s)4'tür, yani 0,1,2 ve 3.

CPU ölçeklendirme ve yönetme?

Sisteminizin bulunduğu moda ölçeklendirme düzenleyicisi denir. Arabadaki bir valiye benzer. Bu komutla hangilerinin kullanılabilir olduğunu görebilirsiniz:

$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
powersave ondemand userspace performance 

Şu anda hangisinin aktif olduğunu da görebilirsiniz:

$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
ondemand

NOT: Gösterdiğim komutlar sadece 1. cpu'yu içeriyor cpu0. *Tüm çekirdekleri görmek için yoldaki a yerine geçebilir veya seçici olarak görebilirsiniz cpu1.

Vali profiliniz için mevcut olan maksimum ve minimum CPU hızlarını görebilirsiniz:

$ sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
2667000
$ sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq 
1199000

Bu makalede daha ayrıntılı bilgi bulabilirsiniz: Linux'ta CPU frekans ölçeklemesi cpufreq ile .

Peki ya cpuinfo_cur_freq?

Bu parametrenin, CPU'nun şu anda nasıl çalıştığına ilişkin yararlı herhangi bir şey yerine, CPU'nun spesifikasyonu ve o anda hangi profilde olduğu ile ilgilidir. Gerçek operasyonel telemetri için scaling_*çekirdek ayarlayıcılarını kullanırdım.

Misal

CPU Çekirdeğini sütun olarak göstermek için aşağıdaki komut dosyasını bir araya getirdim, böylece çeşitli Çekirdek ayarlarının nasıl göründüğünü görmek daha kolay olurdu:

#!/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

Çalıştırdığınızda aşağıdaki çıktıyı alırsınız:

$ ./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_freqAyarlanabilir bölümün # 1 ve 2 çekirdeğinde bir yavaşlama olduğunu görebilirsiniz .


Eğer bu doğru olsaydı /proc/cpuinfo, aynı rapor vermez cpuinfo_cur_freqmi? Açıkça değil! Sorumun kalbi hala çözülmedi. Bir şekilde "gerçek frekans" rapor gibi görünen bu aracı ortaya çıkardı , ancak doğru çalıştığından emin değilim. Algoritması için bazı kaynaklar sağlar, ancak tutarsızlık için gerçekten büyük bir açıklama sağlamaz .
wulftone

Gibi satırlar /sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_cur_freqmaksimum hızları gösteriyor, isim olsalar bile mevcut hızı ifade ediyorlar, bu sorduğunuz bağlantı kesme, değil mi? Sistemim de onları bu şekilde gösteriyor.
slm

Frekans ölçeklendirmesi açık olduğunda, gerçek işlemci frekanslarını almak için bunu kullanmalısınız:/sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
slm

2
Not: Çekirdek 4.13'ten beri, cat /proc/cpuinfo | grep MHzartık geçerli saat hızını döndürmez . Çekirdek Bugzilla'da bunun kasıtlı olduğunu söylüyorlar. Bkz. Bugzilla.kernel.org/show_bug.cgi?id=197009 . Burada da bahsedilmiştir: phoronix.com/…
Marc.2377

1
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.