Introduzione
Lo strumento Linux perf è un'utilità della riga di comando leggera per la profilazione e il monitoraggio delle prestazioni della CPU sui sistemi Linux. Sebbene lo strumento sia semplice, fornisce informazioni approfondite che aiutano nell'analisi delle CPU.
Il comando contiene molti sottocomandi per la raccolta, la traccia e l'analisi dei dati degli eventi della CPU.
Questa guida mostra lo strumento perf attraverso esempi.

Prerequisiti
- Accesso al terminale.
- Accesso a root o utente con privilegi sudo.
- Un editor di testo, come nano o Vi/Vim.
Come installare perf
Il programma perf non è preinstallato sui sistemi Linux. L'installazione differisce in base alla distribuzione Linux:
- Ubuntu/Debian
sudo apt install linux-tools-$(uname -r) linux-tools-generic
- RHEL/CentOS
sudo yum install perf
- Fedora
sudo dnf install perf
Verifica l'installazione con:
perf --version

L'output stampa il numero di versione, indicando che l'installazione è riuscita.
Consenti agli utenti regolari di utilizzare perf
Il perf
il comando, per impostazione predefinita, richiede sudo
privilegi. Per consentire agli utenti regolari di utilizzare perf
, procedi come segue:
1. Passa all'utente root:
sudo su -
2. Immettere il seguente comando:
echo 0 > /proc/sys/kernel/perf_event_paranoid
Il comando consente agli utenti regolari di utilizzare l'utilità perf nella sessione corrente.
3. Torna all'utente normale con:
exit

Per rendere persistenti le modifiche, procedi come segue:
1. Modifica il sysctl file di configurazione:
sudo nano /etc/sysctl.conf
2. Aggiungi quanto segue al file:
kernel.perf_event_paranoid = 0
3. Salva le modifiche ed esci da nano.
Sintassi del comando perf Linux
Il perf
la sintassi del comando è:
perf <options> subcommand <options/arguments>
Lo strumento perf funziona come git. Funge da interfaccia per vari sottocomandi e diverse attività. L'esecuzione del comando senza opzioni o argomenti mostra l'elenco dei sottocomandi disponibili.
Linux perf sottocomandi
Di seguito è riportata una tabella che illustra perf
di uso comune sottocomandi:
Sottocomando | Descrizione |
---|---|
annotate | Legge perf.data e mostra il codice annotato. |
list | Elenca tutti gli eventi misurabili. |
stat | Raccoglie le statistiche sulle prestazioni. |
record | Registra i campioni in perf.data . |
report | Legge perf.data e visualizza il profilo. |
script | Legge perf.data e visualizza l'output della traccia. |
top | Strumento di profilazione. |
I sottocomandi hanno opzioni aggiuntive. Per visualizzare le opzioni per i singoli sottocomandi, eseguire:
perf <subcommand> -h

L'output visualizza una breve finestra di aiuto per il sottocomando specifico.
Esempi di comandi perf Linux
Per testare il perf
comando, stiamo usando la piccola istanza BMC s0.d1 di phoenixNAP che esegue Ubuntu 18.04.
Nota: Per altri casi d'uso della piccola istanza BMC, consulta alcune delle nostre guide:
- Configurazione di un firewall su un'istanza BMC s0.d1.small
- Come configurare un bilanciamento del carico su un server BMC s0.d1.small
- Configurazione di un ambiente sandbox su un'istanza BMC S.0
Quando si profila una CPU con il perf
comando, il flusso di lavoro tipico consiste nell'utilizzare:
1. perf list
per trovare gli eventi.
2. perf stat
per contare gli eventi.
3. perf record
per scrivere eventi in un file.
4. perf report
per sfogliare il file registrato.
5. perf script
per eseguire il dump degli eventi dopo l'elaborazione.
Le uscite differiscono in base al sistema e alle risorse disponibili localmente.
1. Elenca gli eventi disponibili
Elenca tutti gli eventi misurabili utilizzando perf con il list
sottocomando:
sudo perf list

L'output elenca tutti gli eventi supportati, indipendentemente dal tipo. Senza sudo
, il comando mostra un elenco più breve. Quando fai riferimento a eventi in altri sottocomandi, usa il -e
tag seguito dal nome dell'evento dalla prima colonna.
Aggiungere il parametro filter dopo il comando per limitare l'elenco in base al nome dell'evento (prima colonna) o al tipo di evento (seconda colonna). Ad esempio, visualizza solo gli eventi hardware con:
sudo perf list hardware
O in alternativa:
sudo perf list hw

L'output mostra il risultato filtrato in base al parametro o ai parametri forniti.
2. Visualizza il profilo del sistema in tempo reale della CPU
Per visualizzare il profilo della CPU in tempo reale, utilizzare il top
sottocomando:
sudo perf top

Il comando visualizza le funzioni campionate in tempo reale, in modo simile al comando top di Linux. L'output stampa le seguenti tre colonne in ordine da sinistra a destra:
1. Utilizzo della CPU legato a una funzione espressa in percentuale.
2. La libreria o il programma che sta utilizzando la funzione.
3. Il nome del simbolo e della funzione, dove [k]
è lo spazio del kernel e [.]
è lo spazio utente.
Per impostazione predefinita, perf top
controlla tutte le CPU online. Opzioni aggiuntive consentono:
- Monitoraggio di tutte le CPU (incluse quelle inattive) (
-a
). - Monitoraggio di CPU specifiche (
-C
). - Controllo della frequenza di campionamento (
-F
).
Per visualizzare opzioni aggiuntive durante la modalità di navigazione, premi h .

Per uscire dal profiler e tornare al terminale, premi q .
3. Visualizza le statistiche sulle prestazioni della CPU con perf
Per visualizzare le statistiche sulle prestazioni della CPU per tutti gli eventi hardware e software standard a livello di CPU, eseguire:
sudo perf stat -a sleep 5

L'output mostra un rapporto dettagliato per l'intero sistema raccolto in cinque secondi. Senza sleep 5
, il sistema misura fino alla chiusura con CTRL +C .
4. Visualizza le prestazioni della CPU per un comando
Per controllare le statistiche sulle prestazioni della CPU per un comando specifico, esegui:
sudo perf stat <command>
Ad esempio, controlla il ls
comando con:
sudo perf stat ls

Il tempo totale impiegato da un comando viene visualizzato come tempo trascorso alla fine dell'output.
5. Visualizza le prestazioni della CPU per un processo
Allega le statistiche sulle prestazioni della CPU a un processo in esecuzione specifico utilizzando il -p
tag e fornendo l'ID del processo (PID):
sudo perf -p <PID> sleep 5

L'output raccoglie e visualizza le statistiche sulle prestazioni per il processo specificato.
6. Conta le chiamate di sistema di eventi per tipo
Per contare le chiamate di sistema del kernel Linux per tipo, esegui:
sudo perf stat -e 'syscalls:sys_enter_*' -a sleep 5
Dopo cinque secondi, l'output visualizza tutte le chiamate a livello di sistema e il relativo conteggio.
7. Registra i cicli della CPU
I cicli della CPU sono un evento hardware. Per registrare i cicli della CPU, usa il record
sottocomando e fornisci il nome dell'evento con il -e
tag:
sudo perf record -e cycles sleep 10

La registrazione salva i dati in un perf.data file. L'output stampa la dimensione del file e quanti campioni di dati contiene.
8. Visualizza i risultati delle prestazioni
Per visualizzare i risultati delle prestazioni da perf.data file, esegui:
sudo perf report

Il comando aiuta a leggere i perf.data file, visualizzando tutti gli eventi e le statistiche raccolti. Per uscire dal visualizzatore, premi CTRL +C .
9. Modifica il formato di output di esempio
Per visualizzare l'output di esempio nel formato di output standard, eseguire:
sudo perf report --stdio

Ulteriori modifiche includono la visualizzazione del numero del campione per ogni evento (-n
) e visualizzare colonne specifiche (--sort <column name>
). Ad esempio:
sudo perf report -n --sort comm,symbol --stdio

L'output aggiunge una colonna per il numero del campione e le informazioni sui comandi e sui simboli.
10. Visualizza output di traccia
Usa il script
sottocomando per elencare tutti gli eventi da perf.dat un. Ad esempio:
sudo perf script

L'output stampa i perf.data dettagli in ordine di tempo. Usa il script
sottocomando come dati di post-elaborazione.
11. Visualizza intestazione traccia
Per visualizzare tutti gli eventi da perf.data con ulteriori informazioni sull'intestazione della traccia, esegui:
sudo perf script --header

L'output mostra le informazioni sull'intestazione del file, ad esempio quando è stata avviata la traccia, per quanto tempo è durata, informazioni sulla CPU e il comando che ha recuperato i dati. L'elenco degli eventi è dopo le informazioni sull'intestazione.
12. Scarica i dati grezzi
Per scaricare dati grezzi come esadecimali da perf.data file, usa il -D
opzione:
sudo perf script -D

Il risultato sono le informazioni grezze sulla traccia dell'evento in formato ASCII. L'opzione è utile per il debug degli eventi.
13. Annota i dati
Per annotare i dati e disassemblarli ulteriormente, utilizza il annotate
sottocomando:
sudo perf annotate --stdio -v

Il -v
l'opzione fornisce un output dettagliato. Il risultato mostra il codice sorgente e lo smontaggio degli eventi.
Conclusione
Dopo aver esaminato gli esempi in questa guida, conosci le basi dell'utilizzo di Linux perf
comando e alcuni dei principali sottocomandi. Utilizzare il comando man per visualizzare la documentazione completa dello strumento di analisi delle prestazioni e dei sottocomandi.