Pourquoi cpuinfo_cur_freq et / proc / cpuinfo indiquent-ils des nombres différents?

Quand je fais

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

Je reçois 1,8 – 2,7 GHz. Il ne dépasse jamais 2,7.

Et quand je le fais

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

Je reçois 768 MHz – 1,8 GHz. Il ne dépasse jamais 1,8.

Quelqu'un sait ce qu'il se passe?

    La plupart des CPU incluent maintenant la possibilité d'ajuster leur vitesse pour économiser de l'énergie. Il est généralement appelé mise à l'échelle de la fréquence du processeur . La vitesse en time réel de la CPU est signalée par ceci:

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

    La vitesse CPU absolue (max) est signalée par ceci:

     $ cat /proc/cpuinfo 

    Spécifiquement cette ligne:

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

    La ligne qui montre cpu MHz ne montre pas la vitesse maximale de votre CPU. Cette valeur est votre vitesse actuelle. Sur un système multicœur tel que i7 ou i5, vous pouvez le voir avec cette command:

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

    Vous pouvez cependant voir la vitesse absolue (max) avec cette command:

     $ 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 

    NOTE: le nombre de cœurs qu'il a, NUMAS node0 CPU(s) est 4, ie 0,1,2, et 3.

    Mise à l'échelle du CPU et gouvernance?

    Le mode dans lequel se trouve votre système s'appelle le régulateur de mise à l'échelle. Semblable à un gouverneur sur une voiture. Vous pouvez voir lesquels sont disponibles avec cette command:

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

    Vous pouvez également voir lequel est actuellement actif:

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

    NOTE: Les commands que je montre ne include que le 1er cpu, cpu0 . Vous pouvez soit substituer dans un * dans le path pour voir tous les cœurs ou vous pouvez voir sélectivement cpu1 , etc.

    Vous pouvez voir les vitesses CPU maximum et minimum disponibles pour le profil de votre gouverneur:

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

    Plus de détails sont disponibles dans cet article, intitulé: Mise à l'échelle de la fréquence CPU sous Linux avec cpufreq .

    Alors qu'en est-il cpuinfo_cur_freq?

    Ce paramètre a plus à voir avec la spécification de la CPU et le profil dans lequel il se trouve actuellement, plutôt que quelque chose d'utile par rapport à la manière dont le CPU fonctionne actuellement. Pour la télémésortinge opérationnelle actuelle, j'utiliserais les scaling_* kernel.

    Exemple

    J'ai mis le script suivant set pour montrer les cœurs du processeur dans la colonne, donc il serait plus facile de voir à quoi ressemblaient les différents tunables du kernel:

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

    Lorsque vous l'exécutez, vous obtenez la sortie suivante:

     $ ./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 

    Vous pouvez voir que l' scaling_cur_freq montre un ralentissement dans les core # 1 & 2.