Informazioni sui contatori delle prestazioni

I contatori delle prestazioni di Windows forniscono un livello di astrazione di alto livello con un'interfaccia coerente per la raccolta di vari tipi di dati di sistema, ad esempio processore, memoria e statistiche di utilizzo del disco. Gli amministratori di sistema usano i contatori delle prestazioni per monitorare i problemi di prestazioni o comportamento. Gli sviluppatori di software usano contatori delle prestazioni per controllare l'utilizzo delle risorse dei relativi componenti.

Importante

I contatori delle prestazioni di Windows sono ottimizzati per l'individuazione e la raccolta di dati amministrativi/diagnostici. Non sono appropriati per la raccolta di dati ad alta frequenza o per la profilatura delle applicazioni perché non sono progettati per essere raccolti più di una volta al secondo. Per l'accesso a un sovraccarico inferiore alle informazioni di sistema, è possibile preferire API più dirette, ad esempio Helper stato processo, GlobalMemoryStatusEx, GetSystemTimes o GetProcessTimes. Per la profilatura, è possibile raccogliere i log ETW con i dati di profilatura di sistema usando tracelog.exe con -critsecopzioni , -dpcisr-eflag, o -ProfileSource oppure è possibile usare la profilatura dei contatori hardware.

Nota

Non confondere i contatori delle prestazioni di Windows con l'API QueryPerformanceCounter . I contatori delle prestazioni di Windows forniscono un'astrazione di alto livello per molti tipi di informazioni di sistema. La funzione QueryPerformanceCounter consente l'accesso ottimizzato a un timestamp ad alta precisione.

Introduzione

Concetti

Il sistema contatore delle prestazioni di Windows è organizzato in consumer, provider, contatori, contatori, istanze e valori dei contatori.

Un consumer è un componente software che usa i dati sulle prestazioni. Windows include diversi strumenti predefiniti che usano i dati sulle prestazioni. Tra cui Gestione attività, Monitoraggio risorse, Monitor prestazioni, typeperf.exe, logman.exe e relog.exe. Gli sviluppatori possono scrivere script e applicazioni che accedono ai contatori delle prestazioni tramite API del contatore delle prestazioni.

Un provider è un componente software che genera e pubblica i dati sulle prestazioni. Un provider pubblicherà i dati per uno o più contatori. Ad esempio, un sistema di database può registrarsi come provider di dati delle prestazioni.

  • Un provider V1 è un componente software che pubblica i dati sulle prestazioni tramite una DLL di prestazioni eseguita nel processo del consumer. Un provider V1 viene installato in un sistema tramite un .ini file. L'architettura del provider V1 è deprecata. I nuovi provider devono usare l'architettura del provider V2.
  • Un provider V2 è un componente software che pubblica i dati sulle prestazioni tramite le API del provider di contatori delle prestazioni. Un provider V2 viene installato in un sistema tramite un .man file manifesto XML.

Un contatore è un raggruppamento di dati sulle prestazioni all'interno di un provider. Un contatore ha un nome e uno o più contatori. La raccolta dei dati da un contatore restituisce una serie di istanze. In alcune API di Windows, i contatori sono denominati oggetti prestazioni. Ad esempio, un provider di dati sulle prestazioni per un sistema di database potrebbe fornire un contatore per le statistiche per ogni database.

Un contatore è la definizione di singoli dati sulle prestazioni. Un contatore ha un nome e un tipo. Ad esempio, un contatore "statistiche per database" può contenere un contatore denominato "transazioni al secondo" con tipo PERF_COUNTER_COUNTER.

Un'istanza è un'entità su cui vengono segnalati i dati sulle prestazioni. Un'istanza ha un nome (stringa) e uno o più valori del contatore. Ad esempio, un contatore "statistiche per database" può contenere un'istanza per ogni database. Il nome dell'istanza sarà il nome del database e ogni istanza conterrà i valori dei contatori "transazioni al secondo", "utilizzo della memoria" e "utilizzo del disco".

Un valore del contatore è il valore di un singolo frammento di dati del contatore delle prestazioni. Un valore del contatore è un intero senza segno, a 32 bit o a 64 bit a seconda del tipo del contatore corrispondente. Quando si parla di un'istanza, un valore del contatore può talvolta essere chiamato contatore o un valore.

Suggerimento

Potrebbe essere utile correlare i termini del contatore delle prestazioni a termini di foglio di calcolo più familiari. Un contatore è simile a una tabella. Un contatore è simile a una colonna. Un'istanza è simile a una riga. Un valore del contatore è simile a una cella della tabella.

I contatori a istanza singola contengono sempre dati per una sola istanza. Questo è comune per i contatori che segnalano le statistiche globali del sistema. Windows, ad esempio, dispone di un contatore a istanza singola predefinito denominato "Memoria" che segnala l'utilizzo della memoria globale.

I contatori a più istanze contengono dati per un numero variabile di istanze. Questo è comune per i contatori che segnalano le entità all'interno del sistema. Ad esempio, Windows dispone di un contatore a istanze multipla predefinito denominato "Informazioni processore" che segnala un'istanza per ogni CPU installata.

I consumer raccolgono e registrano periodicamente i dati dal contatore di un provider. Ad esempio, il consumer potrebbe raccogliere dati una volta al secondo o una volta al minuto. I dati raccolti sono denominati esempio. Un esempio è costituito da timestamp insieme ai dati per le istanze del contatore. I dati per ogni istanza includono il nome dell'istanza (stringa) e un set di valori contatori (numeri interi, un valore per ogni contatore nel contatore).

I nomi di istanza devono in genere essere univoci all'interno di un esempio, ovvero un provider non deve restituire due istanze con lo stesso nome di un singolo esempio. Alcuni provider meno recenti non seguono questa regola, quindi i consumer devono essere in grado di tollerare nomi di istanza non univoci. I nomi delle istanze non fanno distinzione tra maiuscole e minuscole, pertanto le istanze non devono avere nomi che differiscono solo nel caso.

Nota

Per motivi di compatibilità con le versioni precedenti, il contatore "Process" restituisce nomi di istanza non univoci in base al nome file EXE. Ciò può causare risultati confusi, in particolare quando un processo con un nome non univoco viene avviato o arrestato, in quanto ciò comporta in genere errori di dati a causa di una corrispondenza errata dei nomi di istanza tra campioni. I consumer del contatore "Process" devono essere in grado di tollerare questi nomi di istanza non univoci e glitch di dati risultanti. In Windows 11 e versioni successive è possibile usare il Process V2 contatore per evitare questo problema.

I nomi delle istanze devono essere stabili tra esempi, ad esempio un provider deve usare lo stesso nome di istanza per la stessa entità ogni volta che viene raccolto il contatore.

Ogni contatore ha un tipo. Il tipo di contatore indica il tipo del valore non elaborato del contatore (intero senza segno a 32 bit o intero senza segno a 64 bit). Il tipo di contatore indica anche il valore non elaborato del contatore, che determina come deve essere elaborato il valore non elaborato per generare statistiche utili.

Anche se alcuni tipi di contatore sono semplici e hanno un valore non elaborato direttamente utile, molti tipi di contatori richiedono un'elaborazione aggiuntiva per creare un valore formattato utile. Per produrre il valore formattato, alcuni tipi di contatore richiedono valori non elaborati di due campioni, alcuni tipi di contatore richiedono timestamp e alcuni tipi di contatori richiedono valori non elaborati da più contatori. Ad esempio:

  • PERF_COUNTER_LARGE_RAWCOUNT è un valore non elaborato a 64 bit che non richiede l'elaborazione per essere utile. È appropriato per i valori temporizzato, ad esempio "Byte di memoria in uso".
  • PERF_COUNTER_RAWCOUNT_HEX è un valore non elaborato a 32 bit che richiede solo la formattazione esadecimale semplice per essere utile. È appropriato per informazioni temporizzato o di identificazione, ad esempio "Flag" o "Indirizzo di base".
  • PERF_COUNTER_BULK_COUNT è un valore non elaborato a 64 bit che indica un conteggio degli eventi e viene usato per calcolare la frequenza con cui si verificano gli eventi. Per essere utile, questo tipo di contatore richiede due campioni separati nel tempo. Il valore formattato è la frequenza degli eventi, ovvero il numero di volte in cui si è verificato l'evento al secondo nell'intervallo tra i due campioni. Dati due campioni s0 e s1, il valore formattato (frequenza eventi) viene calcolato come (s1.EventCount - s0.EventCount)/(s1.TimestampInSeconds - s0.TimestampInSeconds).

Si prevede che i provider si comportino come se fossero senza stato, ovvero la raccolta di dati da un contatore non dovrebbe influire visibilmente sullo stato del provider. Ad esempio, un provider non deve reimpostare i valori dei contatori su 0 quando viene raccolto un contatore e non deve utilizzare il timestamp di una raccolta precedente per modificare i valori nella raccolta corrente. Deve invece fornire semplici valori di contatore non elaborati con tipi accurati in modo che il consumer possa calcolare statistiche utili in base ai valori non elaborati e ai relativi timestamp.

Architettura dell'API prestazioni

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

I consumer dei contatori delle prestazioni includono:

La maggior parte dei consumer dei contatori delle prestazioni usa LE API di PDH.dll per raccogliere dati sulle prestazioni. PDH gestisce molti aspetti complessi della raccolta di contatori delle prestazioni, ad esempio l'analisi delle query, la corrispondenza delle istanze tra più campioni e il calcolo dei valori formattati dai dati del contatore non elaborati. L'implementazione PDH usa le API del Registro di sistema quando si usano i dati di un provider V1 e usa le API consumer V2 quando si usano dati da un provider V2.

Alcuni consumer di contatori delle prestazioni meno recenti usano le API del Registro di sistema per raccogliere dati sulle prestazioni dalla chiave speciale HKEY_PERFORMANCE_DATA del Registro di sistema. Questo non è consigliato per il nuovo codice perché l'elaborazione dei dati dal Registro di sistema è complessa e soggetta a errori. L'implementazione dell'API del Registro di sistema supporta direttamente la raccolta di dati dai provider V1. Supporta indirettamente la raccolta di dati dai provider V2 tramite un livello di conversione che usa le API consumer V2.

Alcuni consumer di contatori delle prestazioni usano le funzioni Consumer PerfLib V2 per accedere direttamente ai dati dai provider V2. Questo approccio è più complesso rispetto all'utilizzo dei dati usando le API PDH, ma questo approccio può essere utile se le API PDH non possono essere usate a causa di problemi di prestazioni o dipendenze. L'implementazione di PerfLib V2 supporta direttamente la raccolta di dati dai provider V2. Non supporta la raccolta di dati dai provider V1.

Nota

Windows OneCore non include PDH.dll e non include il supporto per l'utilizzo dei dati dei contatori delle prestazioni tramite le API del Registro di sistema. I consumer in esecuzione in OneCore devono usare le funzioni Consumer PerfLib V2.

I provider V1 vengono implementati come DLL del provider caricati nel processo consumer. L'implementazione dell'API del Registro di sistema gestisce il caricamento della DLL del provider, la chiamata alla DLL per raccogliere i dati sulle prestazioni e scaricare la DLL in base alle esigenze. La DLL del provider è responsabile della raccolta dei dati sulle prestazioni in base alle esigenze, ad esempio usando le normali API di Windows, RPC, named pipe, memoria condivisa o altri meccanismi di comunicazione interprocesso.

I provider V2 vengono implementati come programma in modalità utente (spesso un servizio Windows) o un driver in modalità kernel. In genere il codice del provider di dati delle prestazioni è integrato direttamente in un componente esistente, ad esempio il driver o il servizio segnala le statistiche su se stesso. L'implementazione di PerfLib V2 gestisce le richieste e le risposte tramite l'estensione kernel PCW.sys, pertanto il provider in genere non deve implementare alcuna comunicazione interprocesso per fornire i dati sulle prestazioni.

Nota

Le API e gli strumenti del contatore delle prestazioni di Windows includono un supporto limitato per l'accesso ai contatori delle prestazioni da altri computer tramite Registro di sistema remoto (per i provider V1) e RPC (per i provider V2). Questo supporto è spesso difficile da usare in termini di controlli di autenticazione (gli strumenti e le API possono eseguire l'autenticazione solo come utente corrente) e in termini di configurazione del sistema (gli endpoint e i servizi necessari sono disabilitati per impostazione predefinita). In molti casi, è preferibile accedere ai contatori delle prestazioni dei sistemi remoti tramite WMI anziché tramite il supporto predefinito per l'accesso remoto.

Destinatari per sviluppatori

I contatori delle prestazioni vengono spesso utilizzati dagli amministratori per identificare i problemi di prestazioni o il comportamento anomalo dei sistemi, dagli sviluppatori per studiare l'utilizzo delle risorse dei componenti software e dai singoli utenti per comprendere il comportamento dei programmi nel proprio sistema. L'utilizzo può verificarsi tramite strumenti GUI come Gestione attività o Monitor prestazioni, strumenti da riga di comando come typeperf.exe o logman.exe, tramite script tramite WMI e PowerShell o tramite API C/C++ e .NET.

I provider di contatori delle prestazioni vengono in genere implementati come driver in modalità kernel o servizi in modalità utente. I provider di contatori delle prestazioni vengono in genere scritti in C o C++.

Requisiti di runtime

Per informazioni sui requisiti di runtime per un particolare elemento di programmazione, vedere la sezione Requisiti della pagina di riferimento per tale elemento.

Per la cronologia delle versioni, vedere Novità.

Vedi anche

Uso dei contatori delle prestazioni

Riferimenti ai contatori delle prestazioni