Xperfview: Quelle est la différence entre le prélèvement de l'UC et l'utilisation du processeur?

StackOverflow https://stackoverflow.com/questions/3567093

  •  01-10-2019
  •  | 
  •  

Question

Cette question se rapporte à XPerf et xperfview, les services publics qui font partie de la boîte à outils de performances de Windows (en partie à son tour de Windows SDK 7.1).

En comparant deux tableaux, « échantillonnage CPU par fil » et « l'utilisation du processeur par fil », il y a plusieurs différences que je ne comprends pas. Je vais utiliser audiodg.exe comme exemple.

  1. Dans le menu déroulant Threads, il n'y a qu'un seul fil pour AudioDG sur la carte CPU d'échantillonnage; la CPU montre le graphique d'utilisation de plusieurs threads AudioDG.

  2. Les deux graphiques ont un axe Y marqué « % Utilisation », mais les mesures diffèrent. En règle générale l'utilisation% pour un fil donné est plus faible sur la CPU tableau d'échantillonnage que sur le tableau d'utilisation du CPU.

  3. Le tableau récapitulatif CPU d'échantillonnage indique le poids et% en poids pour chaque module / processus. Si je charge des symboles, je peux creuser assez profondément dans le processus de AudioDG. La CPU planification globale Tableau récapitulatif (lancé à partir du graphique d'utilisation du CPU) montre l'utilisation du processeur et% l'utilisation du processeur - Poids n'est pas disponible. (À l'inverse, l'utilisation du processeur ne sont pas disponibles sur le tableau récapitulatif CPU d'échantillonnage.) Je ne peux pas creuser aussi profond dans AudioDG -. Je ne vois que le fil principal et quelques fils de ntdll.dll

  4. Les chiffres pour tout processus dans l'utilisation et% CPU% colonnes de poids sont toujours différentes. Parfois, ils diffèrent de plus de 75%.

Alors mes questions ... quelle est la mesure fiable de l'utilisation du processeur ici? Ne sont pas les CPU numéros d'utilisation dérivés d'échantillons CPU? Ne devraient pas les chiffres se rapportent en quelque sorte?

Était-ce utile?

La solution

Xperf ne font un peu déroutant, ce que je comprends de ce qui se passe:

  • données d'échantillons de CPU, a permis avec le drapeau du noyau PROFILE. Les données de l'échantillon de CPU sont recueillies à un intervalle régulier, et enregistre des informations sur ce que l'unité centrale de traitement a été fait à ce moment-là (par exemple le processus, TID, et callstack au moment de l'échantillon.)
  • données de changement de contexte, activé avec le drapeau du noyau cDébranchez. Ces données enregistre sur chaque changement de contexte qui se produit (par exemple qui a été commutées in / out et les callstacks.)

échantillonnage de l'unité centrale par fil montre le nombre d'événements de profil qui ont été enregistrés pour chaque fil, regroupés sur un certain intervalle de temps pour la durée de la trace. Par exemple, si AudioDG exécutait 10% du temps pendant 2 secondes, nous attendre à environ 10 « % d'utilisation » pendant cette période. Cependant, parce que cela repose sur un échantillonnage, il est possible que lors de chaque événement de l'échantillon, les fils d'un autre processus est arrivé à exécuter -. Autrement dit, les 10% était « raté » par les événements de l'échantillon

l'utilisation du processeur par fil est calculé en utilisant les données de commutation de contexte. Le « usage » est la quantité de temps entre être commuté le contexte et ensuite plus tard (et bien sûr, ces données sont agrégées sur un petit intervalle).

Il y a des avantages à chaque donnée:

  • l'échantillonnage CPU vous indiqueront ce que le fil est faire au moment de l'échantillon, car il collecte des piles d'appels pendant l'exécution le fil. Les informations de changement de contexte ne vous dira quand un thread se marche ou, mais rien entre.
  • informations de changement de contexte vous dira exactement combien de temps chaque thread a à exécuter. Ces données sont correctes. L'échantillonnage, bien sûr, est que probabiliste.

Pour répondre à votre question, la CPU graphique d'utilisation est « plus précis » pour comprendre combien de temps chaque fil exécutait. Cependant, ne pas exclure l'utilisation des données d'échantillonnage, car il peut être beaucoup plus utile pour comprendre où vos discussions dépensaient en fait leur temps! Pour les données d'échantillonnage CPU, le tableau récapitulatif est plus précieux, car il vous montrera les piles. Pour les données d'utilisation du processeur, le tableau est probablement plus utile que le tableau récapitulatif.

L'espoir qui aide!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top