Welche Art von "Nachrichten" verfolgt Activity Monitor mit den Spalten "Gesendete Nachrichten" und "Empfangene Nachrichten"?

9

In Activity Monitor unter OS X können der Prozesslistenansicht zusätzliche Spalten hinzugefügt werden. Zwei in dieser Liste verfügbare Spalten sind "Gesendete Nachrichten" und "Empfangene Nachrichten", die als "Gesendete Nachrichten" bzw. "Rcvd-Nachrichten" angezeigt werden. Zeuge:

Fenster des Aktivitätsmonitors mit den Spalten "Gesendete Nachrichten" und "Rcvd-Nachrichten"

Auf welche Art von "Nachrichten" bezieht sich Activity Monitor?

Als ich "message" sah, dachte ich zuerst an Objective-C "messages", die mit versendet werden objc_msgSend(), aber ich kann nicht sehen, wie diese vom Betriebssystem verfolgt werden würden, da die meisten dieser Nachrichten prozessintern wären . Ein Debugger verfolgt diese Art von Nachrichten möglicherweise, wenn er angehängt ist, aber ich kann nicht feststellen, dass das Betriebssystem dies ständig tut - sehr viel Overhead.

Ich schätze, das sind Nachrichten mit höherem Gewicht. Sind sie eine Form von RPC zwischen Prozessen? Oder werden diese Nachrichten vom Benutzerland in den Kernel gerufen? Ich suche definitive Referenzen. Vielen Dank.

Chris W. Rea
quelle

Antworten:

7

Diese Zahlen stimmen mit der Anzahl der eingehenden / ausgehenden Mach-Nachrichten überein. Sie scheinen also richtig zu sein, wenn Sie sie nicht als die Anzahl der objc_msgSend-Nachrichten interpretieren.

Sie können mehr über die Nachrichtenanzahl auf höherer Ebene erfahren, indem Sie Instrumente (Teil des frei herunterladbaren Xcode-Toolset ) starten und in einer bestimmten Anwendung nachsehen, welche Nachrichten wann gesendet werden.

Screenshot von Xcode Instruments

Es kann alle Zuordnungen sowie Zuordnungen in Bezug auf ObjC filtern und Sie können Details auf einer viel niedrigeren Ebene als nur die Anzahl der gesendeten Nachrichten untersuchen. Die in Xcode enthaltene kanonische Dokumentation hilft Ihnen dabei, diese Statistiken und ihre Beziehung zum Aktivitätsmonitor zu verstehen.

Suchen Sie in der Referenzdokumentation nach NSObjCMessageLoggingEnabledund objc_msgSendim Abschnitt Debugging Magic - Tools-Handbuch für Mac OS X, um die objC-Werte zu ermitteln.

Suchen Sie mach messagein Xcode nach und suchen Sie im Abschnitt IPC / Message Queues des Kernel Programming Guide nach mach-Nachrichtenwarteschlangendetails und deren Zusammensetzung. Es handelt sich, wie Sie vermutet haben, um viel weniger IPC-Kernel-Verkehr.

Sie können es wahrscheinlich auch auf developer.apple.com finden, aber die Dokumentation lokal in Xcode zu haben, hat viele Vorteile.

bmike
quelle
1
Danke - aber es ist noch nicht glasklar. Ich vermutete drei Dinge. Wollten Sie das erste, was ich vermutete, bestätigen, dh objc_msgSend()Anrufe werden für alle Prozesse nachverfolgt, oder die schwereren Nachrichten werden erraten?
Chris W. Rea
1
Ich dachte, das wären objc_msgSend-Zähler, aber jetzt sehe ich, dass ich falsch liege. Sie sind perfekt auf die Anzahl der verfügbaren mach-Nachrichten abgestimmt, wenn Sie einen Prozess in Activity Monitor auswählen. Ich werde meine Antwort überarbeiten, um korrekter und weniger falsch zu sein.
bmike
Vielen Dank! Der Verweis auf das Kernel Programming Guide ist besonders hilfreich. War sich dessen nicht bewusst.
Chris W. Rea
Ja, es gibt so viel erstaunliche Dokumentation, und obwohl ich weiß, wie und warum sie auf developer.apple.com veröffentlicht wurde, kann ich sie effektiver verwenden und finden, wenn ich Xcode zum Durchsuchen der Dokumente verwende.
bmike