Delen via


Over prestatiemetertellers

Windows-prestatiemeteritems bieden een abstractielaag op hoog niveau met een consistente interface voor het verzamelen van verschillende soorten systeemgegevens, zoals processor-, geheugen- en schijfgebruiksstatistieken. Systeembeheerders gebruiken prestatiemeteritems om te controleren op prestatie- of gedragsproblemen. Softwareontwikkelaars gebruiken prestatiemeteritems om het resourcegebruik van hun onderdelen te controleren.

Belangrijk

Windows-prestatiemeters zijn geoptimaliseerd voor het ontdekken en verzamelen van administratieve en diagnostische gegevens. Ze zijn niet geschikt voor het verzamelen van gegevens met een hoge frequentie of voor toepassingsprofilering, omdat ze niet meer dan één keer per seconde zijn verzameld. Voor lagere overheadtoegang tot systeemgegevens wilt u mogelijk meer directe API's, zoals Processtatus helper, GlobalMemoryStatusEx, GetSystemTimesof GetProcessTimes. Voor profilering kunt u ETW-logboeken verzamelen met systeemprofileringsgegevens met behulp van tracelog.exe met -critsec, -dpcisr, -eflagof -ProfileSource opties, of u kunt hardwaretellerprofilering gebruiken.

Notitie

Verwar Windows-prestatiecounters niet met de QueryPerformanceCounter API. Windows-prestatiemeteritems bieden een abstractie op hoog niveau voor veel soorten systeeminformatie. De functie QueryPerformanceCounter biedt geoptimaliseerde toegang tot een tijdstempel met hoge precisie.

Aan de slag

Concepten

Het Windows-prestatieparametersysteem is ingedeeld in gebruikers, providers, tellersets, tellers, exemplarenen tellerwaarden.

Een consument is een softwareonderdeel dat gebruikmaakt van prestatiegegevens. Windows bevat verschillende ingebouwde hulpprogramma's die gebruikmaken van prestatiegegevens. Deze omvatten Taakbeheer, Resourcemonitor, Prestatiemeter, typeperf.exe, logman.exeen relog.exe. Ontwikkelaars kunnen scripts en toepassingen schrijven die toegang krijgen tot prestatiecounters via prestatiecounter-API's.

Een provider is een softwareonderdeel dat prestatiegegevens genereert en publiceert. Een provider publiceert gegevens voor een of meer countersets. Een databasesysteem kan zich bijvoorbeeld registreren als prestatiegegevensprovider.

  • Een V1-provider is een softwareonderdeel dat prestatiegegevens publiceert via een prestatie-DLL die draait in het proces van de consument. Een V1-provider wordt op een systeem geïnstalleerd via een .ini-bestand. De architectuur van de V1-provider is verouderd. Nieuwe providers moeten de V2-providerarchitectuur gebruiken.
  • Een V2-provider is een softwareonderdeel dat prestatiegegevens publiceert via de API's van de prestatie-tellerprovider. Een V2-provider wordt op een systeem geïnstalleerd via een xml-manifestbestand (.man).

Een counterset is een groepering van prestatiegegevens binnen een provider. Een counterset heeft een naam en een of meer tellers. Het verzamelen van gegevens uit een counterset levert een aantal exemplarenop. In sommige Windows-API's worden countersets ook wel prestatieobjectengenoemd. Een prestatiegegevensprovider voor een databasesysteem kan bijvoorbeeld een counterset bieden voor statistieken per database.

Een teller is de definitie van één stukje prestatiegegevens. Een teller heeft een naam en een type. Een 'per-database statistieken' counterset kan bijvoorbeeld een teller met de naam "transacties per seconde" bevatten met het type PERF_COUNTER_COUNTER.

Een instantie is een entiteit waarover prestatiegegevens worden gerapporteerd. Een exemplaar heeft een naam (tekenreeks) en een of meer tellerwaarden. Een "per-database statistieken" counterset kan bijvoorbeeld één instantie per database bevatten. De naam van de instantie is de databasenaam en elke instantie bevat tellerwaarden voor 'transacties per seconde', 'geheugengebruik' en 'schijfgebruik'.

Een tellerwaarde is de waarde van één stukje prestatiemeteritemgegevens. Een tellerwaarde is een geheel getal zonder teken, ofwel 32-bits of 64-bits, afhankelijk van het type van de bijbehorende teller. Wanneer u het hebt over een exemplaar, kan een tellerwaarde soms een teller of een -waardeworden genoemd.

Tip

Het kan nuttig zijn om prestatiemetertermen te relateren aan meer bekende spreadsheettermen. Een counterset is als een tabel. Een teller is als een kolom. Een instantie is als een rij. Een tellerwaarde is als een cel in de tabel.

countersets met één exemplaar altijd gegevens voor precies één exemplaar bevatten. Dit is gebruikelijk voor countersets die systeem-wijde statistieken rapporteren. Windows heeft bijvoorbeeld een ingebouwde counterset met een enkele instantie met de naam 'Geheugen' die rapporteert over wereldwijd geheugengebruik.

countersets met meerdere exemplaren gegevens bevatten voor een variabel aantal exemplaren. Dit is gebruikelijk voor countersets die rapporteren over entiteiten binnen het systeem. Windows heeft bijvoorbeeld een ingebouwde counterset met meerdere exemplaren met de naam Processor Information die één exemplaar rapporteert voor elke geïnstalleerde CPU.

Consumenten zullen periodiek gegevens van de meter van een provider verzamelen en registreren. De consument kan bijvoorbeeld gegevens één keer per seconde of één keer per minuut verzamelen. De verzamelde gegevens worden een voorbeeldgenoemd. Een voorbeeld bestaat uit tijdstempels, samen met de gegevens voor exemplaren van de counterset. De gegevens voor elk exemplaar bevatten de exemplaarnaam (tekenreeks) en een set tellerwaarden (gehele getallen, één waarde voor elke teller in de counterset).

Instantienamen moeten normaal gesproken uniek zijn binnen een steekproef, d.w.: een provider mag geen twee exemplaren retourneren met dezelfde naam als onderdeel van één steekproef. Sommige oudere providers volgen deze regel niet, dus consumenten moeten niet-unieke instantienamen kunnen tolereren. Instantienamen zijn hoofdletterongevoelig, daarom mogen instanties geen namen hebben die alleen verschillen in lettergrootte.

Notitie

Om achterwaartse compatibiliteitsredenen retourneert de counterset Proces niet-unieke exemplaarnamen op basis van de EXE-bestandsnaam. Dit kan verwarrende resultaten veroorzaken, met name wanneer een proces met een niet-unieke naam wordt gestart of afgesloten, omdat dit meestal leidt tot gegevensfouten vanwege onjuiste vergelijking van exemplaarnamen tussen voorbeelden. Consumenten van de counterset 'Proces' moeten deze niet-unieke exemplaarnamen en de resulterende gegevensfout kunnen tolereren. In Windows 11 en hoger kunt u de Process V2 counterset gebruiken om dit probleem te voorkomen.

Instantienamen moeten stabiel zijn in steekproeven, dat wil bijvoorbeeld dat een provider dezelfde instantienaam voor dezelfde entiteit moet gebruiken telkens wanneer de counterset wordt verzameld.

Elke teller heeft een type. Het tellertype geeft het type van de onbewerkte waarde van de teller aan (niet-ondertekend 32-bits geheel getal of niet-ondertekend 64-bits geheel getal). Het tellertype geeft ook aan wat de onbewerkte waarde van de teller vertegenwoordigt, waarmee wordt bepaald hoe de onbewerkte waarde moet worden verwerkt om nuttige statistieken te genereren.

Hoewel sommige tellertypen eenvoudig zijn en een onbewerkte waarde hebben die direct nuttig is, vereisen veel tellertypen extra verwerking om een nuttige opgemaakte waarde te maken. Voor het produceren van de opgemaakte waarde vereisen sommige prestatiemeteritems onbewerkte waarden uit twee steekproeven. Voor sommige prestatietypen zijn tijdstempels vereist en voor sommige tellertypen zijn onbewerkte waarden uit meerdere tellers vereist. Bijvoorbeeld:

  • PERF_COUNTER_LARGE_RAWCOUNT is een 64-bits onbewerkte waarde waarvoor geen verwerking nuttig is. Het is geschikt voor point-in-time-waarden, zoals 'Bytes aan geheugen in gebruik'.
  • PERF_COUNTER_RAWCOUNT_HEX is een 32-bits onbewerkte waarde waarvoor alleen eenvoudige hexadecimale opmaak nuttig is. Het is geschikt voor een bepaald tijdstip of voor het identificeren van informatie zoals 'Vlaggen' of 'Basisadres'.
  • PERF_COUNTER_BULK_COUNT is een 64-bits onbewerkte waarde die een telling van gebeurtenissen aangeeft en wordt gebruikt om de snelheid te berekenen waarmee de gebeurtenissen plaatsvinden. Om nuttig te zijn, vereist dit tellertype twee steekproeven die op verschillende tijdstippen zijn genomen. De opgemaakte waarde is de gebeurtenissnelheid, bijvoorbeeld het aantal keren dat de gebeurtenis per seconde heeft plaatsgevonden gedurende het interval tussen de twee steekproeven. Op basis van twee steekproeven s0 en s1wordt de opgemaakte waarde (gebeurtenissnelheid) berekend als (s1.EventCount - s0.EventCount)/(s1.TimestampInSeconds - s0.TimestampInSeconds).

Providers gedragen zich naar verwachting alsof ze staatloos zijn, d.w.: het verzamelen van gegevens uit een tegenset mag niet zichtbaar van invloed zijn op de status van de provider. Een provider mag bijvoorbeeld de tellerwaarden niet opnieuw instellen op 0 wanneer een counterset wordt verzameld en de tijdstempel van een vorige verzameling niet mag gebruiken om de waarden in de huidige verzameling aan te passen. In plaats daarvan moet het eenvoudige onbewerkte tellerwaarden bieden met nauwkeurige typen, zodat de consument nuttige statistieken kan berekenen op basis van de onbewerkte waarden en hun tijdstempels.

De architectuur van de Prestaties-API

Prestatiecountertoepassingen roepen Windows-API's aan die providers aanroepen om prestatiegegevens te verkrijgen.

Consumenten van prestatiemeteritems zijn onder andere:

De meeste prestatiecontroleconsumenten gebruiken API's van PDH.dll om prestatiegegevens te verzamelen. PDH beheert veel complexe aspecten van het verzamelen van prestatiemeteritems, zoals het parseren van query's, het vergelijken van exemplaren in meerdere voorbeelden en het berekenen van opgemaakte waarden uit de onbewerkte prestatiemeteritems. De PDH-implementatie maakt gebruik van de register-API's bij het verbruik van gegevens van een V1-provider en gebruikt de V2-consumenten-API's bij het verbruik van gegevens van een V2-provider.

Sommige oudere prestatiemeteritems gebruiken de register-API's om prestatiegegevens te verzamelen van de speciale HKEY_PERFORMANCE_DATA registersleutel. Dit wordt niet aanbevolen voor nieuwe code omdat het verwerken van de gegevens uit het register complex en foutgevoelig is. De implementatie van de register-API biedt rechtstreeks ondersteuning voor het verzamelen van gegevens van V1-providers. Het ondersteunt indirect het verzamelen van gegevens van V2-providers via een vertaallaag die gebruikmaakt van de V2-consumenten-API's.

Sommige prestatiemeterconsumenten gebruiken de PerfLib V2 Consumer-functies om rechtstreeks toegang te krijgen tot gegevens van V2-providers. Dit is complexer dan het verbruiken van gegevens met behulp van de PDH-API's, maar deze benadering kan handig zijn als PDH-API's niet kunnen worden gebruikt vanwege prestatie- of afhankelijkheidsproblemen. De PerfLib V2-implementatie biedt rechtstreeks ondersteuning voor het verzamelen van gegevens van V2-providers. Het biedt geen ondersteuning voor het verzamelen van gegevens van V1-providers.

Notitie

Windows OneCore bevat geen PDH.dll en biedt geen ondersteuning voor het verbruik van prestatiemeteritems via de register-API's. Consumenten die op OneCore draaien, moeten de PerfLib V2 Consumer-functies gebruiken.

V1-providers worden geïmplementeerd als een provider-DLL die in het consumentenproces wordt geladen. De register-API-implementatie beheert het laden van het DLL-bestand van de provider, het aanroepen van het DLL-bestand om prestatiegegevens te verzamelen en het DLL-bestand zo nodig te lossen. Het DLL-bestand van de provider is verantwoordelijk voor het verzamelen van prestatiegegevens, zoals, bijvoorbeeld met behulp van normale Windows-API's, RPC, benoemde pijpen, gedeeld geheugen of andere communicatiemechanismen tussen processen.

V2-providers worden geïmplementeerd als een gebruikersmodusprogramma (vaak een Windows-service) of een stuurprogramma voor de kernelmodus. Meestal wordt de code van de prestatiegegevensprovider rechtstreeks geïntegreerd in een bestaand onderdeel (het stuurprogramma of de service rapporteert statistieken over zichzelf). De PerfLib V2-implementatie beheert aanvragen en antwoorden via de PCW.sys kernelextensie, zodat de provider meestal geen communicatie tussen processen hoeft te implementeren om de prestatiegegevens te leveren.

Notitie

Windows Performance Counter-API's en hulpprogramma's bevatten beperkte ondersteuning voor toegang tot prestatiemeteritems vanaf andere computers via Remote Registry (voor V1-providers) en RPC (voor V2-providers). Deze ondersteuning is vaak moeilijk te gebruiken in termen van verificatiebesturingselementen (de hulpprogramma's en API's kunnen alleen worden geverifieerd als de huidige gebruiker) en in termen van systeemconfiguratie (de benodigde eindpunten en services zijn standaard uitgeschakeld). In veel gevallen is het beter om toegang te krijgen tot de prestatiemeteritems van externe systemen via WMI- in plaats van via de ingebouwde ondersteuning voor externe toegang.

Doelgroep voor ontwikkelaars

Prestatiemeteritems worden vaak gebruikt door beheerders om prestatieproblemen of abnormaal gedrag van systemen te identificeren, door ontwikkelaars om het resourcegebruik van softwareonderdelen te bestuderen en door individuele gebruikers om te begrijpen hoe programma's zich gedragen op hun systeem. Gebruik kan optreden via GUI-hulpprogramma's zoals Taakbeheer of Prestatiemeter, opdrachtregelprogramma's zoals typeperf.exe of logman.exe, via scripts via WMI en PowerShell, of via C/C++ en .NET-API's.

Prestatiemeteritems worden meestal geïmplementeerd als stuurprogramma's voor kernelmodus of services voor gebruikersmodus. Prestatiemeterproviders worden meestal geschreven in C of C++.

Runtimevereisten

Raadpleeg de sectie 'Vereisten' op de referentiepagina voor dat element voor informatie over de runtime-vereisten voor een bepaald programmeerelement.

Zie Wat is er nieuwvoor versiegeschiedenis.

Zie ook

Prestatiemeteritems gebruiken

prestatiemeteritems