5 passos antes de avaliar o desempenho de sua aplicação

5 passos antes de avaliar o desempenho de sua aplicação

Com tantos processadores modernos e bibliotecas para otimizar o processamento de sua aplicação, ter uma etapa para análise de desempenho é essencial. Porém, essa não é uma tarefa tão simples quanto parece e pode trazer resultados inconsistentes caso algumas ações não sejam levadas em consideração.

Neste artigo, vou te dar 5 passos a serem tomados antes de você realizar a análise de desempenho de sua aplicação. Espero que te ajude!

Como avaliar o desempenho de sua aplicação

1. Coletar informações do seu sistema

Não importa se você está fazendo a análise de desempenho de uma aplicação ou o desenvolvimento de um site. É extremamente importante registrar o hardware e software que está sendo utilizado. Não apenas o nome das ferramentas, mas também as versões e instruções de instalação, ainda mais se você está lidando com desenvolvimento em um time.

É importante estar ciente das especificações e configurações de hardware que impactam seus resultados, por exemplo, o número de processadores, cores, threads, tamanho de memória, a interconexão de rede, a disponibilidade de tecnologias para aumentar a velocidade das CPUs (Turbo Boost/Turbo Core) e o sistema de arquivos utilizado. Todas essas informações geralmente podem ser obtidas no site da fabricante do seu processador.

Registros sobre o software utilizado são importantes para futuras replicações de seus experimentos e também para saber as versões utilizadas em caso de repetições futuras.

2. Sanity check

Após configurar o ambiente experimental, saber o software e hardware que irá utilizar e estar com sua aplicação prontinha para análise, as “melhores práticas de análise de desempenho” recomenda um Sanity check.

Este teste rápido é comumente usado para avaliar se sua aplicação está se comportando conforme o esperado após novas adições ou mudanças no desenvolvimento, mas também pode ser utilizado para análise de desempenho.

Ele consiste em realizar experimentos rápidos no ambiente de execução alvo para você vai validar se a saída da aplicação gerou resultados conforme o esperado. Caso contrário você não perde tempo fazendo experimentos inconsistentes.

3. Parar processos executando em background

Um erro muito comum que pode impactar o desempenho da sua aplicação é deixar outras aplicações executando em segundo plano. Muitas vezes não notamos que temos um programa que inicia automaticamente com o computador, como um servidor de Apache, Docker ou Django. Por isso, sempre verifique que não tem outras aplicações utilizando sua CPU e memória ao executar seu programa. No Linux você pode fazer isso com o comando:

$ htop

E encerrar o processo com:

$ kill -d PID_ID

No Windows você pode usar o gerenciador de tarefas para encerrar os processos.

4. Verificar Turbo Boost, Turbo Core e Hyperthreading

Turbo Boost (Intel) ou Turbo Core (AMD) é uma funcionalidade dos processadores que aumenta a frequência da CPU automaticamente conforme demanda. Isso significa que seu processador não opera normalmente na frequência reportada nas especificações. Porém, ele pode manter uma frequência padrão se você desativar esse recurso na BIOS permanentemente ou provisoriamente com o comando a seguir para processadores Intel no terminal do Linux:

$ echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo

Hyperthreading é um recurso introduzido pela Intel nos seus processadores para permitir que várias threads executem de forma concorrente em cada core do seu processador. Dessa forma você consegue realizar mais tarefas em paralelo. Porém, com esse recurso ativado por padrão, o desempenho de sua aplicação usando uma ou mais cores pode ser impactado. Da mesma forma que para Turbo Boost você também pode desativar esse recurso com um comando no Linux:

$ echo 0 > sys/devices/system/cpu/cpuVERSION/online

Fica a seu critério utilizar ou não esses recursos, mas é importante saber que eles existem e que podem impactar seu programa.

5. Várias execuções de seu programa

Diversos fatores podem impactar a execução de sua aplicação, especialmente se ela tem resultados não determinísticos. Até mesmo a temperatura onde seu servidor está e a posição de cada rack no seu cluster pode impactar no processamento. Por isso, realizar várias repetições com diferentes parâmetros e considerar resultados estatísticos sobre os dados coletados (média, mediana, desvio padrão, etc.) vão te trazer resultados mais próximos da realidade.

O ideal quando se fala de análise de desempenho é utilizar um design fatorial. Isto é, realizar vários experimentos variando dois ou mais fatores e combinando variações deles, além das repetições. O ideal é não fazer repetições com os mesmos parâmetros subsequentemente, pois os dados podem ficar na memória, por exemplo, e levar a um resultado enviesado.

Se você quer saber mais sobre metodologias para fazer a melhor combinação de experimentos para análise de desempenho eu recomendo o famoso livro na área: Jain, R. “The art of computer systems performance analysis: techniques for experimental design, measurement, simulation, and modeling.” (1991)

Extra

Uma forma prática e portável de criar ambientes prontos para a execução de seus experimentos, com todo software nas versões ideais e configurações prontinhas para uso e replicação é através de ambientes virtuais ou containers. Exemplos populares são:

  • Conda: um gerenciador de pacotes e ambientes virtuais de código aberto que executa em Windows, macOS e Linux para programas em Python.
  • Renv: ferramenta para você criar ambientes reprodutíveis, isolados e portáveis para projetos desenvolvidos em R.
  • Spack: gerenciador de pacotes para você instalar software em diferentes versões para um usuário específico no sistema para Linux, macOS e supercomputadores. Com ele, você pode usar ele para instalar todos seus programas e deixar essa “receita” salva para futuros experimentos. Ele também te permite criar imagens para containers de forma fácil com o Spack Environments.
  • Docker: uma das ferramentas mais populares para conteinerização de sua aplicação. Crie imagens prontas com todo software usado na sua aplicação para diferentes sistemas operacionais e portável para diferentes servidores, o que é super útil caso você queira explorar o desempenho de sua aplicação em diferentes processadores, por exemplo.

Pronto! Agora você está pronto para utilizar data science e gráficos para processar os dados de desempenho coletados e apresentar os resultados de desempenho de seus experimentos, sabendo que eles estão mais próximos de resultados reais. Tem outros passos que você considera antes de realizar análises de desempenho? Deixa nos comentários do post :)

🛑
As opiniões e comentários expressos neste artigo são de propriedade exclusiva de seu autor e não representam necessariamente o ponto de vista da Revelo. A Revelo Content Network acolhe todas as raças, etnias, nacionalidades, credos, gêneros, orientações, pontos de vista e ideologias, desde que promovam diversidade, equidade, inclusão e crescimento na carreira dos profissionais de tecnologia