Udostępnij za pośrednictwem


Informacje o licznikach wydajności

Liczniki wydajności systemu Windows zapewniają warstwę abstrakcji wysokiego poziomu z spójnym interfejsem do zbierania różnych rodzajów danych systemowych, takich jak procesor, pamięć i statystyki użycia dysku. Administratorzy systemu używają liczników wydajności do monitorowania problemów z wydajnością lub zachowaniem. Deweloperzy oprogramowania używają liczników wydajności do sprawdzania użycia zasobów ich składników.

Ważny

Liczniki wydajności systemu Windows są zoptymalizowane pod kątem odnajdywania i zbierania danych administracyjnych/diagnostycznych. Nie są one odpowiednie do zbierania danych o wysokiej częstotliwości ani profilowania aplikacji, ponieważ nie są one przeznaczone do zbierania więcej niż raz na sekundę. Aby uzyskać niższy dostęp do informacji o systemie, możesz preferować bardziej bezpośrednie interfejsy API, takie jak pomocnik stanu procesu , GlobalMemoryStatusEx, GetSystemTimeslub GetProcessTimes. W przypadku profilowania można zbierać dzienniki ETW z danymi profilowania systemu przy użyciu opcji tracelog.exe z -critsec, -dpcisr, -eflaglub -ProfileSource, albo użyć profilowania liczników sprzętowych.

Notatka

Nie należy mylić liczników wydajności systemu Windows z interfejsem API QueryPerformanceCounter. Liczniki wydajności systemu Windows zapewniają abstrakcję wysokiego poziomu dla wielu rodzajów informacji systemowych. Funkcja QueryPerformanceCounter zapewnia zoptymalizowany dostęp do sygnatury czasowej o wysokiej precyzji.

Wprowadzenie

  • Użyj narzędzi Licznik wydajności, gdy chcesz zebrać lub wyświetlić dane wydajności z systemu.
  • Użyj interfejsów API zbierania liczników wydajności , gdy chcesz napisać skrypt lub program zbierający dane wydajności z systemu lokalnego.
  • Używaj klas liczników wydajności WMI , gdy chcesz zbierać dane o wydajności z lokalnego lub zdalnego systemu za pomocą WMI.
  • Użyj interfejsów API dostawcy wydajności, gdy chcesz opublikować dane wydajności ze składnika oprogramowania.

Pojęcia

System licznika wydajności systemu Windows jest zorganizowany w odbiorców, dostawców, zestawy liczników, liczniki, wystąpienia i wartości liczników .

konsument jest składnikiem oprogramowania, który korzysta z danych wydajności. System Windows zawiera kilka wbudowanych narzędzi, które korzystają z danych wydajności. Należą do nich Menedżer zadań, Monitor zasobów, Monitor wydajności, typeperf.exe, logman.exei relog.exe. Deweloperzy mogą pisać skrypty i aplikacje, które uzyskują dostęp do liczników wydajności przez interfejsy API liczników wydajności .

Dostawca to składnik oprogramowania, który generuje i publikuje dane wydajności. Dostawca opublikuje dane dla jednego lub więcej zestawów liczników. Na przykład system bazy danych może zarejestrować się jako dostawca danych wydajności.

  • Dostawca V1 to składnik oprogramowania, który publikuje dane dotyczące wydajności za pośrednictwem biblioteki DLL wydajnościowej , która działa w procesie konsumenta. Dostawca V1 jest instalowany w systemie za pomocą pliku .ini. Architektura dostawcy w wersji 1 jest przestarzała. Nowi dostawcy powinni używać architektury dostawcy V2.
  • Dostawca V2 to składnik oprogramowania, który publikuje dane wydajności za pośrednictwem interfejsów API dostawcy liczników wydajności . Dostawca V2 jest instalowany w systemie przy użyciu pliku .man (XML manifest).

Zestaw to grupowanie danych wydajności w ramach dostawcy. Zestaw liczników ma nazwę oraz jeden lub więcej liczników . Zbieranie danych z zestawu liczników zwraca liczbę wystąpień . W niektórych interfejsach API systemu Windows liczniki są nazywane obiektami wydajności . Na przykład dostawca danych wydajności dla systemu bazy danych może zapewnić licznik dla statystyk dla poszczególnych baz danych.

Licznik to definicja danych o wydajności pojedynczego elementu. Licznik ma nazwę i typ. Na przykład licznik "statystyki dla bazy danych" może zawierać licznik o nazwie "transakcje na sekundę" z typem PERF_COUNTER_COUNTER.

Wystąpienie to jednostka, o której są zgłaszane dane wydajności. Instancja ma nazwę (ciąg znaków) i jedną lub więcej wartości licznikowych . Na przykład zestaw liczników "statystyki dla pojedynczej bazy danych" może zawierać jedno wystąpienie dla każdej bazy danych. Nazwa wystąpienia będzie nazwą bazy danych, a każde wystąpienie będzie zawierać wartości liczników dla liczników "transakcji na sekundę", "użycie pamięci" i "użycie dysku".

Wartość licznika jest wartością pojedynczego elementu danych licznika wydajności. Wartość licznika jest niepodpisaną liczbą całkowitą, 32-bitową lub 64-bitową w zależności od typu odpowiedniego licznika. Kiedy mówimy o wystąpieniu , wartość licznika może być czasami nazywana licznikiem lub wartością .

Napiwek

Warto powiązać terminy licznika wydajności z bardziej znanymi terminami arkusza kalkulacyjnego. zestaw liczników jest jak tabela. Licznik jest jak kolumna. Instancja jest jak wiersz. Wartość licznika przypomina komórkę w tabeli.

liczniki pojedynczego wystąpienia zawsze zawierają dane dla dokładnie jednego wystąpienia. Jest to typowe dla zestawów liczników raportujących globalne statystyki systemu. Na przykład, system Windows ma wbudowany licznik dotyczący pojedynczego wystąpienia o nazwie "Pamięć", który zgłasza globalne użycie pamięci.

Zestawy liczników wielowystąpieniowych zawierają dane dla różnej liczby instancji. To jest typowe dla zestawów liczników, które raportują o jednostkach w systemie. Na przykład system Windows ma wbudowany licznik z wieloma wystąpieniami o nazwie "Informacje o procesorze", który zgłasza jedno wystąpienie dla każdego zainstalowanego procesora CPU.

Użytkownicy będą okresowo zbierać i rejestrować dane z licznika dostawcy. Na przykład użytkownik może zbierać dane raz na sekundę lub raz na minutę. Zebrane dane są nazywane przykładem . Przykład składa się z sygnatur czasowych wraz z danymi dla wystąpień licznika. Dane dla każdego wystąpienia obejmują nazwę wystąpienia (ciąg) i zestaw wartości liczników (liczby całkowite, po jednej wartości dla każdego licznika w zestawie liczników).

Nazwy wystąpień powinny być zwykle unikatowe w ramach próbki, tj. dostawca nie powinien zwracać dwóch wystąpień o tej samej nazwie co część pojedynczego przykładu. Niektórzy starsi dostawcy nie przestrzegają tej reguły, dlatego konsumenci muszą tolerować nieunikatowe nazwy wystąpień. Nazwy wystąpień nie są zależne od wielkości liter, więc wystąpienia nie powinny mieć nazw, które różnią się jedynie wielkością liter.

Notatka

Ze względów zgodności z wcześniejszymi wersjami zestaw liczników "Proces" zwraca nieunikalne nazwy wystąpień na podstawie nazwy pliku EXE. Może to spowodować mylące wyniki, zwłaszcza gdy proces o innej nazwie zostanie uruchomiony lub zamknięty, ponieważ zwykle spowoduje to usterkę danych z powodu nieprawidłowego dopasowania nazw wystąpień między przykładami. Konsumenci licznika "Proces" muszą być w stanie tolerować te nietypowe nazwy wystąpień i wynikowe błędy danych. W systemie Windows 11 i nowszych można użyć zestawu liczników Process V2, aby uniknąć tego problemu.

Nazwy instancji muszą być stabilne we wszystkich próbkach, tj. dostawca powinien używać tej samej nazwy instancji dla tej samej jednostki za każdym razem, gdy zbierany jest zestaw liczników.

Każdy licznik ma typ. Typ licznika wskazuje rodzaj surowej wartości licznika (liczba całkowita bez znaku 32-bitowa lub 64-bitowa). Typ licznika wskazuje również wartość nieprzetworzoną licznika, która określa sposób przetwarzania wartości pierwotnej w celu wygenerowania przydatnych statystyk.

Chociaż niektóre typy liczników są proste i mają wartość pierwotną, która jest bezpośrednio przydatna, wiele typów liczników wymaga dodatkowego przetwarzania, aby utworzyć przydatną sformatowaną wartość. Aby utworzyć sformatowaną wartość, niektóre typy liczników wymagają nieprzetworzonych wartości z dwóch próbek, niektóre typy liczników wymagają sygnatur czasowych, a niektóre typy liczników wymagają nieprzetworzonych wartości z wielu liczników. Na przykład:

  • PERF_COUNTER_LARGE_RAWCOUNT to 64-bitowa wartość nieprzetworzona, która nie wymaga użycia przetwarzania. Jest to odpowiednie dla punktowych wartości czasowych, takich jak "Bajty pamięci w użyciu".
  • PERF_COUNTER_RAWCOUNT_HEX to 32-bitowa wartość nieprzetworzona, która wymaga tylko prostego formatowania szesnastkowego, aby była użyteczna. Jest ona odpowiednia dla punktu w czasie lub identyfikowania informacji, takich jak "Flagi" lub "Adres podstawowy".
  • PERF_COUNTER_BULK_COUNT to 64-bitowa wartość nieprzetworzona, która wskazuje liczbę zdarzeń i służy do obliczania szybkości występowania zdarzeń. Aby być przydatnym, ten typ licznika wymaga dwóch próbek, które są rozdzielone w czasie. Sformatowana wartość to szybkość zdarzeń, tj. liczba przypadków wystąpienia zdarzenia na sekundę w interwale między dwoma próbkami. Biorąc pod uwagę dwie próbki s0 i s1, sformatowana wartość (współczynnik zdarzeń) zostanie obliczona jako (s1.EventCount - s0.EventCount)/(s1.TimestampInSeconds - s0.TimestampInSeconds).

Oczekuje się, że dostawcy będą zachowywać się tak, jakby byli bezstanowi, tj. zbieranie danych ze zbioru liczników nie powinno wyraźnie wpływać na stan dostawcy. Na przykład dostawca nie powinien resetować wartości liczników do wartości 0 po zebraniu zestawu liczników i nie powinien używać znacznika czasu poprzedniej kolekcji, aby dostosować wartości w bieżącej kolekcji. Zamiast tego należy podać proste nieprzetworzone wartości liczników z dokładnymi typami, aby odbiorca mógł obliczyć przydatne statystyki na podstawie pierwotnych wartości i ich sygnatur czasowych.

Architektura interfejsu API wydajności

Aplikacje licznika wydajności wywołują interfejsy API systemu Windows, które następnie odwołują się do dostawców w celu uzyskania danych o wydajności.

Odbiorcy licznika wydajności obejmują:

  • aplikacje dostarczane przez firmę Microsoft, takie jak Menedżer zadań, Monitor zasobów, Monitor wydajności i typeperf.exe.
  • Powierzchnie interfejsu API wysokiego poziomu udostępniane przez firmę Microsoft, które ujawniają dane liczników wydajności, takie jak klasy wydajności usługi WMI .
  • Twoje własne aplikacje lub skrypty, które korzystają z interfejsów API liczników wydajności .

Większość użytkowników liczników wydajności używa interfejsów API z PDH.dll do zbierania danych wydajności. PDH zarządza wieloma złożonymi aspektami zbierania liczników wydajności, takimi jak analizowanie zapytań, dopasowywanie instancji w wielu próbkach i obliczanie formatowanych wartości z nieprzetworzonych danych licznika. Implementacja PDH używa interfejsów API rejestru podczas pobierania danych od dostawcy w wersji 1, natomiast podczas korzystania z danych od dostawcy w wersji 2 korzysta z interfejsów API konsumenta.

Niektórzy starsi odbiorcy liczników wydajności używają interfejsów API rejestru do zbierania danych wydajności z specjalnego klucza rejestru HKEY_PERFORMANCE_DATA. Nie jest to zalecane w przypadku nowego kodu, ponieważ przetwarzanie danych z rejestru jest złożone i podatne na błędy. Implementacja interfejsu API rejestru bezpośrednio obsługuje zbieranie danych od dostawców V1. Bezpośrednio wspiera zbieranie danych od dostawców V2 poprzez warstwę translacji, która korzysta z interfejsów API dla odbiorców V2.

Niektórzy konsumenci liczników wydajności używają funkcji PerfLib V2 Consumer do bezpośredniego uzyskiwania dostępu do danych od dostawców V2. Jest to bardziej złożone niż korzystanie z danych przy użyciu interfejsów API PDH, ale takie podejście może być przydatne, jeśli interfejsy API pdH nie mogą być używane z powodu problemów z wydajnością lub zależnością. Implementacja narzędzia PerfLib w wersji 2 bezpośrednio obsługuje zbieranie danych od dostawców wersji 2. Nie obsługuje zbierania danych od dostawców V1.

Notatka

Windows OneCore nie zawiera PDH.dll ani obsługi przetwarzania danych liczników wydajności za pomocą interfejsów API rejestru. Użytkownicy uruchomioni na jednym rdzeniu muszą używać funkcji PerfLib V2 Consumer.

Dostawcy V1 są implementowani jako biblioteka DLL dostawcy, która jest ładowana do procesu konsumenta. Implementacja interfejsu API rejestru odpowiada za zarządzanie ładowaniem biblioteki DLL dostawcy, wywoływaniem funkcji tej biblioteki w celu zbierania danych o wydajności, oraz zwalnianiem tej biblioteki zgodnie z potrzebami. Biblioteka DLL dostawcy jest odpowiedzialna za zbieranie danych wydajności zgodnie z potrzebami, np. przy użyciu normalnych interfejsów API systemu Windows, RPC, nazwanych potoków, pamięci udostępnionej lub innych mechanizmów komunikacji międzyprocesowych.

Dostawcy V2 są implementowani jako program trybu użytkownika (często jako usługa systemu Windows) lub sterownik trybu jądra. Zazwyczaj kod dostawcy danych wydajności jest zintegrowany bezpośrednio z istniejącym składnikiem (tj. sterownik lub usługa zgłasza statystyki dotyczące samego siebie). Implementacja narzędzia PerfLib w wersji 2 zarządza żądaniami i odpowiedziami za pośrednictwem rozszerzenia jądra PCW.sys, dzięki czemu dostawca zwykle nie musi implementować żadnej komunikacji międzyprocesowej w celu zapewnienia danych wydajności.

Notatka

Interfejsy API i narzędzia licznika wydajności systemu Windows obejmują ograniczoną obsługę uzyskiwania dostępu do liczników wydajności z innych maszyn za pośrednictwem Rejestru zdalnego (dla dostawców V1) i RPC (dla dostawców V2). Ta obsługa jest często trudna do wykorzystania w kontekście kontroli uwierzytelniania (ponieważ narzędzia i interfejsy API mogą uwierzytelniać się jedynie jako bieżący użytkownik), jak i pod kątem konfiguracji systemu (ponieważ wymagane punkty końcowe i usługi są domyślnie wyłączone). W wielu przypadkach lepiej jest uzyskać dostęp do liczników wydajności systemów zdalnych za pośrednictwem WMI, a nie za pośrednictwem wbudowanej obsługi dostępu zdalnego.

Odbiorcy deweloperów

Liczniki wydajności są często używane przez administratorów w celu identyfikowania problemów z wydajnością lub nietypowego zachowania systemów, przez deweloperów w celu zbadania użycia zasobów składników oprogramowania oraz przez poszczególnych użytkowników w celu zrozumienia, w jaki sposób programy działają w systemie. Użycie może wystąpić za pośrednictwem narzędzi graficznego interfejsu użytkownika, takich jak Menedżer zadań lub Monitor wydajności, narzędzi wiersza polecenia, takich jak typeperf.exe lub logman.exe, za pośrednictwem skryptów za pośrednictwem usług WMI i programu PowerShell lub za pośrednictwem interfejsów API języka C/C++ i platformy .NET.

Dostawcy liczników wydajności są zwykle implementowane jako sterowniki trybu jądra lub usługi trybu użytkownika. Dostawcy liczników wydajności są zwykle pisani w języku C lub C++.

Wymagania dotyczące czasu wykonywania

Aby uzyskać informacje o wymaganiach dotyczących czasu wykonywania dla określonego elementu programowania, zobacz sekcję Wymagania na stronie referencyjnej dla tego elementu.

Aby uzyskać informacje o historii wersji, zobacz What's New.

Zobacz też

Używanie liczników wydajności

dokumentacja liczników wydajności