Frage

Diese Frage bezieht sich auf xperf und Xperfview, Dienstprogramme, die Teil des Windows Performance Toolkit (wiederum Bestandteil von Windows SDK 7.1).

sind

Vergleich von zwei Diagrammen, „CPU Sampling by thread“ und „CPU-Auslastung durch Faden“, gibt es mehrere Unterschiede, die ich nicht verstehen. Ich werde audiodg.exe als Beispiel verwenden.

  1. in den Fäden Pulldown, gibt es nur ein Gewinde für audiodg auf dem Diagramm CPU Sampling; Die CPU-Auslastung Grafik zeigt mehr audiodg Threads.

  2. Die beiden Diagramme haben ein Y-Achse mit "% Usage", aber die Maßen abweichen. Typischerweise wird die% Nutzung für einen gegebenen Thread niedriger auf dem CPU-Sampling-Diagramm als auf der CPU-Auslastung Diagramm.

  3. Das CPU Sampling Übersichtstabelle zeigt Gewicht und% Gewicht für jedes Modul / Prozess. Wenn ich Symbole laden, kann ich ziemlich tief in den audiodg Prozess graben. Die CPU Scheduling Aggregate Übersichtstabelle zeigt die CPU-Auslastung und% CPU-Auslastung (von der CPU-Auslastung Graph gestartet) - Gewicht ist nicht verfügbar. (Umgekehrt CPU-Auslastung ist auf der CPU-Sampling Übersichtstabelle nicht verfügbar.) Ich kann nicht so tief in audiodg graben -. Ich nur den Haupt-Thread und ein paar ntdll.dll Fäden sehen

  4. Die Zahlen für jeden Prozess in dem% CPU-Auslastung und% Gewicht Spalt sind immer anders. Manchmal unterscheiden sie sich um mehr als 75%.

Also meine Fragen ... was ist die zuverlässige Messung der CPU-Auslastung hier? Sind nicht die CPU-Auslastung Zahlen von CPU Samples abgeleitet? Sollte nicht die Zahlen beziehen sich irgendwie?

War es hilfreich?

Lösung

Xperf macht dies ein wenig verwirrend, das ist mein Verständnis, was los ist:

  • CPU Beispieldaten, aktiviert mit dem Profil Kernel-Flag. CPU Abtastdaten wird an einem gewissen regelmäßigen Intervall gesammelt und zeichnen Informationen darüber, was der CPU zu dieser Zeit tat (z.B. das Verfahren, Thread-ID und Aufrufliste zum Zeitpunkt der Probe.)
  • Kontextschalterdaten, aktiviert mit dem CSWITCH Kernel-Flag. Diese zeichnet Daten über jeden Kontext-Switch, was geschieht (zum Beispiel, die in / out und den Callstacks geschaltet wurde.)

CPU Abtastung durch Gewinde zeigt die Anzahl der Ereignisse, die Profile für jeden Thread aufgezeichnet wurden, über eine gewisse Zeitintervall aggregiert für die Dauer der Messkurve. So wurde zum Beispiel wenn audiodg 10% der Zeit für 2 Sekunden ausgeführt wird, würden wir erwarten, etwa 10 „% usage“ in dieser Zeit zu sehen. da jedoch ist dies für die Probenahme basiert, ist es möglich, dass bei jeder Probe Ereignisse, Fäden aus einem anderen Prozess zu Ausführung passiert -. in anderen Worten, die 10% ‚verpasste‘ durch die Probe Ereignisse war

CPU-Auslastung durch Gewinde berechnet wird, um die Kontextumschaltung Daten. Die ‚Nutzung‘ ist die Zeitspanne zwischen Kontext geschaltet wird und dann später heraus (und natürlich werden diese Daten über einen gewissen kleinen Intervall aggregiert).

Es gibt Vorteile für die einzelnen Daten:

  • CPU Probenahme werden Sie tatsächlich sagen, was der Thread ist tun zum Zeitpunkt der Probe, weil es Aufruflisten sammelt während die Ausführung von der Faden. Der Kontextschalter Informationen werden Ihnen nur sagen, wenn ein Thread in oder aus geschaltet wird, aber nichts dazwischen.
  • Context Switch-Informationen werden Ihnen genau sagen, wie viel Zeit jeder Thread ausgeführt habe. Diese Daten korrekt sind. Probenahme, ist natürlich nur probabilistische.

So Ihre Frage zu beantworten, die CPU-Auslastung Diagramm ist „genauer“ zu verstehen, wie viel Zeit jeder Thread ausgeführt wurde,. Jedoch nicht aus, die Verwendung der Abtastdaten, weil es viel hilfreicher sein kann für das Verständnis, wo Ihre Threads tatsächlich waren, ihre Zeit zu verbringen! Für die CPU Sampling-Daten ist die Übersichtstabelle wertvoller, weil es Ihnen die Stapel zeigen. Für die CPU-Nutzungsdaten, ist die Grafik wahrscheinlich hilfreicher als die Übersichtstabelle.

Ich hoffe, das hilft!

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