Desempenho

Tutorial do OProfile

Tutorial do OProfile

OProfile é um profiler de desempenho para Linux. Neste artigo, vamos explorar o que ele faz, como instalá-lo e configurá-lo e como colocar os dados que ele reúne em uso.

Você pode se perguntar por que você precisaria de uma ferramenta como esta, já que existem muitas ferramentas de análise de bom desempenho disponíveis por padrão na maioria das distribuições Linux. Cada instalação inclui ferramentas como top e vmstat, e utilitários de rastreamento como strace são normalmente apenas um apt-get away. Onde o OProfile se encaixa?

As ferramentas mencionadas anteriormente são excelentes para obter um instantâneo de um sistema Linux em tempo real. Ferramentas como top ou htop mostram todos os processos em execução, seu consumo atual de memória e uso do processador. Mas saber quais processos e chamadas de sistema estão consumindo mais recursos torna-se problemático.

É aí que entra o OProfile. Este conjunto de utilitários não apenas executa sua análise em um nível mais profundo, mas também salva dados e permite que você produza relatórios de desempenho que oferecem uma riqueza de informações que podem ajudá-lo a depurar até mesmo o problema de desempenho mais elusivo.

OProfile não é apenas para desenvolvedores. Em um ambiente de desktop, o OProfile pode ajudá-lo a rastrear tarefas em segundo plano com uso intensivo de CPU ou chamadas de I / O que estão deixando você lento e não são imediatamente evidentes. Em um sistema ocupado com mudanças nas prioridades do processo, esses dados podem ser difíceis de coletar, quanto mais interpretar. A natureza de vários processos de um ambiente de servidor torna essa tarefa ainda mais difícil com ferramentas tradicionais.

Dito isso, os desenvolvedores sem dúvida tirarão o máximo proveito do OProfile. As informações que apresentarei cobrirão os fundamentos de ambos os casos de uso para que você possa se aprofundar nas métricas de desempenho de qualquer programa Linux.

Instalação

Há uma observação muito importante que deve ser feita antes de mergulhar profundamente no OProfile - você pode não conseguir instalá-lo em um ambiente virtualizado. Se você estiver executando o Linux dentro de um VirtualBox, VMWare ou ambiente VM semelhante, o OProfile pode não ser capaz de acessar os contadores de desempenho necessários para coletar dados. Além disso, mesmo se você puder usá-lo em um ambiente virtual, o tempo preciso pode ser um pouco distorcido com base na carga do sistema host, portanto, tenha isso em mente se você não estiver executando em hardware nativo.

Várias distribuições Linux têm OProfile em seus sistemas de gerenciamento de pacotes, tornando a instalação fácil:

Um Exemplo Simples

Assim que o programa estiver instalado, vamos começar a trabalhar com um exemplo trivial, mas útil. O programa “ls” é um comando que você provavelmente usa o tempo todo. Ele simplesmente exibe uma lista de arquivos e pastas no diretório atual. Vamos rastrear sua saída:

sudo operf ls

Você verá algo semelhante à captura de tela acima. Assim que o criador de perfil for concluído, ele anunciará “Criação de perfil concluída.”Ele salvou seus dados em uma pasta chamada oprofile_data que pode ser usada para gerar um relatório.

Executar o comando opreport (sem sudo neste caso) produz um relatório semelhante a este:

Neste exemplo, o relatório padrão mostra o número de amostras quando a CPU não estava em um estado HALT (em outras palavras, estava fazendo algo ativamente). Kallsyms fornece pesquisa de símbolo usada pelo criador de perfil, e o ld.então e libc.então fazem parte do pacote glibc, uma biblioteca comum ligada a quase todos os executáveis ​​do Linux que fornece funcionalidades básicas que os desenvolvedores podem usar para evitar reinventar a roda e fornecer um nível genérico de compatibilidade entre vários sistemas. Você pode ver que o programa real ls teve muito menos tempo não HALT - a maior parte do trabalho pesado foi feito pelas bibliotecas padrão.

Assim que terminarmos com o relatório, é uma boa ideia remover a pasta de dados ou salvá-la para análise futura. Neste exemplo, vamos apenas removê-lo, pois estamos executando exercícios de amostra. Uma vez que executamos o comando com sudo, devemos remover a pasta com sudo. Tome cuidado!

sudo rm -Rf oprofile_data

Um exemplo mais complexo

Neste próximo exemplo, executaremos um programa que realmente faz algo mais complexo do que apenas listar arquivos na pasta atual. Vamos baixar WordPress com wget.

sudo operf wget http: // wordpress.org / mais recente.alcatrão.gz

Após este exemplo, podemos gerar um relatório com o comando “opreport”:

Você verá muito mais atividades depois desta. O comando wget teve que trabalhar muito nos bastidores para obter a última cópia do WordPress. Embora não seja necessário examinar cada item, os pontos de interesse interessantes são:

Este tipo de dados pode fornecer uma grande variedade de informações para um desenvolvedor. Mas como isso é importante para um administrador de sistema de um servidor ou um usuário avançado em um desktop? Ao saber quais partes de um programa estão consumindo mais tempo da CPU, podemos descobrir o que precisa de otimização ou onde está ocorrendo a desaceleração, o que nos permite tomar melhores decisões sobre como otimizar nosso sistema.

Neste exemplo, a maior parte do tempo de CPU foi gasto pelas rotinas cripto / SSL. Isso é compreensível porque a criptografia é uma tarefa demorada. Tinha o wordpress.O site org não nos redirecionou para https: // esta biblioteca não teria sido usada, economizando tempo de CPU. A camada de rede ainda teria sido usada, mas usar uma conexão com fio em vez de uma conexão sem fio provavelmente teria sido menos desgastante. Desativar o indicador de progresso no programa wget (por meio da opção -nv) teria economizado tempo de CPU ao exibir o progresso do download.

Explorando os símbolos

Mesmo que o relatório padrão forneça informações valiosas e úteis, podemos cavar mais. Executando este:

opreport --demangle = smart --symbols

Podemos descobrir exatamente quanto tempo de CPU as funções nas bibliotecas consumiram:

Neste exemplo, usei o comando wget acima, mas usei uma URL http: // (uma que não redireciona para https: //) e você pode ver a ausência de bibliotecas OpenSSL no rastreamento. No entanto, em vez de apenas o nome da biblioteca, agora temos uma lista completa das funções envolvidas. Como você pode ver, a camada de rede consumiu a maior parte do tempo não HALT da CPU.

Levando para o próximo nível

Nos exemplos anteriores, usamos o OProfile para dar uma olhada em um programa por vez. Você pode examinar todo o sistema de uma vez usando a opção -system-wide:

sudo operf - todo o sistema

Usando esta técnica, o OProfile irá reunir estatísticas da mesma maneira e parar quando você pressionar CTRL + C. Depois, você pode executar o comando opreport. Uma vez que o criador de perfil provavelmente irá gerar muito mais dados (especialmente em um desktop ou servidor ocupado).

opreport & gt; relatório.TXT

O relatório agora pode ser visualizado em um arquivo chamado relatório.TXT

Sobrecarga baixa

É importante observar que embora o OProfile não deva interferir na operação de seus programas, ele criará um pouco de sobrecarga e, portanto, tornará a execução mais lenta. Em nossos exemplos simples acima, isso não criou um problema, mas em um programa com longa execução e chamadas de função extensas, você provavelmente notará uma diferença. Por causa disso, eu não recomendaria usar este programa em um ambiente de servidor de produção, a menos que enfrentasse um problema crítico de desempenho que deve ser resolvido com o uso ao vivo. Mesmo assim, eu usaria apenas o tempo suficiente para encontrar o problema.

Conclusão

OProfile é uma ferramenta poderosa de perfil de desempenho. Ele atinge o nível mais baixo disponível no Linux para obter contadores de desempenho e métricas que fornecem informações valiosas sobre seus programas.

Já se foram os dias de adivinhação na depuração de desempenho - agora você tem o poder de saber precisamente o que seu sistema está fazendo e como melhorá-lo. Ao estudar os relatórios gerados pelo OProfile, você pode tomar decisões informadas e baseadas em dados sobre a otimização de seu sistema.

Como instalar e jogar Doom no Linux
Introdução ao Doom A série Doom teve origem nos anos 90 após o lançamento do Doom original. Foi um sucesso instantâneo e, a partir desse momento, a sé...
Vulkan para usuários de Linux
A cada nova geração de placas gráficas, vemos os desenvolvedores de jogos ultrapassarem os limites da fidelidade gráfica e se aproximarem mais do foto...
OpenTTD vs Simutrans
Criar sua própria simulação de transporte pode ser divertido, relaxante e extremamente atraente. É por isso que você precisa ter certeza de experiment...