Odpowiedzi:
Większość procesorów ma teraz możliwość dostosowania ich prędkości, aby pomóc w oszczędzaniu baterii / zużycia energii. Zwykle nazywa się to skalowaniem częstotliwości procesora . Szybkość procesora w czasie rzeczywistym jest zgłaszana przez:
$ sudo cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
Zgłaszana jest tutaj bezwzględna (maksymalna) prędkość procesora:
$ cat /proc/cpuinfo
W szczególności ta linia:
model name : Intel(R) Core(TM) i5 CPU M 560 @ 2.67GHz
Linia, która pokazuje cpu MHz
, nie pokazuje maksymalnej prędkości twojego procesora. Ta wartość jest Twoją aktualną prędkością. W systemie wielordzeniowym, takim jak i7 lub i5, możesz to zobaczyć za pomocą tego polecenia:
$ cat /proc/cpuinfo |grep MHz
cpu MHz : 1199.000
cpu MHz : 1199.000
cpu MHz : 1199.000
cpu MHz : 2667.000
Możesz jednak zobaczyć prędkość bezwzględną (maksymalną) za pomocą tego polecenia:
$ 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
UWAGA: liczba jego rdzeni NUMAS node0 CPU(s)
wynosi 4, tj. 0,1,2 i 3.
Tryb, w którym znajduje się system, nazywa się regulatorem skalowania. Podobne do gubernatora w samochodzie. Możesz zobaczyć, które są dostępne za pomocą tego polecenia:
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
powersave ondemand userspace performance
Możesz także zobaczyć, który jest obecnie aktywny:
$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
ondemand
UWAGA: Polecenia jestem pokazujące tylko to 1st CPU cpu0
. Możesz albo zastąpić w *
ścieżce, aby zobaczyć wszystkie rdzenie, albo selektywnie zobaczyć cpu1
, itp.
Możesz zobaczyć maksymalne i minimalne prędkości procesora dostępne dla profilu swojego gubernatora:
$ sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
2667000
$ sudo cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq
1199000
Więcej szczegółów dostępnych jest w tym artykule, zatytułowanym: Skalowanie częstotliwości procesora w systemie Linux za pomocą cpufreq .
Ten parametr ma więcej wspólnego ze specyfikacją procesora i profilem, w którym aktualnie się znajduje, a nie z czymkolwiek przydatnym w odniesieniu do tego, jak procesor aktualnie działa. Do rzeczywistej telemetrii scaling_*
operacyjnej użyłbym tunerów jądra.
Złożyłem następujący skrypt razem, aby pokazać rdzenie procesorów w kolumnach, aby łatwiej było zobaczyć, jak wyglądały różne tunery jądra:
#!/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
Po uruchomieniu otrzymasz następujące dane wyjściowe:
$ ./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
Widać, że scaling_cur_freq
przestrajanie wykazuje spowolnienie w rdzeniu 1 i 2.
/sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_cur_freq
pokazują maksymalne prędkości, nawet jeśli ich nazwa sugeruje aktualną prędkość, to o to rozłączenie pytasz, prawda? Mój system pokazuje je również w ten sposób.
/sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
cat /proc/cpuinfo | grep MHz
nie zwraca już bieżącej częstotliwości zegara . W Bugzilli jądra mówią, że jest to celowe. Zobacz bugzilla.kernel.org/show_bug.cgi?id=197009 . Wspomniano także tutaj: phoronix.com/…
/proc/cpuinfo
zgłosiłby tego samegocpuinfo_cur_freq
? Oczywiście, że nie! Serce mojego pytania wciąż pozostaje nierozwiązane. Odkryłem to narzędzie, które wydaje się w jakiś sposób zgłaszać „prawdziwą częstotliwość”, ale nie jestem pewien, czy działa poprawnie. Zapewnia pewne źródła dla swojego algorytmu, ale tak naprawdę nie stanowi dobrego wyjaśnienia rozbieżności.