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.