Informationen zu Leistungsindikatoren

Windows-Leistungsindikatoren bieten eine allgemeine Abstraktionsschicht mit einer konsistenten Schnittstelle für die Erfassung verschiedener Arten von Systemdaten, darunter z. B. Statistiken zur Prozessor-, Speicher- und Datenträgerauslastung. Systemadministrator*innen nutzen Leistungsindikatoren zur Überwachung von Leistungs- oder Verhaltensproblemen. Softwareentwickler*innen verwenden Leistungsindikatoren, um die Ressourcenauslastung ihrer Komponenten zu überprüfen.

Wichtig

Windows-Leistungsindikatoren sind für die Ermittlung und Erfassung von Verwaltungs- und Diagnosedaten optimiert. Sie eignen sich nicht für eine hochfrequente Datenerfassung oder für die Erstellung von Anwendungsprofilen, da sie nicht darauf ausgelegt sind, häufiger als einmal pro Sekunde erfasst zu werden. Für einen weniger aufwändigen und direkteren Zugriff auf Systeminformationen sollten Sie ggf. auf APIs wie die Prozessstatus-API, GlobalMemoryStatusEx, GetSystemTimes, oder GetProcessTimes zurückgreifen. Für die Profilerstellung können Sie mithilfe von tracelog.exe und den Optionen -critsec, -dpcisr, -eflag oder -ProfileSource ETW-Protokolle mit Daten zur Systemprofilerstellung erfassen, oder Sie können die HCP-API (Hardware Counter Profiling) verwenden.

Hinweis

Die Windows-Leistungsindikatoren sollten nicht mit der QueryPerformanceCounter-API verwechselt werden. Windows-Leistungsindikatoren bieten eine allgemeine Abstraktion für eine Vielzahl von Systeminformationen. Die QueryPerformanceCounter-Funktion bietet optimierten Zugriff auf einen hochpräzisen Zeitstempel.

Erste Schritte

Konzepte

Das System der Windows-Leistungsindikatoren ist in Consumer, Anbieter, Leistungsindikatorensätze, Leistungsindikatoren, Instanzen, und Indikatorwerte gegliedert.

Ein Consumer ist eine Softwarekomponente, die Leistungsdaten nutzt. Windows umfasst verschiedene integrierte Tools, die auf Leistungsdaten zurückgreifen. Dazu gehören u. a. Task-Manager, Ressourcenmonitor, Leistungsüberwachung, „typeperf.exe“, „logman.exe“ und „relog.exe“. Entwickler*innen können Skripts und Anwendungen schreiben, die über Leistungsindikatoren-APIs auf Leistungsindikatoren zugreifen.

Ein Anbieter ist eine Softwarekomponente, die Leistungsdaten generiert und veröffentlicht. Ein Anbieter veröffentlicht Daten für einen oder mehrere Leistungsindikatorensätze. Ein Datenbanksystem kann sich zum Beispiel als Anbieter von Leistungsdaten registrieren.

  • Ein V1-Anbieter ist eine Softwarekomponente, die Leistungsdaten über eine Leistungs-DLL veröffentlicht, die im Prozess des Consumers ausgeführt wird. Ein V1-Anbieter wird über eine .ini-Datei auf einem System installiert. Die V1-Anbieterarchitektur wird als veraltet eingestuft. Neue Anbieter sollten die V2-Anbieterarchitektur verwenden.
  • Ein V2-Anbieter ist eine Softwarekomponente, die Leistungsdaten über die Leistungsdatenanbieter-APIs veröffentlicht. Ein V2-Anbieter wird über eine .man-Datei (XML-Manifest) auf einem System installiert.

Ein Leistungsindikatorensatz ist eine Gruppe von Leistungsdaten innerhalb eines Anbieters. Ein Leistungsindikatorensatz weist einen Namen auf und umfasst einen oder mehrere Leistungsindikatoren. Beim Erfassen von Daten aus einem Leistungsindikatorensatz werden eine Reihe von Instanzen zurückgegeben. In einigen Windows-APIs werden Leistungsindikatorensätze als Leistungsobjekte bezeichnet. Ein Leistungsdatenanbieter für ein Datenbanksystem könnte z. B. einen Leistungsindikatorensatz für Statistiken pro Datenbank bereitstellen.

Ein Leistungsindikator ist die Definition eines einzelnen Leistungsdatenwerts. Ein Leistungsindikator weist einen Namen und einen Typ auf. Ein Leistungsindikatorensatz „Statistik pro Datenbank“ könnte beispielsweise einen Leistungsindikator namens „Transaktionen pro Sekunde“ des Typs PERF_COUNTER_COUNTER enthalten.

Eine Instanz ist eine Entität, zu der Leistungsdaten gemeldet werden. Eine Instanz weist einen Namen (Zeichenfolge) und einen oder mehrere Leistungsindikatorwerte auf. Ein Leistungsindikatorensatz „Statistik pro Datenbank“ könnte beispielsweise eine Instanz pro Datenbank umfassen. Der Instanzname würde dem Namen der Datenbank entsprechen, und jede Instanz würde Leistungsindikatorwerte für „Transaktionen pro Sekunde“, „Speicherauslastung“ und „Datenträgerauslastung“ enthalten.

Ein Leistungsindikatorwert ist der Wert eines einzelnen Leistungsindikators. Ein Leistungsindikatorwert ist eine Ganzzahl ohne Vorzeichen, entweder 32-Bit oder 64-Bit, abhängig vom Typ des jeweiligen Leistungsindikators. Im Kontext einer Instanz wird ein Leistungsindikatorwert gelegentlich auch als Zähler oder Wert bezeichnet.

Tipp

Es kann hilfreich sein, die Begriffe im Zusammenhang mit Leistungsindikatoren mit den bekannteren Begriffen aus der Tabellenkalkulation zu vergleichen. Ein Leistungsindikatorensatz ist vergleichbar mit einer Tabelle. Ein Leistungsindikator ist vergleichbar mit einer Spalte. Eine Instanz ist vergleichbar mit einer Zeile. Ein Leistungsindikatorwert ist vergleichbar mit einer Zelle in der Tabelle.

Leistungsindikatorensätze für Einzelinstanzen enthalten immer Daten für genau eine Instanz. Dies ist üblich für Leistungsindikatorensätze, die systemweite Statistiken melden. Windows umfasst beispielsweise einen integrierten Leistungsindikatorensatz namens „Arbeitsspeicher“, der Informationen zur globalen Speicherauslastung liefert.

Leistungsindikatorensätze für mehrere Instanzen enthalten Daten für eine variable Anzahl von Instanzen. Dies ist üblich für Leistungsindikatorensätze, die Daten zu Entitäten innerhalb des Systems melden. Windows umfasst beispielsweise einen integrierten Leistungsindikatorensatz namens „Prozessorinformationen“, der Informationen zu jeder installierten CPU liefert.

Consumer erfassen in regelmäßigen Abständen die Daten aus dem Leistungsindikatorensatz eines Anbieters und zeichnen sie auf. Der Consumer könnte zum Beispiel einmal pro Sekunde oder einmal pro Minute Daten sammeln. Die gesammelten Daten werden als Stichprobe bezeichnet. Eine Stichprobe besteht aus Zeitstempeln sowie den Daten für die Instanzen des Leistungsindikatorensatzes. Die Daten für jede Instanz umfassen den Instanznamen (Zeichenfolge) und eine Reihe von Leistungsindikatorwerten (Ganzzahlen, ein Wert für jeden Leistungsindikator im Leistungsindikatorensatz).

Instanznamen sollten innerhalb einer Stichprobe normalerweise eindeutig sein, d. h. ein Anbieter sollte nicht zwei gleichnamige Instanzen als Bestandteil einer einzigen Stichprobe zurückgeben. Einige ältere Anbieter befolgen diese Regel nicht, deshalb müssen Consumer in der Lage sein, nicht eindeutige Instanznamen zu tolerieren. Bei Instanznamen wird nicht zwischen Groß- und Kleinschreibung unterschieden, daher sollten sich die Namen von Instanzen nicht lediglich in der Groß- und Kleinschreibung unterscheiden.

Hinweis

Aus Gründen der Abwärtskompatibilität gibt der Leistungsindikatorensatz „Prozess“ nicht eindeutige Instanznamen basierend auf dem EXE-Dateinamen zurück. Dies kann zu verwirrenden Ergebnissen führen – insbesondere dann, wenn ein Prozess mit einem nicht eindeutigen Namen gestartet oder beendet wird. Dies führt in der Regel zu fehlerhaften Daten, da die Instanznamen der Stichproben nicht richtig zugeordnet werden. Consumer des Leistungsindikatorensatzes „Prozess“ müssen in der Lage sein, diese nicht eindeutigen Instanznamen und die daraus resultierenden fehlerhaften Daten zu tolerieren. In Windows 11 und höher können Sie den Leistungsindikatorensatz Process V2 verwenden, um dieses Problem zu vermeiden.

Instanznamen müssen über Stichproben hinweg stabil sein, d. h. ein Anbieter sollte bei jeder Erfassung des Leistungsindikatorensatzes denselben Instanznamen für eine Entität verwenden.

Jeder Leistungsindikator weist einen Typ auf. Der Typ des Leistungsindikators gibt den Typ des Rohwerts für den Indikator an (entweder eine 32-Bit-Ganzzahl ohne Vorzeichen oder eine 64-Bit-Ganzzahl ohne Vorzeichen). Der Typ des Leistungsindikators gibt außerdem an, wofür der Rohwert des Indikators steht. Dies bestimmt, wie der Rohwert verarbeitet werden sollte, um nützliche Statistiken zu generieren.

Während bestimmte Leistungsindikatoren einfach aufgebaut sind und einen direkt nutzbaren Rohwert liefern, erfordern viele Leistungsindikatoren eine zusätzliche Verarbeitung, um einen nützlichen formatierten Wert zu erzeugen. Zur Erzeugung des formatierten Werts benötigen einige Leistungsindikatoren Rohwerte von zwei Stichproben, andere Leistungsindikatoren benötigen Zeitstempel und wieder andere Leistungsindikatoren benötigen Rohwerte von mehreren Leistungsindikatoren. Beispiel:

  • PERF_COUNTER_LARGE_RAWCOUNT ist ein 64-Bit-Rohwert, der ohne weitere Verarbeitung einen Nutzen liefert. Er eignet sich für zeitpunktbezogene Werte wie z. B. „Verwendeter Arbeitsspeicher (Byte)“.
  • PERF_COUNTER_RAWCOUNT_HEX ist ein 32-Bit-Rohwert, der lediglich eine einfache hexadezimale Formatierung erfordert, um von Nutzen zu sein. Er eignet sich für zeitpunktbezogene oder identifizierende Informationen wie z. B. „Flags“ oder „Basisadresse“.
  • PERF_COUNTER_BULK_COUNT ist ein 64-Bit-Rohwert, der die Anzahl von Ereignissen angibt und mit dem berechnet werden kann, wie häufig die Ereignisse auftreten. Damit dieser Leistungsindikatortyp einen Nutzen liefert, müssen zeitlich versetzt zwei Stichproben erfasst werden. Der formatierte Wert entspricht der Ereignisrate, d. h. der Wert gibt an, wie oft das Ereignis im Zeitraum zwischen den beiden Stichproben pro Sekunde aufgetreten ist. Wenn beispielsweise die Stichproben s0 und s1 vorliegen, wird der formatierte Wert (die Ereignisrate) folgendermaßen berechnet: (s1.EventCount - s0.EventCount)/(s1.TimestampInSeconds - s0.TimestampInSeconds).

Von Anbietern wird ein zustandsloses Verhalten erwartet, d. h. die Erfassung von Daten aus einem Leistungsindikatorensatz sollte den Zustand des Anbieters nicht sichtbar beeinflussen. Beispielsweise sollte ein Anbieter die Werte der Leistungsindikatoren nicht auf 0 zurücksetzen, wenn ein Leistungsindikatorensatz erfasst wird, und er sollte nicht den Zeitstempel einer vorherigen Erfassung verwenden, um die Werte in der aktuellen Erfassung anzupassen. Stattdessen sollte er nur die Rohwerte der Leistungsindikatoren mit genauen Typen bereitstellen, sodass der Consumer nützliche Statistiken basierend auf den Rohwerten und den zugehörigen Zeitstempeln berechnen kann.

Leistungs-API-Architektur

Performance counter applications invoke Windows APIs which call into providers to obtain performance data.

Zu den Consumern von Leistungsindikatoren gehören:

Die meisten Consumer von Leistungsindikatoren verwenden APIs aus PDH.dll, um Leistungsdaten zu sammeln. PDH verwaltet zahlreiche komplexe Aspekte der Leistungsindikatorerfassung, z. B. das Parsen von Abfragen, den Abgleich von Instanzen über mehrere Stichproben hinweg und die Berechnung formatierter Werte aus den Rohdaten der Leistungsindikatoren. Die PDH-Implementierung verwendet die Registrierungs-APIs, wenn sie Daten eines V1-Anbieters nutzt, und die V2-Consumer-APIs bei der Nutzung von Daten eines V2-Anbieters.

Einige ältere Consumer von Leistungsindikatoren verwenden die Registrierungs-APIs, um Leistungsdaten aus dem speziellen Registrierungsschlüssel HKEY_PERFORMANCE_DATA zu erfassen. Dies wird für neuen Code nicht empfohlen, da die Verarbeitung der Daten aus der Registrierung komplex und fehleranfällig ist. Die Implementierung der Registrierungs-API bietet direkte Unterstützung für die Datenerfassung von V1-Anbietern. Mithilfe einer Übersetzungsschicht, die die V2-Consumer-APIs verwendet, unterstützt sie indirekt die Datenerfassung von V2-Anbietern.

Einige Consumer von Leistungsindikatoren verwenden die PerfLib V2-Consumerfunktionen, um direkt auf Daten von V2-Anbietern zuzugreifen. Dieser Ansatz ist komplexer als die Verwendung der PDH-APIs, kann aber nützlich sein, wenn die PDH-APIs aufgrund von Leistungs- oder Abhängigkeitsbedenken nicht verwendet werden können. Die PerfLib V2-Implementierung bietet direkte Unterstützung für die Datenerfassung von V2-Anbietern. Das Sammeln von Daten von V1-Anbietern wird nicht unterstützt.

Hinweis

In Windows OneCore ist „PDH.dll“ nicht enthalten, und die Nutzung von Leistungsindikatordaten über die Registrierungs-APIs wird nicht unterstützt. Consumer, die unter OneCore ausgeführt werden, müssen die PerfLib V2-Consumerfunktionen verwenden.

V1-Anbieter werden als Anbieter-DLL implementiert, die in den Consumerprozess geladen wird. Die Implementierung der Registrierungs-API verwaltet das Laden der Anbieter-DLL, den Aufruf der DLL zum Erfassen von Leistungsdaten und gegebenenfalls das Entladen der DLL. Die Anbieter-DLL ist für die Erfassung von Leistungsdaten nach Bedarf zuständig, z. B. über normale Windows-APIs, RPC, Named Pipes, freigegebenen Speicher oder andere prozessübergreifende Kommunikationsmechanismen.

V2-Anbieter werden entweder als Programm im Benutzermodus (häufig ein Windows-Dienst) oder als Treiber im Kernelmodus implementiert. In der Regel wird der Code des Leistungsdatenanbieters direkt in eine vorhandene Komponente integriert (d. h. der Treiber oder Dienst meldet Statistiken über sich selbst). Die PerfLib V2-Implementierung verwaltet Anforderungen und Antworten über die Kernelerweiterung „PCW.sys“, sodass der Anbieter in der Regel keine prozessübergreifende Kommunikation zur Bereitstellung der Leistungsdaten implementieren muss.

Hinweis

Die Windows-Leistungsindikator-APIs und -Tools bieten begrenzte Unterstützung für den Zugriff auf Leistungsindikatoren anderer Computer über Remoteregistrierung (für V1-Anbieter) und RPC (für V2-Anbieter). Diese Unterstützung lässt sich häufig nur schwer nutzen, sowohl in Bezug auf Authentifizierungskontrollen (die Tools und APIs können sich nur als der bzw. die aktuelle Benutzer*in authentifizieren) als auch im Hinblick auf die Systemkonfiguration (die erforderlichen Endpunkte und Dienste sind standardmäßig deaktiviert). In vielen Fällen ist es besser, statt über die integrierte Remotezugriffsunterstützung per WMI auf die Leistungsindikatoren von Remotesystemen zuzugreifen.

Entwicklergruppe

Leistungsindikatoren werden von Administrator*innen häufig dazu genutzt, Probleme mit der Systemleistung oder ein ungewöhnliches Verhalten zu erkennen, während Entwickler*innen die Ressourcennutzung von Softwarekomponenten untersuchen und einzelne Benutzer*innen nachvollziehen möchten, wie sich Programme auf ihrem System verhalten. Die Verwendung kann über GUI-Tools wie Task-Manager oder Leistungsüberwachung, Befehlszeilentools wie „typeperf.exe“ oder „logman.exe“, über Skripts per WMI und PowerShell oder über C/C++ und .NET-APIs erfolgen.

Anbieter von Leistungsindikatoren sind in der Regel als Treiber im Kernelmodus oder als Dienste im Benutzermodus implementiert. Leistungsindikatoranbieter werden in der Regel in C oder C++ geschrieben.

Laufzeitanforderungen

Informationen zu den Laufzeitanforderungen für ein bestimmtes Programmierungselement finden Sie im Abschnitt „Anforderungen“ auf der Referenzseite für das betreffende Element.

Einen Versionsverlauf finden Sie unter Neuerungen.

Siehe auch

Verwenden von Leistungsindikatoren

Referenz zu Leistungsindikatoren