1 votes

La sortie de lscpu diffère lorsqu'elle est appelée indirectement ?

J'utilise lscpu | grep 'MHz' pour obtenir ma vitesse d'horloge. J'obtiens des résultats différents en fonction de la méthode utilisée pour appeler cette commande.

Méthode 1 : le taper dans le terminal
CPU MHz: 1200.000

Méthode 2 : L'encapsuler dans un script appelé test.sh
script code :

#! /bin/bash
cpu=$(lscpu | grep 'MHz')
echo $cpu

Ensuite, dans la terminaL

$ chmod +x test.sh
$ ./test.sh

Sortie :
CPU MHz: 1200.000

Jusqu'à présent, tout va bien. Mais maintenant, méthode 3 : cliquer sur 'run or view current file' dans Geany sur test.sh. Résultat :
CPU MHz: 2200.000

Méthode 4 : écrire un script Python appelé test.py qui appelle test.sh.
Code Python script :

#! /usr/bin/python
import subprocess

def test():
    subprocess.call("./test.sh")

if __name__ == '__main__':
    test()

Ensuite, dans le terminal :
$ python test.py

Sortie :
CPU MHz: 2200.000

J'ai essayé à la fois Python et python3. Les deux donnent le même résultat (erroné).

Pourquoi est-ce que lscpu donne un résultat différent lorsqu'il est exécuté indirectement ? Et comment puis-je corriger ou contourner ce problème ? Y a-t-il un problème dans mon code ? Pour ce que ça vaut, j'utilise Ubuntu 13.10.

Merci :-).

3voto

chaos Points 25386

C'est une coïncidence, c'est votre système qui change la fréquence actuelle du processeur.

Vérifiez avec cette commande dans un terminal :

watch -n 0 "lscpu | grep 'MHz'"

Vous verrez (en attendant un peu) que la fréquence du processeur du système change.

Vous pouvez également obtenir la fréquence actuelle de votre processeur avec cette commande :

cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq

Et votre fréquence maximale/minimale de processeur avec ceux-ci :

cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq
cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq

Changer le comportement ? Le gouverneur du processeur décide de la fréquence à utiliser. Voir ce qui suit documentation du noyau linux pour décider du gouverneur de processeur qui vous convient le mieux.

  • Appelez le gouverneur : cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
  • Changez le gouverneur : echo "powersave" >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

0voto

Sylvain Pineau Points 59212

La plupart des processeurs modernes peuvent ajuster leur fréquence d'horloge. Le gouverneur par défaut sous Linux est "on demand", ce qui permet de maintenir une fréquence d'horloge basse pour économiser de l'énergie en cas d'inactivité, et de l'accélérer pour effectuer des tâches lorsque cela est nécessaire.

Ver https://www.kernel.org/doc/Documentation/cpu-freq/governors.txt

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X