web-dev-qa-db-fra.com

L'échelle de fréquence du processeur est bloquée à 2,80 Ghz et ça ne descend pas

J'utilise Ubuntu 16.04 LTS avec gnome desktop. Je règle le gouverneur sur "ondemand", mais le processeur fonctionne toujours à la fréquence maximale.

J'ai essayé beaucoup de choses, mais il est bloqué à 2,80 Ghz pendant des heures. "scaling_max_freq" et "scaling_min_freq" donnent la même chose: 2801000

1
erenesto

J'ai résolu mon problème avec ces étapes.

Sous K/X/Ubuntu ou un autre ordinateur basé sur Debian, vous pouvez simplement essayer d’installer cpufrequtils (Sudo apt-get install cpufrequtils) pour que l’échelle de fréquence fonctionne. Si cela vous convient, vous n'avez pas besoin de parcourir et de charger les modules appropriés ci-dessous. Passez simplement à la section sur la configuration du gouverneur de mise à l'échelle.

Version du noyau

Assurez-vous que la version de votre noyau est au moins 2.6.12 pour pouvoir utiliser tous les gouverneurs possibles qui seront mentionnés. Toute la mise à l'échelle des fréquences sera effectuée avec des modules du noyau et non des gouverneurs d'espace utilisateur.

Activer le support dans votre BIOS

Entrez votre BIOS et assurez-vous que Cool'n'Quiet (AMD) ou SpeedStep (Intel) est activé pour votre processeur. Certains BIOS peuvent ne pas avoir d'option pour l'un ou l'autre. Si vous ne trouvez pas l'option, elle est probablement activée par défaut. Malheureusement, votre BIOS peut en avoir l’option, mais il est répertorié sous un autre nom. Si tel est le cas, consultez le manuel de votre BIOS pour plus d'informations.

Supprimer tous les programmes de mise à l'échelle de la CPU de l'espace utilisateur

Certains programmes de l'espace utilisateur peuvent être exécutés pour adapter la fréquence des processeurs. Nous allons faire évoluer la CPU avec le noyau pour ne pas en avoir besoin. Donc, si vous en avez, nous allons les supprimer maintenant. Vous voudrez peut-être vous pencher sur ces problèmes, car ils peuvent être utiles dans certaines situations. Cet article traitera simplement de l’utilisation des modules du noyau à l’échelle.

Sudo apt-get remove powernowd cpudyn cpufreqd powersaved speedfreqd

Installez le module pour votre CPU

Lorsque vous avez installé votre système, il est très probable que votre CPU soit détectée par défaut et que le module nécessaire à la mise à l'échelle soit déjà en cours d'exécution. Vous trouverez ci-dessous une commande qui vous aidera à identifier le type de votre/vos processeur (s).

cat /proc/cpuinfo

Une fois que vous savez cela, vous saurez quel module de noyau vous devrez charger pour cela. Voici la commande pour voir quels modules du noyau sont chargés.

lsmod

Vous trouverez ci-dessous une description de la CPU et les commandes utilisées pour charger les modules du noyau en fonction de votre processeur. Regardez la sortie de lsmod ci-dessus et utilisez les noms de modules après le mot "modprobe" ci-dessous pour voir si un module est déjà chargé. Si vous le faites, passez simplement à l'étape suivante. Sinon, utilisez les informations de CPU que vous avez trouvées et déterminez le module à charger. Puis exécutez la commande pour le charger.

CPU: PIII-M ou P4 sans estimation. 2 types de modules pour cela.

Sudo modprobe speedstep-ich

ou

Sudo modprobe speedstep-smi

Processeur: Intel Core Duo, Intel Core2 Duo ou Quad ou Intel Pentium M. Cela a été intégré au module acpi-cpufreq dans les noyaux suivants.

Sudo modprobe speedstep-centrino

CPU: processeurs Intel Celeron, Xeon et Pentium 4

Sudo modprobe p4_clockmod

CPU: AMD K6. Type de socket: Socket 7

Sudo modprobe powernow-k6

CPU: AMD Sempron/Athlon/MP (K7). Types de socket: A, Slot A.

Sudo modprobe powernow-k7

CPU: AMD Duron/Sempron/Athlon/Opteron 64 (K8). Types de prises: 754, 939, 940, S1 (638), AM2 (940), F (1207).

Sudo modprobe powernow-k8

CPU: VIA CentaurHauls * ou Transmeta GenuineTMx86 *

Sudo modprobe longhaul

En dernier recours, si l'un de ces problèmes ne fonctionne pas, vous pouvez essayer le générique pour ACPI. De plus en plus de pilotes sont déplacés vers ce module dans des noyaux ultérieurs, tels que speedstep-centrino après la version 2.6.20.

Sudo modprobe acpi-cpufreq

Insertion des modules de mise à l'échelle

Maintenant que le module de fréquence de la CPU est chargé, nous pouvons maintenant insérer les modules de mise à l'échelle. Pour voir quels modules de mise à l'échelle sont disponibles, vous pouvez utiliser cette commande (à l'aide d'un shell Bash).

ls /lib/modules/$(uname -r)/kernel/drivers/cpufreq

Si vous avez ces modules, ils sont peut-être déjà en cours d'exécution. Pour vérifier s’ils sont, essayez la commande suivante.

lsmod | grep freq

Si vous voyez la plupart ou la totalité des modules répertoriés dans le répertoire cpufreq, vous avez terminé. Passez à la section suivante. Sinon, voici les commandes pour charger les modules.

Sudo modprobe cpufreq_conservative cpufreq_ondemand cpufreq_powersave cpufreq_stats cpufreq_userspace freq_table

Maintenant qu'ils sont chargés, vous voudrez les charger au démarrage. Pour faire cela sur un système basé sur Debian tel que K/X/Ubuntu, insérez les lignes suivantes dans le fichier/etc/modules. Vous devrez vérifier où les mettre sur d’autres distributions comme RedHat (/etc/modules.conf?). N'oubliez pas de mettre ici le nom du module de votre CPU (que vous avez trouvé ci-dessus) pour qu'il se charge au démarrage. Ce n'est que s'il n'est pas chargé au démarrage. Si vous ne l'aviez pas trouvé avec lsmod lors de votre première recherche, il ne se chargeait pas automatiquement.

cpufreq_conservative
cpufreq_ondemand
cpufreq_powersave
cpufreq_stats
cpufreq_userspace
freq_table

Configuration des modules de mise à l'échelle

Maintenant qu'ils sont chargés, nous pouvons configurer le gouverneur. Vous devez d'abord choisir le gouverneur que vous souhaitez utiliser. Vous trouverez ci-dessous une liste des gouverneurs et de leur fonctionnement. Vous pouvez choisir celui qui vous convient le mieux. Si le module pour un gouverneur est chargé, vous pouvez l'utiliser. N'oubliez pas que vous pouvez voir quels modules sont chargés avec la commande lsmod. Les commandes sont effectuées avec Sudo ci-dessous, comme dans le monde K/X/Ubuntu. Vous pouvez passer à root et exécuter les mêmes commandes sans le Sudo sh -c "" si vous le souhaitez.

Pour afficher les gouverneurs disponibles, vous pouvez utiliser.

Sudo cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors

Ondemand gouverneur - définit la fréquence du processeur en fonction de l'utilisation actuelle. Pour ce faire, le processeur doit pouvoir changer de fréquence très rapidement. Cela serait utile pour les systèmes qui travaillent beaucoup (charge élevée) pendant une courte période et qui ne font pas beaucoup (charge faible) le reste du temps.

Sudo sh -c "echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"

Options de configuration du gouverneur Ondemand

sampling_rate - Ceci est mesuré en microsecondes (un millionième de seconde). C'est la fréquence à laquelle vous souhaitez que le noyau examine l'utilisation du processeur et décide de ce qu'il convient de faire à propos de la fréquence. En règle générale, cette valeur est définie sur des valeurs d'environ "10000" ou plus. Si vous souhaitez définir le taux d'échantillonnage sur 1 seconde, définissez-le sur 1000000, comme dans l'exemple suivant.

Sudo sh -c "echo 1000000 > /sys/devices/system/cpu/cpu0/cpufreq/ondemand/sampling_rate"

show_sampling_rate_ (min | max) - Il s'agit des taux d'échantillonnage minimal et maximal disponibles pour lesquels vous pouvez définir "taux d'échantillonnage". Je crois aussi aux microsecondes. J'ai vu des discussions sur la suppression de cela plus tard dans les noyaux, ils ne comptent pas sur sa présence future. Pour voir les deux, procédez comme suit.

Sudo cat /sys/devices/system/cpu/cpu0/cpufreq/ondemand/sampling_rate_min  
Sudo cat /sys/devices/system/cpu/cpu0/cpufreq/ondemand  /sampling_rate_max

up_threshold - Ceci définit l'utilisation moyenne du processeur entre les échantillonnages de 'sampling_rate' pour que le noyau puisse décider s'il doit ou non augmenter la fréquence. Par exemple, lorsque sa valeur par défaut est "80", cela signifie que, entre les intervalles de contrôle, la CPU doit être utilisée en moyenne à plus de 80% pour pouvoir ensuite décider que la fréquence de la CPU doit être augmentée. Pour définir une valeur inférieure à 20%, procédez comme suit.

Sudo sh -c "echo 20 > /sys/devices/system/cpu/cpu0/cpufreq/ondemand/up_threshold"  

ignore_Nice_load - Ce paramètre prend la valeur "0" ou "1". Lorsqu'il est défini sur "0" (sa valeur par défaut), tous les processus sont comptés dans la valeur "utilisation du processeur". Lorsqu'il est défini sur "1", les processus exécutés avec une valeur "Nice" ne compteront pas (et seront donc ignorés) dans le calcul de l'utilisation globale. Ceci est utile si vous exécutez un calcul gourmand en ressources CPU sur votre ordinateur portable, sans vous soucier du temps qu’il prend à finaliser, car vous pouvez le contrôler et l’empêcher de prendre part au processus décisif d’augmentation de la fréquence de votre CPU. Pour l'activer, procédez comme suit.

Sudo sh -c "echo 1 > /sys/devices/system/cpu/cpu0/cpufreq/ondemand/ignore_Nice_load"  

Gouverneur conservateur - La fréquence du processeur est mise à l'échelle en fonction de la charge actuelle du système. C'est semblable à ondemand. La différence est qu’elle augmente et diminue avec élégance la vitesse du processeur au lieu de passer à la vitesse maximale dès lors que le processeur est surchargé. Ce serait mieux utilisé dans un environnement alimenté par batterie.

Sudo sh -c "echo conservative > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"  

Options de configuration du gouverneur conservateur

freq_step - Ceci décrit les pourcentages en degrés d'augmentation et de diminution progressives de la fréq CPU. Par défaut, la fréquence du processeur augmentera de 5% par rapport à la fréquence maximale de votre processeur. Vous pouvez modifier cette valeur pour qu’elle se situe entre 0 et 100, où "0" verrouille efficacement votre processeur à une vitesse indépendamment de sa charge, tandis que "100" lui permet, en théorie, de se comporter de manière identique au gouverneur "à la demande". Par exemple, si vous montez et descendez par incréments de 10%, procédez comme suit.

Sudo sh -c "echo 10 > /sys/devices/system/cpu/cpu1/cpufreq/conservative/freq_step"  

down_threshold - Ceci est identique au "seuil supérieur" trouvé pour le gouverneur "ondemand" mais pour la direction opposée. Par exemple, lorsque sa valeur par défaut est "20", cela signifie que si l'utilisation du processeur doit être inférieure à 20% entre les échantillons pour que la fréquence soit réduite. Par exemple, pour définir le seuil d'abaissement à 30%, procédez comme suit.

Sudo sh -c "echo 30 > /sys/devices/system/cpu/cpu0/cpufreq/conservative/down_threshold"

sampling_rate - idem que ondemand. sampling_rate_ (min | max) - identique à ondemand. up_threshold - identique à ondemand. ignore_Nice_load - identique à la demande.

Gouverneur de performances - Le processeur fonctionne à la fréquence maximale quelle que soit la charge. Ce module peut ne pas être répertorié dans les modules en cours d'exécution, mais est toujours disponible. À mon avis, il est intégré au noyau de K/X/Ubuntu. Le vôtre peut être la même manière.

Sudo sh -c "echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"

Régulateur Powersave - La CPU fonctionne à la fréquence minimale quelle que soit la charge.

Sudo sh -c "echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"

Statistiques Cpufreq sur votre CPU

Le module cpufreq répertorie les statistiques relatives à votre processeur. Celles-ci vous aideront à trouver des informations telles que la fréquence actuelle de votre processeur ou les fréquences disponibles auxquelles votre processeur peut s’adapter. Découvrez-les ci-dessous.

cpuinfo_cur_freq - Affiche la fréquence actuelle de votre (vos) CPU (s). Vous pouvez également le savoir en effectuant un "cat/proc/cpuinfo".

Sudo cat /sys/devices/system/cpu/*/cpufreq/cpuinfo_cur_freq

cpuinfo_max_freq - Affiche la fréquence maximale à laquelle votre (vos) CPU (s) peut évoluer.

Sudo cat /sys/devices/system/cpu/*/cpufreq/cpuinfo_max_freq

cpuinfo_min_freq - Affiche la fréquence minimale à laquelle votre (vos) CPU (s) peut évoluer.

Sudo cat /sys/devices/system/cpu/*/cpufreq/cpuinfo_min_freq

scaling_available_frequencies - Affiche toutes les fréquences disponibles auxquelles votre (vos) CPU (s) peuvent s’adapter.

Sudo cat /sys/devices/system/cpu/*/cpufreq/scaling_available_frequencies

scaling_cur_freq - Affiche la fréquence disponible actuellement utilisée par votre (vos) CPU (s).

Sudo cat /sys/devices/system/cpu/*/cpufreq/scaling_cur_freq

scaling_driver - Affiche le pilote cpufreq utilisé par la (les) CPU (s).

Sudo cat /sys/devices/system/cpu/*/cpufreq/scaling_driver

scaling_max_freq - Définissez la fréquence maximale à laquelle votre (vos) CPU (s) est autorisé (s) à évoluer. Regardez la sortie de scaling_available_frequencies ci-dessus. Ensuite, vous pouvez choisir l’un de ces nombres (fréquences) à définir comme fréquence maximale à laquelle la ou les CPU (s) seront autorisées à évoluer. Par exemple, si la sortie de scaling_available_frequencies de la CPU était 2000000 1800000 1000000, définissez cette valeur sur 1800000. Ainsi, lorsque la CPU évolue, elle passe au maximum à 1800000 et non à 2000000. Voici un exemple de définition de cette option.

Sudo sh -c "echo 1800000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq"

scaling_min_freq - Identique à scaling_max_freq mais en définissant une valeur qui ne permettra pas au (x) processeur (s) de descendre en dessous. Par exemple.

Sudo sh -c "echo 1800000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq"

Conserver l'un de vos paramètres pour cpufreq au redémarrage

Tous les paramètres que nous avons définis se trouvent dans le système de fichiers virtuel/sys. Ils ne seront donc pas enregistrés après un redémarrage. Vous pouvez configurer ces options au redémarrage de différentes manières.

La première consiste à placer les lignes que vous avez exécutées dans /etc/rc.local. Comme root exécute rc.local au démarrage, vous n'avez pas besoin de Sudo avant chaque ligne. Votre rc.local pourrait ressembler à l'exemple suivant qui définit le gouverneur ondemand et le seuil supérieur à 20%. N'oubliez pas de vous assurer que le module de votre CPU et les modules de mise à l'échelle cpufreq sont configurés pour se charger également au démarrage.

echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor  
echo 20 > /sys/devices/system/cpu/cpu0/cpufreq/ondemand/up_threshold

La deuxième façon de conserver vos paramètres au redémarrage consiste à installer sysfsutils (Sudo apt-get install sysfsutils). Ensuite, vous pouvez ajouter les lignes suivantes à /etc/sysfs.conf qui font la même chose que dans l'exemple /etc/rc.conf.

devices/system/cpu/cpu0/cpufreq/scaling_governor=ondemand   
devices/system/cpu/cpu0/cpufreq/ondemand/up_threshold=20
2
erenesto