X
    Categories: Sistemi

Individuare le attività che comportano un utilizzo intensivo della CPU tramite Xperf.

This is a mobile optimized version of this page, view original page.

 

Certe volte capita che dopo l’installazione di nuove periferiche o svariati software, il computer presenta inspiegabili rallentamenti o addirittura può congelarsi per qualche secondo.

Il caso limite è quando taskmanager mostra un alto utilizzo della cpu, ma vedendo l’elenco dei processi nessuno sembra essere il colpevole.

In questo caso ci può essere molto utile Xper (scaricabile gratuitamente da microsoft.com) , che grazie alla funzione di stackwalking consente di acquisire e visualizzare funzioni eseguite durante un periodo di tempo determinato allo scopo di individuare le operazioni che comportano un utilizzo più intensivo del processore.

Prima di tutto è importante abilitare i simboli aggiungendo queste due variabili di sistema

_NT_SYMBOL_PATH= srv*c:\symbols*http://msdl.microsoft.com/download/symbols*c:\APP1

_NT_SYMCACHE_= c:\symbols

Le variabili di sistema si inseriscono da “proprietà di sistema”, “avanzate”, “variabili d’ambiente”

Fatto questo apriamo la command line “start”, “esegui”, “cmd”.

A questo punto possiamo abilitare il tracciamento degli eventi kernel eseguendo questo comando:

xperf -on latency -stackwalk profile

Ovviamente il sovraccarico della cpu deve avvenire quando il tracciamento è abilitato.

Una volta raccolto abbastanza dati, dobbiamo unire il tracciamento del kernel (kernel.etl) ad un file con estenzione .etl

Xperf –d performance.etl

Ora apriamo performance analyzer caricando il file appena creato.

Xperf performance.etl

 

 

 

 

 

Si aprirà una serie di grafici come quelli nella figura precedente che mostrano la percentuale di utilizzo della CPU e del disco.

Questi grafici sono importanti perché ci mostrano l’utilizzo delle risorse in una finestra temporale.

Selezioniamo un area con un alto picco sulla CPU, nelle proprietà della selezione clicchiamo su summary table.

Verrà visualizzata una nuova finestra contenente il dettaglio della selezione precedente.

 

 

 

 

 

Dal menu “trace” abilitiamo i simboli, mentre dal menu a tendina sulla sinistra abilitiamo “stack” e togliamo “module” e “function”.

L’intervallo di tempo selezionato è visualizzato nella barra del titolo di

Summary Table. Pertanto, nella figura è possibile vedere come la nostra area selezionata abbracci 2,2 secondi.

I numeri nella colonna Weight rappresentano il numero di campioni raccolti durante la finestra temporale selezionata.

Così, per esempio, abbiamo selezionato una finestra di tempo di 2,2 secondi e durante quel tempo possiamo aspettarci circa 2.200 eventi attivati per la raccolta di informazioni traccia.

Ordinando per percentuale di utilizzo e cominciando ad aprire i vari rami, ci accorgiamo che il processo che ha consumato più cicli di CPU è winrar.exe

È anche possibile investigare sulle chiamate di una determinata funzione, in questo modo uno sviluppatore può individuare i problemi di performance di un software ed ottimizzare il codice.

Nel mio caso il picco di CPU è stato simulato, nella realtà probabilmente il colpevole sarà un driver (*.sys) o una libreria (*.dll), procederei quindi all’aggiornamento del driver o della libreria.

A volte quando anche l’aggiornamento del driver non porta ad un miglioramento di prestazioni è possibile che la periferica da lui pilotata sia danneggiata.

Luca Malatesta: