Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial Internet of Things >> Tecnologia da Internet das Coisas

Criação de perfil de aplicativos distribuídos com Perf


Eu, como muitos desenvolvedores, estive em situações em que precisei pegar um aplicativo existente e torná-lo mais rápido - basicamente removendo código lento e substituindo-o por código rápido. Agora sei que devo seguir uma regra simples quando se trata de otimizar o código:

Qualquer código que eu acho que está deixando o aplicativo lento, é onde devo olhar por último.

A criação de perfil é uma negociação que o faz aceitar as limitações de sua intuição muito rapidamente. Percebi logo no início que precisava de medições frias e difíceis para me dizer quais partes do meu código precisavam ser otimizadas. Felizmente, há uma infinidade de ferramentas de criação de perfil disponíveis que podem medir quase tudo relacionado a como seu código está sendo executado.

As ferramentas, no entanto, não facilitam necessariamente a criação de perfis. A interpretação das medidas pode ser complicada e as variáveis ​​precisam ser rigidamente controladas durante a realização de experimentos. Em particular, os aplicativos multi-threaded e distribuídos são difíceis de definir.

Qualquer pessoa que já teve que depurar uma condição de corrida estará familiarizada com o quão sensível ao tempo é o comportamento de aplicativos multithread. A criação de perfil de aplicativos multithread tem desafios semelhantes, pois o tempo se torna um fator significativo na medição.

Os criadores de perfis, como o callgrind, tornam seu programa mais lento e, portanto, afetam o tempo. Um exemplo que mostra uma limitação de tais profilers é a contenção mutex. Seu aplicativo pode ser executado lentamente porque um mutex está sendo muito usado, fazendo com que seu código gaste muito tempo em funções de bloqueio. Uma ferramenta como o callgrind não revelaria isso, pois conta com instruções , não o tempo.

Há outra classe de criadores de perfil que fazem "perfis estatísticos". Esses profilers permitem que você execute seu programa como faria normalmente, enquanto tira instantâneos periódicos de onde o aplicativo está gastando seu tempo. Esses perfis precisam ser executados por algum tempo para produzir resultados precisos, mas podem fazer isso com impacto mínimo no tempo. Isso os torna ideais para criar perfis de aplicativos multithread e / ou distribuídos!

Eu queria compartilhar um fluxo de trabalho de criação de perfil usando a ferramenta de desempenho do Linux, que achei especialmente útil, pois me permite identificar rapidamente "pontos de acesso" de desempenho. Usarei o exemplo c / hello_dynamic do RTI Connext 5.3.0 como uma meta para medir o desempenho.

Primeiro, certifique-se de que perf está instalado em sua máquina Linux. No Ubuntu, tive que executar este comando para instalar o perf na minha máquina:

 sudo apt-get install linux-tools-common linux-tools-3.13.0-107-generic 

Em seguida, você precisa baixar um projeto GitHub que pode converter a saída de perf para o que é chamado de “FlameGraph,” que é uma representação visual dos dados de perfil coletados. Execute este comando em um local de acesso conveniente (como seu diretório inicial):
 clone git https://github.com/brendangregg/FlameGraph 

Agora vá para o exemplo hello_dynamic na pasta rti_workspace / examples / c. Crie o código com esses comandos (certifique-se de que NDDSHOME esteja definido para a instalação do RTI Connext):
 export DEBUG =1 
make -f makefile_Hello_x64Linux3gcc4.8.2

A plataforma no nome do makefile pode ser diferente da sua plataforma. Observe como definimos a variável de ambiente DEBUG. Fazemos isso para que o binário tenha símbolos de depuração, o que nos permitirá ver os nomes das funções nas pilhas de chamadas que o desempenho gera.

Agora podemos executar perf em nosso código. Execute os seguintes comandos:
 objs / x64Linux3gcc4.8.2 / Hello sub &
sudo perf record -g objs / x64Linux3gcc4.8.2 / Hello pub

Depois de algum tempo, pressione Control-C para sair do editor. Perf terá produzido um arquivo chamado “perf.out”. Agora precisamos traduzir este arquivo em algo que a ferramenta FlameGraph entenda, usando um script do repositório FlameGraph:
 perf script -f | ~ / FlameGraph / stackcollapse-perf.pl> out.perf-dobrado 

A partir daqui, podemos gerar a imagem FlameGraph:
 ~ / FlameGraph / flamegraph.pl out.perf-dobrado> perf.svg 

Quando você abre o arquivo perf.svg em um navegador da web, ele deve ter a seguinte aparência:


O eixo horizontal representa o tempo gasto em uma função específica, enquanto as barras empilhadas representam a pilha de chamadas do seu aplicativo. Você pode clicar em cada barra para ampliar essa pilha específica.

Tente executar novamente o editor, mas sem um assinante. Você notará que a parte direita do flamégrafo desaparecerá, pois o DDS não envia nenhum dado quando não há assinantes!

A ferramenta de desempenho pode fazer muito mais do que o que este blog descreve. Se você souber de outras configurações ou ferramentas que tornaram mais fácil a sua criação de perfis, avise-nos!

Perfil feliz!

Tecnologia da Internet das Coisas

  1. O molibdênio se combinará com outros elementos?
  2. Criação de Blockchain Híbrido / Aplicativos em Nuvem com Ethereum e Google
  3. Criação de aplicativos móveis sem servidor com React Native e AWS
  4. Circuito sensor de proximidade simples e trabalho com aplicativos
  5. Tipos de sensores analógicos e digitais com aplicativos
  6. Microchip:dimensione aplicações espaciais com MCUs Core COTS-to-radiação-tolerantes
  7. Elimine gargalos de TI com simplicidade:Plataformas de baixo código mantêm a chave
  8. Ovo aumenta seu jogo de energia distribuída com compra de rede inteligente VCharge
  9. Roteador de madeira CNC - com aplicativos incríveis
  10. 5 Aplicações do mundo real de IA na medicina (com exemplos)