Frage

Ich mache eine Analyse einer Multi-Thread-Anwendung mit den Tools Apple Instruments, die viel Informationen geben, von denen ich versuche, Sinn herauszufinden.Ich versuche, eine gute Ressource zu finden, um die Fadenzustände zu beschreiben, die im Werkzeug farbkodiert sind.Ich habe in Xnu Kernel-Dokumentation und Bücher gesucht, aber ohne viel Glück.

Es gibt viel gelb und lila, was den Modi "PREEMETED" und "Supervisor" entspricht (das vollständige Farbdiagramm wird im oberen rechten Pop-Up im beigefügten Bild beschrieben).Angesichts des "laufenden" Staates (in blau) verbringe ich so viel Zeit in diesen Staaten (in blau).

Bildbeschreibung eingeben hier

War es hilfreich?

Lösung

PREEMTED= Ihr Thread war ausgeführt und war bereit, willig und in der Lage, auszuführen, wurde jedoch (Kontext umgeschaltet) zugunsten eines anderen Threads herausgewickelt. Dies bedeutet, dass Ihr Thread nicht auf E / A oder Ereignis geschlafen hat und tatsächlich etwas CPU-Intensive tat. Aufgrund von Quantenablauf oder einem anderen Thread mit größerer Priorität wurde es jedoch aus der CPU ausgedrückt.

Supervisor= Ihr Thread war im Kernel-Modus. Normalerweise bedeutet dies, dass der Kernel einen Systemaufruf von Ihrem Thread wartet.

Keiner von ihnen ist streng schlecht, aber:

Vermeidung von Preemption: Nicht viel können Sie hier tun, außerdem mit Ihrer Priorität spielen - erhöhen Sie Ihre Priorität mit einem negativen negativen Wert oder direkt mit der SetPriority-API. Sie können auch die Planungsrichtlinien verwenden, um die Präferenz Ihres Threads zu steigern, und Cajole den MACH-Scheduler (der zugrunde liegende Entscheidungsträger von Threads), um Ihre Threads zuerst zu stecken und ihnen mehr CPU-Zeit zu geben.

Vermeidung des Supervisor-Modus: Sie könnten auf den Systemanrufen schwer sein. Das ist wieder nicht unbedingt eine schlechte Sache.

hoffe das hilft,

tg

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top