Bonjour.
Tout est dans le titre. Je désire afficher dans mon application son pourcentage d'occupation processeur comme peut le faire le logiciel "top". Le tout en C bien sûr.
Merci d'avance pour vos réponses.
Forum Programmation.c Récupérer la charge processeur d'une application.
23
sept.
2004
# Un indice...
Posté par calandoa . Évalué à 1.
...
[^] # Re: Un indice...
Posté par gerald dumas . Évalué à 1.
Cependant le fait de lire dans /proc veut-il dire qu'il faille une option dans le noyau ou bien est-ce implémenté d'office? Je pose la question histoire d'être sûr que l'application tournera sur n'importe qu'elle distribution.
[^] # Re: Un indice...
Posté par calandoa . Évalué à 2.
[^] # Re: Un indice...
Posté par Krunch (site web personnel) . Évalué à 3.
getloadavg(3) peut remplacer /proc/loadavg mais à part ça...et sysctl(2) n'est pas plus portable. Ceci dit si ton programme n'est censé tourner que sur des distributions GNU/Linux "normales", tu ne devrais pas avoir de problèmes.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: Un indice...
Posté par gc (site web personnel) . Évalué à 4.
[^] # Re: Un indice...
Posté par calandoa . Évalué à 4.
# /proc
Posté par LaBienPensanceMaTuer . Évalué à 1.
A mon avis, c'est le fichier stat qui t'intéresse.
Après, si tu veux être sur qu'il s'agisse la de la bonne méthode, je te conseille de regarder les sources de top et/ou ps ou, plus facile encore, tracer l'execution de l'une des ces 2 commandes (strace -o pouet ps aux && more pouet )
# Récupérer la charge processeur d'une application
Posté par djamil . Évalué à 1.
cdlt
[^] # Re: Récupérer la charge processeur d'une application
Posté par gerald dumas . Évalué à 2.
Quelqu'un aurait-il une idée ?
[^] # Re: Récupérer la charge processeur d'une application
Posté par Sébastien Koechlin . Évalué à 4.
LE CPU
=====
Que signifie le %CPU ? Sur une machine monoprocesseur, lorsque le processus est actif, il consomme 100% du CPU. Lorsqu'il est en attente du processeur, il consomme 0% et lorsqu'il est en attente d'un evenement, il consomme également 0%.
Le % d'occupation CPU n'a de sens que lorsqu'on fait une moyenne sur un certain intervalle de temps, mais la valeur va beaucoup varier en fonction des autres processus qui s'exécutent sur la machine.
On peut éventuellement donner un peu de sens au temps CPU consommé sur un certain intervale, pour cela, tu vas trouver le temps CPU user, le temps CPU systeme et l'heure de démarrage du processus, tu peux alors calculer un ratio un peu comme tu veux en utilisant cela.
La Mémoire
========
Linux est un OS conçu de façon intelligente et supportant de nombreuses fonctionnalitées. Librairies, Swap, mémoire partagée, copie à l'écriture...
Regarde donc le fichier /proc/self/maps
Lorsqu'un processus s'exécute, le binaire est chargé en mémoire; mais si le même programme est lancé deux fois et qu'il ne s'agit pas de code auto-modifiant (ce qui est mal), linux n'a en réalité qu'une seule copie en mémoire. Ca commence mal pour mesurer l'occupation mémoire.
Les programmes utilisent des librairies dynamiques, qui ont le même avantage, on ne charge pas la libc pour chaque nouveau processus, seule une ou quelques pages sont propre à chaque processus. Est-ce qu'il faut compter les librairies dans la taille mémoire occupée ?
Lorsque l'OS a besoin de place en mémoire, il envoi les données dans le SWAP, faut-il compter cette mémoire ? S'il s'agit de mémoire correspondant à l'image d'un fichier (exécutable par exemple) et que la page est intacte, on n'a même pas besoin de la mettre dans le swap puisqu'on pourra la relire directement sur le disque.
Lorsqu'un processus réclame de la mémoire, elle n'est pas forcément allouée à ce moment là, mais plutot au premier accès qui sera fait, on ne sait donc pas trop s'il faut compter cette mémoire ou non.
Ca continue, on peut mapper des fichiers en mémoire, est-ce que c'est réellement de la mémoire occupée ? On peut partager de la mémoire entre plusieurs processus, même problème.
Enfin un processus qui va faire des I/O disque va occuper de nombreuses pages mémoire dans le cache disque, ces pages peuvent être occupées uniquement pour ce processus, pourtant elles sont dans le noyau et on aura toutes les peines du monde à retrouver le processus correspondant.
L'occupation mémoire est donc une notion très très vague qu'il n'est pas réellement possible de définir. Le fichier maps donne l'espace mémoire d'un processus, sans dire s'il y a réellement de la mémoire occupée derrière.
[^] # Re: Récupérer la charge processeur d'une application
Posté par Damien Caliste (site web personnel) . Évalué à 1.
Pour la charge processeur, je n'ai pas de réponse simple, voir pas de réponse du tout, je ne comprends pas ce que contient le fichier /proc/id/cpu et la documentation dont je t'ai parlé n'est pas très détaillée à ce sujet.
[^] # Re: Récupérer la charge processeur d'une application
Posté par gerald dumas . Évalué à 1.
Par contre, pour la mémoire, même si effectivement les binaires sous format ELF partagent leurs librairies et codes communs, il m'est quand même intéressant de la calculer. Il suffit comme le dit justement Damien Caliste, de faire un petit calcul. Toutes les infos sont dans /proc/id/stats et proc/meminfo.
Lorsque je développe une application, je m'assure constament de ne pas laisser des allocations mémoires se perdrent et ainsi grossirent l'occupation du soft en mémoire, voir assurer un bon plantage. Alors, même si la valeur calculée ne reflète pas forcement la juste vérité, elle est quand même un bon indicateur pour le développement ( enfin je pense ).
Encore merci...
# Une idée ...
Posté par Claude SIMON (site web personnel) . Évalué à 2.
Zelbinium, la programmation ludique
[^] # Re: Une idée ...
Posté par Bastien Mourgues . Évalué à 2.
Cette fonction est censée renvoyer des infos sur les resources consommées par un/des processus (temps système/utilisateur, ...)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.