2009-02-08 6 views
1

Je fais des mesures de performance de mon code sur un boîtier Windows et je constate que j'obtiens des résultats très différents entre les mesures. Un peu d'exploration ad hoc pendant une lente montre dans le gestionnaire de tâches des processus inactifs prenant presque 100% CPU.Windows Processus inactif interférant avec la mesure de la performance

Est-ce que quelqu'un sait ce que signifie réellement les processus inactifs du système et quelles fonctionnalités de Windows il peut être en cours d'exécution? NB: Je ne mesure pas les performances en utilisant le gestionnaire de tâches, je l'ai juste utilisé pour voir ce qui fonctionnait d'autre pendant une mesure particulièrement lente.

S'il vous plaît pensez avant de dire ce n'est pas la programmation liée et la fermeture de la question. Je ne le demanderais pas à moins que je pensais qu'il y avait des raisons de le dire. Dans ce cas, je crois que c'est clairement parce que cela affecte négativement mon environnement de développement et de test et pour le trier, j'ai besoin d'en savoir un peu plus à ce sujet. La programmation ne commence pas et ne se termine pas avec l'écriture du code.

Répondre

4

Le processus inactif n'effectue généralement aucun travail utile sauf l'exécution de l'instruction HLT, qui place ce processeur dans un état d'alimentation inférieur (C1). Cependant, le fait que votre benchmark ne consomme pas 100% du temps CPU ouvre la porte à des spéculations sur ce qui se passe. Si votre application est monotorisée et que votre système de test est multicœur/hyperthreadé/multiprocesseur, vous devriez vous attendre à environ 50% de temps CPU inactif pour deux cœurs, 75% pour quatre, etc. les pourcentages de temps du processeur dans le Gestionnaire des tâches incluent tous les cœurs. (Je crois que les anciennes versions de Windows avaient une option pour changer cela, mais je ne le vois pas sur Vista.)

Si le processus inactif consomme beaucoup de CPU, cela peut indiquer que votre application passe un certain temps. beaucoup de temps à dormir. Il peut être en attente de données provenant d'une source externe (par exemple un disque ou un réseau). Il peut passer beaucoup de temps à attendre des objets de synchronisation (par exemple des mutex ou des événements). Il peut aussi passer beaucoup de temps à appeler la fonction Sleep(). Le profilage de votre code doit identifier où il passe son temps. L'obtention de résultats de tests entièrement reproductibles peut nécessiter de désactiver les applications et services de fond gourmands en ressources processeur/disque/réseau (indexation de recherche, inventaire logiciel SMS, analyse antivirus, téléchargements de Windows Update, IncrediBuild/distcc) ou de connecter la machine à un réseau isolé (ou à aucun réseau).

Je suppose que vous avez écrit un benchmark pour votre application, et que vous essayez simplement d'utiliser le Gestionnaire des tâches pour diagnostiquer pourquoi les résultats de l'analyse comparative ne correspondent pas à vos attentes. Le Gestionnaire des tâches n'est pas un moyen précis de mesurer les performances des applications.

2

Le processus inactif du système est une sorte de processus par défaut que Windows exécute sur le processeur lorsqu'il n'a rien d'autre à programmer pour l'exécution. Ce processus est similaire à celui d'une femme de ménage qui essaie d'économiser l'alimentation du système, par exemple.

Si vous mesurez les performances de votre programme, n'utilisez pas le gestionnaire de tâches Windows. Utilisez Performance Monitor à la place (que vous pouvez commencer en tapant 'perfmon' sur la ligne de commande). Ou mieux encore, utilisez un profiler.

-1

Si vous "processus inactif du système" prend 100%, alors que votre machine est ennuyée, rien ne se passe. Si vous additionnez tout ce qui se passe dans le gestionnaire de tâches, soustrayez ce nombre de 100%, alors vous aurez la valeur de "processus inactif du système". Notez qu'il ne consomme pratiquement aucune mémoire et ne peut pas affecter les performances.

Questions connexes