Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

utilisateurs:nuliel:gestion_energie_processeur [Le 15/02/2025, 15:49] (Version actuelle)
nuliel recréée (+ ajout C-states parfois mal géré sur windows)
Ligne 1: Ligne 1:
 +{{tag>​Bionic tutoriel système}}
  
 +----
 +
 +
 +====== Gestion avancée de l'​énergie du processeur ======
 +
 +Les C-states sont des états de veille des coeurs du processeur.
 +Le but de ce tutoriel est de voir une méthode pour gérer les C-states sur Linux.
 +Cela est utile dans le cas où la gestion d'​énergie du processeur est mal faite et provoque ainsi un gel aléatoire du système. Cela s'​observe notamment sur les ordinateurs peu chers avec processeur Intel Bay Trail et quelques Intel Celeron qui sont basés sur les processeurs précédemment cités.
 +
 +<note important>​Si le noyau gère bien la gestion d'​énergie du processeur et qu'il n'y a donc pas de gels, alors ne suivez pas ce tutoriel!</​note>​
 +
 +===== Pré-requis =====
 +
 +  * Disposer des [[:​sudo|droits d'​administration]].
 +  * installer l'​outil cpupower en installant **[[apt>​linux-tools-common]]** **[[apt>​linux-tools-generic]]**
 +
 +===== Bloquer les C-states via le BIOS =====
 +
 +Il arrive que le BIOS contienne un paramètre "​C-states control"​ pour activer/​désactiver les C-states. Si l'​option est disponible, désactiver les C-states via le BIOS permettra d'​être sûr que c'est la cause des gels aléatoires,​ et souvent lorsque le pc n'est pas utilisé. C'est donc la première chose à vérifier en cas de gels aléatoires. L'​idéal reste de désactiver que les C-states qui posent problème. Les problèmes de gel aléatoire dû aux C-states ne sont pas limités à Linux, ils peuvent aussi être rencontré sur Windows.
 +
 +===== Gestion simple des C-states =====
 +
 +La commande
 +<code bash>​cpupower idle-info</​code>​
 +permet de lister les C-states compatibles avec le processeur.
 +
 +Par exemple, sur un processeur Intel Core i5 4210U, voici les C-states:
 +<code bash>​CPUidle driver: intel_idle
 +CPUidle governor: menu
 +analyzing CPU 0:
 +
 +Number of idle states: 9
 +Available idle states: POLL C1 C1E C3 C6 C7s C8 C9 C10
 +POLL:
 +Flags/​Description:​ CPUIDLE CORE POLL IDLE
 +Latency: 0
 +Usage: 33293
 +Duration: 3698149
 +C1:
 +Flags/​Description:​ MWAIT 0x00
 +Latency: 2
 +Usage: 10487775
 +Duration: 3916810744
 +C1E:
 +Flags/​Description:​ MWAIT 0x01
 +Latency: 10
 +Usage: 11362373
 +Duration: 2533863708
 +C3:
 +Flags/​Description:​ MWAIT 0x10
 +Latency: 33
 +Usage: 6611768
 +Duration: 2724211142
 +C6:
 +Flags/​Description:​ MWAIT 0x20
 +Latency: 133
 +Usage: 1759894
 +Duration: 1052846310
 +C7s:
 +Flags/​Description:​ MWAIT 0x32
 +Latency: 166
 +Usage: 4240156
 +Duration: 3148722366
 +C8:
 +Flags/​Description:​ MWAIT 0x40
 +Latency: 300
 +Usage: 3673897
 +Duration: 4457909063
 +C9:
 +Flags/​Description:​ MWAIT 0x50
 +Latency: 600
 +Usage: 2747610
 +Duration: 7647149692
 +C10:
 +Flags/​Description:​ MWAIT 0x60
 +Latency: 2600
 +Usage: 635019
 +Duration: 11682828891</​code>​
 +
 +POLL correspond à un processeur totalement actif, et plus on avance dans les C-states, plus le processeur est partiellement en veille.
 +On fait correspondre la valeur 0 à POLL, 1 au premier C-state, ...
 +
 +<note important>​Il est contre-productif de chercher à n'​être que sur POLL: le pc consommera plus d'​énergie et il chauffera plus!</​note>​
 +
 +Afin de voir l'​utilisation des C-states, on passe la commande
 +<code bash>​cpupower monitor</​code>​
 +ce qui permet de déduire les C-states qui pourraient poser problème.
 +
 +Afin de bloquer logiciellement les C-states, deux paramètres à passer à Grub sont importants ici:
 +  * intel_idle.max_cstate=N
 +  * processor.max_cstate=N
 +où N est à remplacer par le numéro au dernier C-state qui peut être utilisé. Le premier paramètre est souvent suffisant. \\
 +Si par exemple le 4ème C-state est mal géré par le noyau Linux et que les 3 premiers ne posent pas problème, alors on remplace N par 3 pour éviter les gels.
 +
 +Si vraiment aucun C-state à part POLL est correctement géré, passer le paramètre intel_idle.max_cstate=0 ne suffira pas, passer en plus idle=poll permettra de n'​utiliser que POLL, __mais cela n'est pas recommandé__!
 +
 +<​note>​En règle générale, sur des processeurs Intel Bay Trail, le paramètre intel_idle.max_cstate=1 suffit à empêcher les gels.</​note>​
 +
 +===== Gestion avancée des C-states =====
 +
 +Il arrive que seul le Nième C-state pose problème. Dans ce cas, au lieu de se limiter aux N-1 C-states précédents,​ on peut chercher à désactiver logiciellement le C-state qui pose problème. Pour cela, on utilise la commande
 +<code bash>​sudo cpupower idle-set -d N</​code>​
 +où N est à remplacer par le C-state qui pose problème.
 +On peut aussi chercher à empêcher logiciellement d'​utiliser un C-state sur un coeur en particulier avec le paramètre -c .
 +
 +===== Voir aussi =====
 +
 +  * [[https://​forum.ubuntu-fr.org/​viewtopic.php?​id=2032778|Un fil traitant du sujet]] sur le forum ubuntu-fr
 +  * [[http://​www.deltasight.fr/​processeurs-gestion-energie-frequence/​|Un tutoriel sur les C-states et P-states]]
 +
 +----
 +
 +
 +//​Contributeurs principaux : [[:​utilisateurs:​nuliel|Nuliel]] //
 +
 +//Basé sur [[http://​www.deltasight.fr/​processeurs-gestion-energie-frequence/​|« Processeurs sous Linux : gestion de l’énergie et contrôle de la fréquence »]] par Paul Chevalier .//
  • utilisateurs/nuliel/gestion_energie_processeur.txt
  • Dernière modification: Le 15/02/2025, 15:49
  • par nuliel