Quel type de «messages» le Moniteur d'activité suit-il avec les colonnes «Messages envoyés» et «Messages reçus»?

9

Dans Activity Monitor sous OS X, il est possible d'ajouter des colonnes supplémentaires à la vue de la liste des processus. Deux colonnes disponibles dans cette liste sont «Messages envoyés» et «Messages reçus», qui apparaissent respectivement comme «Msgs envoyés» et «Msgs Rcvd». Témoin:

Partie de la fenêtre du moniteur d'activité affichant les colonnes "Msgs envoyés" et "Msgs Rcvd"

À quel type de "messages" le moniteur d'activité fait-il référence?

Quand j'ai vu "message", j'ai d'abord pensé aux "messages" d'Objective-C qui sont distribués objc_msgSend(), mais je ne vois pas comment ceux-ci seraient suivis par le système d'exploitation puisque la plupart de ces messages seraient internes au processus lui-même . Un débogueur peut suivre ce type de messages lorsqu'il est joint, mais je ne vois pas le système d'exploitation le faire tout le temps - une surcharge très élevée.

Je suppose donc que ce sont des messages plus lourds. S'agit-il d'une forme de RPC entre les processus? Ou, ces messages sont-ils des appels de l'utilisateur-terre dans le noyau? Recherche de références définitives. Je vous remercie.

Chris W. Rea
la source

Réponses:

7

Ces nombres correspondent aux décomptes d'entrée / sortie des messages Mach, donc vous semblez avoir raison de ne pas les interpréter comme les décomptes objc_msgSend.

Vous pouvez en savoir plus sur le nombre de messages de niveau supérieur en activant des instruments (faisant partie du jeu d'outils Xcode téléchargeable gratuitement ) et en fouillant dans une application spécifique pour voir quels messages sont envoyés et quand.

Capture d'écran de Xcode Instruments

Il peut filtrer toutes les allocations ainsi que les allocations relatives à ObjC et vous pouvez creuser dans des détails de niveau beaucoup plus bas que le simple nombre d'envois de messages. La documentation canonique qui fait partie de Xcode vous aidera à comprendre ces statistiques et leur relation avec Activity Monitor.

Plus précisément, recherchez NSObjCMessageLoggingEnabledet objc_msgSenddans la partie Mac OS X Debugging Magic - Tools Guide de la documentation de référence pour obtenir le nombre d'objC.

Recherchez mach messagedans Xcode et recherchez la section IPC / Message Queues du Guide de programmation du noyau pour les détails de la file d'attente de messages mach et ce qui les compose. Il s'agit d'un trafic de noyau IPC de niveau bien inférieur, comme vous l'avez supposé.

Vous pouvez probablement le trouver sur developer.apple.com également, mais avoir la documentation locale à partir de Xcode présente de nombreux avantages.

bmike
la source
1
Merci, mais ce n'est pas encore clair. Je soupçonnais trois choses. Vouliez-vous confirmer la première chose que je soupçonnais, c'est-à objc_msgSend()- dire que les appels sont suivis pour tous les processus, ou que les messages plus lourds devinaient?
Chris W. Rea
1
Je pensais que c'étaient des comptes objc_msgSend, mais maintenant je vois que je me trompe. Ils correspondent parfaitement au nombre de messages mach disponibles lorsque vous sélectionnez un processus dans Activity Monitor. Je vais réviser ma réponse pour qu'elle soit plus correcte et moins erronée.
bmike
Merci! Le pointeur vers le Guide de programmation du noyau est particulièrement utile. N'était pas au courant.
Chris W. Rea
Oui - il y a tellement de documentation incroyable, et même si je sais comment et pourquoi elle a été mise sur developer.apple.com, je suis tellement plus efficace pour l'utiliser et la trouver lorsque j'utilise Xcode pour parcourir les documents.
bmike