Méthode standard de suivi / calcul de l’utilisation du processus par la CPU et les E / S

Je cherchais un moyen standard de calculer l’utilisation du processeur et des E / S lors de l’exécution d’un processus. Je cherchais dans les options suivantes.

Exécuter un programme Windows et détecter quand il se termine avec C ++

Comment ce code calcule-t-il le nombre de cycles de traitement écoulés?

http://www.codeproject.com/KB/threads/Get_CPU_Usage.aspx

Je ne parviens pas à faire fonctionner le dernier. J’ai besoin de ces chiffres.

usr = userTime - last_userTime; ker = kernelTime - last_kernelTime; idl = idleTime - last_idleTime; 

Je recherche principalement des solutions basées sur Windows GCC. J’utilise Dev C ++ 4 pour les tester. Je suis également intéressé par une solution similaire sous Unix (Solaris / Linux avec GCC).

Il existe également un moyen de faire en sorte que cpu, io soit utilisé par un processus lorsque celui-ci est en cours d’exécution (comme le suivi dans un graphique), tout en limitant l’utilisation du processeur par un processeur. Note: Je ne cherche pas d’outils. Je recherche un code C standard. Si vous souhaitez partager des normes d’autres langages tels que C ++, Python, vous êtes le bienvenu.

La méthode standard consiste à utiliser les compteurs de performance de Windows. Celles-ci se présentent sous des formes “crues” et “cuites” et sont accessibles de trois manières au moins:

  1. direct: une clé spéciale dans le registre Windows
  2. Composant PDH (Performance Data Helper)
  3. WMI

Je dois vous avertir que tous ont une courbe d’apprentissage initiale assez abrupte. Une fois que vous en êtes arrivé au point où vous pouvez collecter et utiliser les données d’un seul compteur de manière raisonnable, en append davantage est cependant assez facile.

Dans votre question, vous mentionnez également une manière complètement différente de collecter des données d’utilisation du processeur. L’idée ici est d’utiliser GetProcessTimes régulièrement. Par exemple, après avoir démarré le processus enfant, vous pouvez définir une timer et l’appeler une fois par seconde pour obtenir l’utilisation en cours du processeur par le processeur.

Si vous envisagez d’utiliser votre processeur de cette manière, vous souhaiterez probablement utiliser GetProcessMemoryInfo pour collecter des statistiques d’utilisation de la mémoire de la même manière.

Pour les statistiques d’E / S, toutefois, je ne connais pas grand-chose de véritables alternatives aux compteurs de performance.