GNU/Linux >> Linux Esercitazione >  >> Linux

Linux:come analizzare i dati del profilo da `perf Record –a` (raccolta a livello di sistema)?

Sto usando perf da linux-2.6.36-gentoo-r4. Il /proc/sys/kernel/perf_event_paranoid è impostato su 0, quindi non dovrebbero esserci problemi da lì.

Poiché l'applicazione di lunga durata che sto profilando a volte si arresta in modo anomalo per qualche motivo indeterminato (non ho potuto trovare alcuna informazione sul motivo per cui smette di funzionare), sono passato alla profilazione a livello di sistema con eventi perf.

L'applicazione in questione esegue calcoli numerici paralleli, utilizzando MPI (Message Passing Interface) per la comunicazione. Prima di eseguire l'applicazione (con mpirun ) Ho iniziato a registrare i dati del profilo a livello di sistema su uno di nodi con cui viene eseguito:

$ perf record -o perf.all.cycles,graph.data -g -e cycles -a &

Dopo aver realizzato che l'applicazione si è arrestata in modo anomalo, ho terminato il perf compito.

Se n'era andato

$ du -sh perf.all.cycles,graph.data 
14G     perf.all.cycles,graph.data

14 GB di dati. Sfortunatamente perf report non supporta il -a interruttore.

Come posso analizzare i dati di profilazione a livello di sistema da perf strumento ?

Semplicemente eseguendo perf report non produce output utile:

$ perf report -i perf.all.cycles,graph.data
#
# (For a higher level overview, try: perf report --sort comm,dso)
#

Questo è l'intero output dei dati del profilo da 14 GB...

Risposta accettata:

Se stai distribuendo i calcoli con MPI, l'utilizzo di uno strumento compatibile con MPI ti darebbe risultati più sensati:con un'applicazione distribuita, potresti avere problemi di squilibrio del carico, in cui un processo MPI è inattivo in attesa che i dati provengano da altri processi . Se stai profilando esattamente quel processo MPI, il tuo profilo di prestazioni sarà del tutto sbagliato.

Quindi, il primo passo è di solito scoprire la comunicazione e il modello di bilanciamento del carico del tuo programma e identificare un input di esempio che ti dia il carico di lavoro che desideri (ad es. CPU ad alta intensità di rango 0). Ad esempio, mpiP è un MPI strumento di profilazione in grado di produrre un report molto completo sul modello di comunicazione, il tempo impiegato da ciascuna chiamata MPI, ecc.

Quindi puoi eseguire uno strumento di profilatura del codice su uno o più ranghi MPI selezionati. Comunque, usando perf su un singolo rank MPI probabilmente non è una buona idea perché le sue misurazioni conterranno anche le prestazioni del codice della libreria MPI, che probabilmente non è quello che stai cercando.


Linux
  1. Linux:come eseguire un bootloader da Linux?

  2. Come utilizzare journalctl per analizzare i registri in Linux

  3. Come migrare da CentOS 8 a Rocky Linux 8

  4. Come ottenere netmask da bash?

  5. Come generare dati netflow in Linux

Come accedere alle partizioni Linux da Windows 10

Come visualizzare i dati da un file di testo in Linux

Come rimuovere un comando dalla cronologia in Linux

Come installare il software dal sorgente in Linux

Come rimuovere (^M) caratteri da un file in Linux

Come costruire il kernel Linux da zero