[/proc/stat] Comment en exploiter les donnés
[/proc/stat] Comment en exploiter les donnés
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.
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.
x86_64 | KDE | Clavier Bépo
Re: [/proc/stat] Comment en exploiter les donnés
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.
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.
- FoolEcho
- Maître du Kyudo
- Messages : 10711
- Inscription : dim. 15 août 2010, 11:48
- Localisation : Basse-Normandie
Re: [/proc/stat] Comment en exploiter les donnés
En jonglant avec top (avec -b) ou ps, on doit pouvoir récupèrer ces infos aussi.
«The following statement is not true. The previous statement is true.» 

Re: [/proc/stat] Comment en exploiter les donnés
Voici le bout de mon script que j'ai fais avec vos indications :
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?
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)
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?
x86_64 | KDE | Clavier Bépo
Re: [/proc/stat] Comment en exploiter les donnés
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
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.
x86_64 | KDE | Clavier Bépo