ETW: come Windows sa praticamente tutto ciò che succede nel PC

ETW mostra cosa succede durante l'esecuzione di Windows e delle applicazioni installate: con WPR e WPA si possono analizzare CPU, thread, I/O e rallentamenti molto più a fondo del Task Manager.

Quando un programma rallenta, il disco lavora senza una causa evidente oppure un’applicazione si blocca per qualche istante, accedere alle informazioni restituite dal Task Manager (CTRL+MAIUSC+ESC) permette di ottenere soltanto una visione parziale su quanto sta avvenendo. Windows dispone di un’infrastruttura molto più profonda, radicata a basso livello nel sistema, capace di registrare processi, thread, utilizzo della CPU, operazioni I/O, caricamento delle DLL, attività di rete e moltissimi altri eventi con una precisione temporale elevata.

Si chiama ETW, acronimo di Event Tracing for Windows, ed è uno dei meccanismi diagnostici più potenti integrati nel sistema operativo. Non serve installare un componente speciale per monitorare Windows perché il sistema contiene tutto il necessari per mantenere traccia di ciò che avviene.

ETW non registra continuamente tutto quello che fate

ETW funziona attraverso dei provider, componenti che possono produrre determinate categorie di eventi. Windows ne integra moltissimi: alcuni descrivono processi e thread, altri memoria, rete, kernel, dispositivi, file system o specifiche applicazioni. Una sessione ETW abilita i provider necessari, raccoglie gli eventi in buffer e può passarli in tempo reale a un programma oppure salvarli in un file .etl.

ETW permette inoltre di abilitare soltanto specifici livelli, keyword e categorie di eventi: non è necessario registrare indiscriminatamente tutto ciò che accade e, soprattutto, il monitoraggio non è condotto di continuo.

Scoprire quanti provider ETW sono già presenti nel PC

La prima prova che consigliamo di fare è aprire il prompt dei comandi o la finestra Terminale di Windows, per poi digitare il comando seguente. Si ottiene l’elenco dei provider ETW registrati nel sistema:

logman query providers

Tra i nomi che si possono incontrare figurano, ad esempio:

Microsoft-Windows-Kernel-Memory
Microsoft-Windows-Kernel-Network
Microsoft-Windows-Kernel-PnP
Microsoft-Windows-Kernel-Power
Microsoft-Windows-Kernel-Process

Ogni provider possiede inoltre un GUID (racchiuso tra parentesi graffe) che lo identifica senza ambiguità. Ci si accorge subito di come una normale installazione di Windows contenga una quantità enorme di sorgenti diagnostiche pronte per essere attivate.

Per ottenere maggiori informazioni su uno specifico provider si può usare il comando logman query providers "Microsoft-Windows-Kernel-Process", avendo cura di sostituire tra le virgolette il nome dell’oggetto.

Il modo più semplice per usare ETW: WPR e WPA

Microsoft offre due strumenti essenziali per lavorare con ETW:

  • Windows Performance Recorder (WPR) registra gli eventi;
  • Windows Performance Analyzer (WPA) permette di analizzarli.

Entrambi fanno parte del più ampio Windows Performance Toolkit, a sua volta parte di Windows ADK, ma oggi non è più necessario installare l’intero pacchetto per iniziare.

La versione da riga di comando di WPR (wpr.exe) è infatti già inclusa in Windows 10 e Windows 11 ed è disponibile normalmente nel PATH del sistema: questo significa che può essere avviata, semplicemente digitando wpr dalla riga di comando, da qualunque percorso. WPR esiste anche in versione grafica, WPRUI.exe; quest’ultima fa però parte del Windows Performance Toolkit distribuito con l’ADK.

Windows Performance Analyzer si installa anche dal Microsoft Store

Per analizzare graficamente la “traccia” registrata da WPR serve invece Windows Performance Analyzer (WPA).

Microsoft distribuisce WPA anche come applicazione autonoma attraverso il Microsoft Store: si può quindi evitare l’installazione completa dell’ADK.

Chi preferisse usare WinGet può prima cercare il pacchetto con il comando winget search "Windows Performance Analyzer", per poi installarlo con winget install "Windows Performance Analyzer".

Accedere alle tracce ETW è quindi oggi molto semplice: WPR è già installato mentre WPA si può caricare con Microsoft Store o WinGet.

Registriamo cosa succede nel PC

Supponiamo che un certo programma utilizzi improvvisamente la CPU in modo anomalo, provocando un aumento delle risorse impegnate. È allora possibile aprire il prompt dei comandi o il Terminale come amministratore e visualizzare i profili disponibili:

wpr -profiles

Tra quelli integrati troviamo profili dedicati a CPU, disco, file, Registro, rete e altri aspetti del sistema.

ETW monitoraggio Windows

Per avviare una registrazione relativa alla CPU possiamo usare il comando wpr -start CPU quindi riprodurre il problema che ci ha spinto ad avviare una diagnosi. Si può quindi aprire l’applicazione che genera l’anomalia, eseguire l’operazione lenta e aspettare che si verifichi il picco nell’utilizzo della CPU.

Subito dopo, si possono salvare i dati di monitoraggio, ad esempio sul desktop di Windows:

wpr -stop "%USERPROFILE%\Desktop\cpu.etl"

Cosa contiene il file ETL

Il file .etl, Event Trace Log, creato da WPR, contiene gli eventi raccolti durante la sessione. Per esaminarne il contenuto, si deve avviare WPA: si tratta di un’applicazione che trasforma gli eventi ETW in timeline, grafici e tabelle. Per un problema relativo alla CPU possiamo partire dalla sezione dedicata alla computazione e dall’analisi dell’utilizzo della CPU campionata.

La differenza rispetto al Task Manager è sostanziale: mentre questo può mostrarci semplicemente la percentuale di occupazione della CPU per un certo programma; WPA consente di scendere molto più in profondità offrendo una suddivisione per thread, librerie, funzioni e così via. È quindi spesso possibile capire dove il processo ha realmente speso la maggior parte del tempo CPU.

Uno degli aspetti più interessanti di ETW riguarda lo scheduler: un programma può sembrare completamente bloccato pur usando quasi zero CPU. Il thread principale potrebbe infatti, per vari motivi, trovarsi in una condizione di attesa.

Lo stesso principio vale per le operazioni di I/O quindi, per esempio, nel caso dell’attività su hard disk e SSD. Diversamente rispetto al Task Manager, ETW permettere di correlare processo, thread, file, operazione I/O e durata. È perciò possibile stabilire quale processo genera l’accesso, quale file coinvolge e quando si verifica l’operazione.

Windows Performance Analyzer

ETW, Sysmon e Visualizzatore eventi non sono la stessa cosa

L’approccio seguito da ETW può ricordare la nota e apprezzata utilità Sysinternals Sysmon, anch’essa integrata in Windows 11. I due strumenti hanno, tuttavia, degli obiettivi differenti.

Sysmon registra eventi particolarmente utili per sicurezza e auditing: creazione di processi, connessioni di rete, modifiche ai file, caricamento di moduli e altre attività potenzialmente interessanti durante un’indagine.

Se Sysmon indica, per esempio, che powershell.exe è stato avviato da explorer.exe con una specifica riga di comando, ETW aiuta a studiare quanto tempo CPU ha usato powershell.exe, quali thread erano attivi, quando sono stati schedulati, quali moduli hanno eseguito codice, quando il processo è rimasto in attesa.

Il classico Visualizzatore eventi (l’interfaccia può essere aperta premendo Windows+R quindi scrivendo eventvwr.msc), infine, mostra prevalentemente eventi amministrativi e diagnostici conservati nei tradizionali registri Windows.

Grazie a ETW, si passa quindi da un generico “Windows è lento” a una registrazione che può mostrare cosa stava succedendo esattamente mentre il sistema era lento.

È questa la caratteristica più affascinante di ETW: gran parte dell’infrastruttura necessaria è già presente nel PC. Windows non conserva continuamente ogni minimo dettaglio delle nostre attività, ma dispone di migliaia di punti di osservazione che possono essere attivati quando serve.

Ti consigliamo anche

Link copiato negli appunti