Linux: arrêt du cœur du processeur au lieu de l'état de veille

10

Sous Linux, vous pouvez arrêter les cœurs de processeur (ou les processeurs physiques) avec echo 0> / sys / devices / system / cpu / cpu1 / online En supposant que le matériel éteint complètement le processeur et coupe l'alimentation, il ne serait pas préférable de le désactiver les cœurs entièrement au lieu de compter sur les différents états de veille d'un processeur?

Pour illustrer le principe, je pensais à quelque chose dans ce sens (pseudocode) pour un système avec quatre CPU:

if(loadavg > 3.00) echo 1 > /sys/devices/system/cpu/cpu3/online
if(loadavg < 3.00) echo 0 > /sys/devices/system/cpu/cpu3/online

if(loadavg > 2.00) echo 1 > /sys/devices/system/cpu/cpu2/online
if(loadavg < 2.00) echo 0 > /sys/devices/system/cpu/cpu2/online

if(loadavg > 1.00) echo 1 > /sys/devices/system/cpu/cpu1/online
if(loadavg < 1.00) echo 0 > /sys/devices/system/cpu/cpu1/online
Waxhead
la source

Réponses:

6

La définition de l'état en ligne du cœur du processeur indique simplement au planificateur de processus de ne pas utiliser ce cœur pour les processus. Au niveau matériel, le noyau est simplement inactif (en train de faire NOP), mais toujours alimenté. Bien que cela économise de l'énergie, cela n'économisera pas autant d'énergie que de mettre l'ordinateur en veille. Pourquoi?

Eh bien, votre carte mère, votre CPU et votre GPU fonctionnent toujours ! Lorsque vous mettez l'ordinateur en veille, tous ces composants sont littéralement non alimentés, et juste assez d'énergie pour maintenir votre RAM en vie est utilisée (de l'ordre de quelques watts).

Encore une fois, bien que je convienne que cela économisera de l'énergie, même la fermeture de la moitié de vos cœurs de processeur peut réduire de moitié la consommation d'énergie du processeur (bien qu'en réalité, vous ne puissiez économiser que 30 à 40% car ces cœurs doivent toujours rester inactifs), mais c'est loin d'être le seul composant du système à consommer de l'énergie. Même si vous économisez 50 W en faisant cela, votre ordinateur entier consomme toujours beaucoup plus d'énergie que de simples watts en mode veille.


Réflexions finales: Bien que je convienne que c'est une excellente idée dans la pratique, c'est aussi pourquoi de nombreux fabricants de processeurs incluent une mise à l'échelle dynamique des fréquences ("Speed ​​Step" d'Intel), avec prise en charge de Linux. Vous pouvez obtenir de meilleures performances globales, ainsi que l'efficacité énergétique, en réglant ces fréquences de manière plus appropriée à vos besoins. Cela peut être fait à la fois sur le matériel (paramètres du BIOS), ainsi que sur le logiciel (le noyau Linux vous permet de modifier certains paramètres du processeur, voir le lien que j'ai posté ci-dessus ou ce site Web pour plus de détails).

Cela fonctionne, car voici l'équation générique pour la consommation d'énergie d'un circuit CMOS:

P = CV 2 f, où C = capacité (supposée fixe), V = tension et f = fréquence.

Ainsi, la division de la fréquence par 2 réduira de moitié la consommation électrique d'origine. La division de la tension par 2 réduira la consommation électrique à 1/4 de l'original.

Percée
la source
Au moins sur les processeurs compatibles x86 / amd64, je suppose que si possible une instruction HLT serait plus facile sur le CPU qu'un NOP. Je faisais également référence aux différents états de veille (ou correctement aux états du processeur C0-C3 (ACPI)). De plus, je pensais davantage aux systèmes qui fonctionnent toujours là où tout le système ne peut pas être mis en veille. Dans ce cas, je suis curieux de savoir si le matériel coupera réellement l'alimentation du processeur et si cela est implémenté dans certaines configurations. Merci pour votre réponse mais je vais laisser la question ouverte encore un peu.
Waxhead
@Waxhead une fois que vous avez coupé l'alimentation du processeur, l'ordinateur entier est logiquement «éteint» (et ne peut être rallumé que par une interruption externe), même si d'autres matériels sont toujours alimentés. En outre, vous avez peut-être raison d'utiliser HLTau lieu de NOP, mais cela revient à l'utilisation des interruptions (qui est de savoir comment sortir un processeur de l'état arrêté). Au lieu de couper l'alimentation, la plupart des processeurs changent dynamiquement la vitesse et la tension d'horloge (ajout d'une équation à ma réponse).
Percée le
J'ai fait quelques recherches supplémentaires à ce sujet. Il s'avère que Linux prend réellement en charge le branchement à chaud d'un processeur. Dans ce cas, si le BIOS / la carte mère le prend en charge, vous pouvez réellement arrêter les processeurs et les remplacer, par exemple extraire le processeur de son socket pendant que le système fonctionne et le remplacer. Réf: cyberciti.biz/faq/debian-rhel-centos-redhat-suse-hotplug-cpu si je ne me trompe pas, cela couperait l'alimentation d'un processeur si le BIOS / la carte mère le supportait.
Waxhead
@Breakthrough Merci pour votre beau message. Pouvez-vous fournir des documents de référence sur les détails de la façon dont nous pouvons mettre le processeur en état de faible consommation (sans système de redémarrage) et le récupérer si nécessaire
iDebD_gh
@Breakthrough "le noyau est simplement inactif (faisant des NOPs)," Quand nous faisons hors ligne sur un noyau cpu particulier, il disparaît de "/ proc / interrupts". Comment pouvez-vous dire que le Core traite le fonctionnement du NOP?
iDebD_gh