Obtenez les statistiques d'utilisation du processeur du programme C

8

Je veux lire les statistiques d'utilisation du CPU à partir d'un programme C, je suis intéressé par le pourcentage d'utilisation du CPU, le temps de vol, etc. Ces statistiques sont affichées dans la 3ème ligne de la topcommande.

J'ai essayé d'analyser topla sortie de awk( top -n 1 -b | awk '{print $0}'), mais il semble que cela topdonne toujours les mêmes valeurs «fictives» avant de commencer à afficher des statistiques correctes.

Existe-t-il un moyen de code, ou en analysant la sortie de certaines commandes pour obtenir les statistiques d'utilisation du processeur?

Éditer:

La plateforme est Linux

Je vous remercie.

0xFF
la source
Bien sûr, mais il n'y a pas de moyen standard. Précisez le ou les systèmes d'exploitation cibles.
jlliagre

Réponses:

5

Vous voulez lire les premières lignes de /proc/stat. Vous devrez le lire deux fois, à un intervalle de temps mesuré, et soustraire le premier ensemble de chiffres du second. Les lignes ressemblent à ceci:

cpu  1526724 408013 600675 541100340 2861417 528 14531 0 0 0
cpu0 344507 77818 251244 134816146 1119991 324 13283 0 0 0
cpu1 502614 324065 179301 133991407 1631824 136 906 0 0 0
cpu2 299080 3527 79456 136144067 103208 59 255 0 0 0
cpu3 380521 2602 90672 136148719 6393 7 86 0 0 0
intr 2111239193 344878476 16943 ...

La première ligne est agrégée pour tous les cœurs. Les lignes suivantes montrent chaque noyau. Lorsque vous voyez la ligne commençant par intr, vous savez arrêter l'analyse.

Chaque nombre est le temps que le processeur a passé dans un état particulier. Les unités sont généralement des centièmes de seconde. Les champs sont user, nice, system, idle, iowait, irq, softirq, steal, guestet guest_nice.

La documentation faisant autorité est, bien sûr, le code source. Si vous avez une copie de la source du noyau Linux à portée de main, regardez fs/proc/stat.c, en particulier la show_statfonction.

David Schwartz
la source
Savez-vous à quelle fréquence le proc / stat est mis à jour? comme une fois tous les 1 ms ou quelque chose, merci.
0xFF
Ce ne sont pas de vrais fichiers. Leur contenu est calculé lorsque vous les ouvrez.
David Schwartz
3

Il existe un exemple sur le Web qui montre comment lire /proc/pid/staten C.

Vous pouvez lire utimeou stimevaleurs à deux moments distincts et calculer les statistiques d'utilisation du processeur souhaitées. (Je suppose qu'il toputilise également ces données brutes.)

(J'ai oublié: c'est spécifique à Linux.)

Stéphane Gimenez
la source