Como executar Valgrind em paralelo com o nosso processo portanto, seu desempenho não diminui muito?

StackOverflow https://stackoverflow.com/questions/1483583

Pergunta

Eu preciso usar Valgrind para detectar eventuais violações de acesso de memória feitas em um aplicativo de servidor. O servidor cria muitos segmentos. Eu suspeito que há uma condição de corrida que faz com que o servidor deixe de funcionar a cada 1 hora ou assim. Usamos Valgrind para analisar seu uso de memória, mas a velocidade do processo do servidor diminuiu drasticamente. a velocidade do servidor diminuiu tanto que quase não era utilizável e sem condições de corrida, onde provável.

Existe uma maneira de executar Valgrind em paralelo com a nossa aplicação para que não perca muito o desempenho?

Foi útil?

Solução

É importante notar que Valgrind, apoiando programas multi-threaded, não vai realmente executar segmentos do programa em paralelo, se você tem núcleos multiiple disponíveis. Ele também intercala tópicos em um grão mais fino do que o programador OS nativo. Estes 2 factos combinados pode fazê-lo assim um programa com condições de corrida ou outras anomalias concorrentes irão se comportar de forma diferente.

Você pode querer tentar Helgrind , uma ferramenta destinada principalmente na detecção correta disciplina bloqueio e DRD , uma ferramenta destinada principalmente na detecção de corridas de dados.

Outras dicas

Você não pode fazer isso. Valgrind não realmente executar seu código nativo - em vez disso, executa-lo dentro de um simulador. É por isso que é tão lento. Assim, não há nenhuma maneira de torná-lo correr mais rápido, e ainda obter o benefício do Valgrind.

Sua melhor aposta é para definir o ulimit para que o programa gera um arquivo core quando ele trava. Então você pode tentar descobrir qual era o problema através da análise do núcleo.

Este não é responder diretamente sua pergunta, mas se você suspeitar de um erro de sincronização, você já tentou usar a ferramenta Valgrind Helgrind ?

Valgrind funciona ligando para suas chamadas malloc, assim você pode esperar que seu programa seja executado mais lento sob valgrind. Então, eu diria que você não pode executar o seu programa mais rápido sob valgrind e obter o benefício de analisar erros de memória.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top