Comment définir le régulateur d'échelle de fréquence du processeur pour tous les cœurs à la fois?

38

J'aimerais définir le régulateur d'échelle de fréquence de la CPU pour tous les cœurs en même temps au lieu de le faire individuellement pour chaque cœur. Y a-t-il un moyen de faire cela?

(Je sais qu'il serait facile de faire écho au gouverneur /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor, mais je ne cherche pas de solution personnalisée.)

htorque
la source
2
Avec "solution personnalisée", vous voulez dire qu'un script shell est inacceptable, il doit s'agir d'un bouton d'interface graphique intégré?
Jg-Faustus
Je me demande simplement s'il existe déjà une solution dans une installation standard (il n'est pas nécessaire de disposer d'une interface graphique).
Htorque
Consultez cette page: idebian.wordpress.com/2008/06/22/cpu-frequency-scaling-in-linux sous "implémentation debian": Il est apparemment possible de changer le paramètre de démarrage par défaut. Il existe un outil utilisateur appelé powernowd. (Ceci est un commentaire plutôt que de répondre car l'article a été
publié en

Réponses:

26

Je suis toujours un noob linux mais vous ne pensez pas que cpufrequtils vous laisse le faire en utilisant (il n'est pas fourni dans le système d'exploitation Ubuntu mais se trouve dans le référentiel)

sudo apt-get install cpufrequtils
sudo cpufreq-set -r -g performance
  • Le -rdrapeau est utilisé pour définir le changement pour tous les cœurs ("tous les matériels liés")
utilisateur49449
la source
6
L'option relative -r ne le fait pas pour tous les cœurs. Nous devons spécifier le numéro de processeur avec l'option -c <numéro>, mais ce script le fera pour tous les processeurs en même temps: pour ((i = 0; i <$ (nproc); i ++)); ne cpufreq-set -c $ i -r -g performances; terminé
Sri
6
Exactement, @Sri a raison. cpufreq-setEn fait, il manque des fonctionnalités simples mais indispensables. Comme le montrent clairement ces compteurs de votes, de nombreuses personnes ne le savent tout simplement pas, car sa description est tout simplement trompeuse.
poige
2
Qui donne ces + 1 sans tester ???? Cela ne marche pas du tout. J'ai posté la solution de travail la plus simple que j'ai pu trouver.
switch87
20

J'ai beaucoup cherché sur Google et je pense que ce n'est tout simplement pas possible. J'ai donc ajouté le lignage suivant à mon .bashrc:

function setgov ()
{
    echo "$1" | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor 
}

Maintenant, je peux exécuter quelque chose du genre setgov ondemandet tous les cœurs basculeront vers le gouverneur à la demande .

htorque
la source
2
Cela ne fonctionne pas car le fichier scaling_governor appartient à root et possède des autorisations restreintes. La modification des autorisations n'est pas toujours recommandée.
Sri le
Veuillez voir le script alternatif dans mon commentaire à la réponse de user49449.
Sri le
6

la commande la plus courte pour changer le gouverneur de tous les cœurs est la suivante:

sudo bash -c 'for i in {0..7}; do cpufreq-set -c $i -g performance; done'

Vous pouvez l'ajouter à .bashrc comme htorque mentionné, vous devrez l'exécuter en tant que root sudo setgov performance:

function setgov ()
{
     for i in {0..7}; 
     do 
         cpufreq-set -c $i -g $1; 
     done
}
commutateur87
la source
2

Autant ajouter du code bash, pendant que nous y sommes:

function setgovernor () {
    echo "$1" | sudo tee 
    /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor 
}
complete -W "$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors)" setgovernor
Ray Malanga
la source
2

La façon dont j'ai réglé le problème depuis que le gouverneur par défaut revenait à powersave après environ 30 secondes à compter de la version Ubuntu 16.04 ou plus récente (je suis sur Ubuntu Mate);

  1. Mettez cette (une ligne de) code (merci, merci de switch87 dans la réponse précédente)

    sleep 60 && bash -c 'for i in {0..7}; do cpufreq-set -c $i -g performance; done'
    
  2. dans le fichier dans le répertoire

    /etc/rc.local
    

La mienne est une ligne au-dessus de "sortie 0" et non commentée, sous les commentaires.

"rc.local" pour ceux qui ne connaissent pas, il lance la commande en tant que sudo. Il semble que toute commande, pour changer de gouverneur, doit être exécutée en tant que sudo.

Il permet au gouverneur de réinitialiser la sauvegarde et de lancer le code en tant que sudo au bout de 60 secondes pour rétablir les performances.

Changez le "60" (dans le code que vous copiez) en n’importe quelle heure (en secondes. 60 = 60 secondes = 1 minute) vous devez retarder la commande et "performance" (dans la partie commande) à quel gouverneur vous voulez qu'il soit. changer à.

En dehors de mes heures et de mes heures de recherche, je n'ai pas trouvé de solution permanente à ce problème. Je suppose que quelques minutes sont consacrées à powersave s'il s'agit du meilleur correctif que j'ai trouvé, n'est-ce pas? Droite.

Ce n’est pas la meilleure solution, mais cela le rend un peu permanent une fois que c’est son changement qui passe à PowerSave. Si vous voulez démarrer correctement et vous lancer dans un jeu ou quelque chose comme ça, vous devrez attendre une minute pour le code que vous venez de mettre pour le remettre en place de PowerSave ou pour en réduire le temps (en fonction du temps que cela prend). tout pour démarrer afin que les performances reviennent correctement).

Et, comme toujours, pour revenir aux valeurs par défaut (j'ai constaté certains problèmes dus à une surchauffe des ordinateurs personnels, raison pour laquelle ils auraient peut-être modifié le mode d'économie d'énergie par défaut), il suffit de supprimer le code de rc.local et de le réinitialiser ou de le restaurer. manuellement avec votre commutateur d'indicateur d'icône cpu ou exécuter;

 sudo /etc/init.d/cpufrequtils restart

dans le terminal et ou redémarrez.

Roiikka
la source
1

Vous pouvez le faire pour tous les cœurs à la fois en exécutant

sudo cpupower frequency-set --governor performance
Martin Andersson
la source
0

En me basant sur la réponse de switch87, j'ai créé un script simple cpufreq-set-all, qui permettra d'effectuer d'autres opérations cpufreq-setavec tous les processeurs:

   #!/bin/bash
   MAX_CPU=$((`nproc --all` - 1))
   for i in $(seq 0 $MAX_CPU); do
       echo "Changing CPU " $i " with parameter "$@;
       cpufreq-set -c $i $@ ;
   done

Maintenant, il peut être invoqué (après chmod +x, bien sûr) comme ceci:

cpufreq-set-all -g powersave

ou

cpufreq-set-all -f 800Mhz
side2k
la source