Como analisar dados de perfil de 'perf record --a' (coleção de todo o sistema)?

3

Estou usando perf do linux-2.6.36-gentoo-r4. O /proc/sys/kernel/perf_event_paranoid é definido como 0, então não deve haver problemas a partir dele.

Como o aplicativo de longa execução que estou criando às vezes falha por algum motivo indeterminado (nenhuma informação sobre a razão pela qual ele parou de funcionar pode ser encontrada por mim), recorri ao perfil de todo o sistema com eventos perf.

O aplicativo em questão faz cálculos numéricos paralelos, usando o MPI (Message Passing Interface) para comunicação. Antes de executar o aplicativo (com mpirun ) eu comecei a gravar os dados do perfil de todo o sistema em um dos nós em que ele é executado:

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

Depois que eu percebi que o aplicativo falhou, eu matei a tarefa perf .

Ele havia deixado

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

14 GB de dados. Infelizmente perf report não suporta a opção -a .

Como posso analisar os dados de criação de perfil de todo o sistema a partir de perf tool ?

adicionado em 2011.08.12

A simples execução de perf report não produz resultados úteis:

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

Essa é toda a saída de dados de perfil de 14 GB ...

    
por Jakub Narębski 11.08.2011 / 14:49

2 respostas

2

Se você estiver distribuindo os cálculos com MPI, usar uma ferramenta com reconhecimento de MPI fornecerá resultados mais sensatos: com um aplicativo distribuído, você pode ter problemas de desequilíbrio de carga, onde um processo MPI está ocioso aguardando dados virem de outros processos. Se acontecer de você estar elaborando exatamente esse processo de MPI, seu perfil de desempenho estará todo errado.

Portanto, o primeiro passo é geralmente descobrir o padrão de comunicação e balanceamento de carga do seu programa e identificar uma entrada de amostra que forneça a carga de trabalho desejada (por exemplo, intensivo de CPU na classificação 0). Por exemplo, mpiP é uma ferramenta de criação de perfil MPI que pode produzir um relatório muito completo sobre o padrão de comunicação, quanto tempo cada chamada MPI levou, etc.

Em seguida, você pode executar uma ferramenta de criação de perfil de código em uma ou mais classificações MPI selecionadas. De qualquer forma, usar perf em uma única classificação MPI provavelmente não é uma boa ideia, pois suas medições também conterão o desempenho do código da biblioteca MPI, que provavelmente não é o que você está procurando.

    
por 09.03.2012 / 17:52
0

perf report não precisa da opção -a para relatar os resultados de perf record -a . Você pode simplesmente digitar perf report .

Dito isso, analisar 14G de dados de perfil para rastrear um acidente parece estranho. Que tal anexar um depurador?

    
por 12.08.2011 / 07:12