Page 1 sur 1
[/proc/stat] Comment en exploiter les donnés
Publié : sam. 27 août 2011, 18:56
par Distag
Bonjour,
J'aimerai savoir comment obtenir le pourcertage d'utilisation de mes cpu (comme le ferai Conky) a partir de /proc/stat. Mais je ne comprends pas les donnés de ce fichier ni comment les exploiter ( dans l'optique de me faire un script sh). Merci d'avance.
Re: [/proc/stat] Comment en exploiter les donnés
Publié : sam. 27 août 2011, 19:35
par SataMaxx
Pour chaque ligne tu as les temps d'utilisation de chaque type de tâche pour chacun des cpu (cpu = total, cpu0, cpu1, etc… = détail par cœur) :
cpuN user nice system idle iowait irq softirq
Avec :
user: processus en usermode
nice: processus avec un nice level en usermode
system: processus en mode kernel
idle: temps à se tourner les pouces
iowait: en attente d'entrées/sorties
irq: servicing interrupts
softirq: servicing softirqs
Pour avoir le pourcentage d'utilisation d'un cpu, tu dois additionner toutes les valeurs, ce qui te donne le temps total, en retirer la partie idle, tu as donc ce qui a été utilisé, et diviser ça par le total trouvé plus tôt. Tu multiplies par 100 et t'as un pourcentage.
Mais tout ceci ne te donne qu'une utilisation moyenne depuis le démarrage de la machine. Il faut donc que tu gardes ces données (total et idle) pour qu'au prochain cycle tu puisse les soustraire des nouvelles valeurs, et refaire le calcul du pourcentage, et là t'auras l'utilisation sur la période entre les deux cycles de mesure.
Re: [/proc/stat] Comment en exploiter les donnés
Publié : sam. 27 août 2011, 20:01
par FoolEcho
En jonglant avec top (avec -b) ou ps, on doit pouvoir récupèrer ces infos aussi.
Re: [/proc/stat] Comment en exploiter les donnés
Publié : sam. 27 août 2011, 22:06
par Distag
Voici le bout de mon script que j'ai fais avec vos indications :
Code : Tout sélectionner
SLEEP=0.1
CPU0=$(awk '/^cpu0 /{print}' /proc/stat | sed 's/cpu0 //')
CPU0TOTALPRECEDANT=$(echo $CPU0 |awk '{somme=$1+$2+$3+$4+$5+$6+$7} END {print somme}')
CPU0SANSIDLEPRECEDANT=$(echo $CPU0 |awk '{somme=$1+$2+$3+$5+$6+$7} END {print somme}')
while :; do
sleep ${SLEEP}
Cpu0()
{
CPU0=$(awk '/^cpu0 /{print}' /proc/stat | sed 's/cpu0 //')
CPU0TOTAL=$(echo $CPU0 |awk '{somme=$1+$2+$3+$4+$5+$6+$7} END {print somme}')
CPU0SANSIDLE=$(echo $CPU0 |awk '{somme=$1+$2+$3+$5+$6+$7} END {print somme}')
CPU0POURCENTAGE=$(echo "scale=1; ($CPU0SANSIDLE-$CPU0SANSIDLEPRECEDANT)*100/($CPU0TOTAL-$CPU0TOTALPRECEDANT)" |bc -l)
echo -n "$CPU0POURCENTAGE%"
CPU0SANSIDLEPRECEDANT="$CPU0SANSIDLE"
CPU0TOTALPRECEDANT="$CPU0TOTAL"
return
}
([…] le reste de mon script)
Question de culture G: Comment font les programmes top, htop, Conky et autre pour obtenir ces informations sur chaque cpu?
Edit: Après un moment d'observation, je constate que les donnés renvoyées par mon script sur le cpu sont totalement invraisemblables, celles-ci ne diminuent jamais et ne sont pas du tout réactives. J'obtiens un écart de 40 point avec un conky. Ou est mon erreur?
Re: [/proc/stat] Comment en exploiter les donnés
Publié : mer. 31 août 2011, 20:41
par SataMaxx
Je crois que le problème vient du fait que tu ne monitores que le cpu0, donc uniquement le premier cpu. Il faut que tu regardes la ligne commençant par "cpu " tout court pour avoir le total.
Re: [/proc/stat] Comment en exploiter les donnés
Publié : jeu. 01 sept. 2011, 11:08
par Distag
Oui mais, je souhaite visualiser mes deux CPU. Car comme dit plus haut pour avoir juste le total des deux un top -b plus un awk devrait le faire. Je souhaite me debarrasser de conky ainsi que recupperer comme ce dernier le fait cpu1 et cpu2.