Análise de Desempenho & Benchmarks

Introdução

O desempenho de um sistema computacional pode ser medido através de uma série de parâmetros quantitativos e, eventualmente qualitativos, em um processo ao qual se dá o nome de análise de desempenho.

Através da análise, ou avaliação, de desempenho é possível comparar sistemas computacionais entre si, avaliar o custo-benefício de aquisição ou expansão de um sistema, avaliar, ou prever, o impacto de alterações na configuração do sistema para seu desempenho final. Também é possível aplicar as técnicas de análise em máquinas virtuais, comparando o desempenho do sistema virtualizado com o desempenho do sistema hospedeiro, ou de um sistema físico correspondente, bem como avaliar o ganho de desempenho de um cluster (aglomerado) computacional, em relação a um sistema componente do cluster individualmente.

Desta forma a análise de desempenho se torna importante para o planejamento estratégico e requer investimento de capital intelectual e, muitas vezes, também financeiro.

O mapa mental a seguir sintetiza alguns dos principais conceitos sobre a avaliação de desempenho:

Os benchmarks são uma das principais ferramentas para avaliação de desempenho ao potencializar a comparação entre diferentes sistemas utilizando uma carga de trabalho padronizada que pode corresponder a uma utilização real, ou a um "stress" do sistema, realizando uma análise quantitativa.

As métricas a serem usadas para avaliar o desempenho de um sistema são muito importantes. Quais métricas você analisaria ao avaliar a compra de um carro novo, um aparelho de ar condicionado, ou uma geladeira? Aqui no Brasil os selos do Inmetro e, principalmente, do Procel (Programa Nacional de Conservação de Energia Elétrica - www.procelinfo.com.br e www2.inmetro.gov.br/pbe/) nos ajudam a entender a utilidade da avaliação de desempenho para comparação de sistemas e boas métricas. Para o desempenho de sistemas computacionais precisamos escolher as métricas adequadas. Talvez algumas delas também se enquadrem no selo da Procel, mas em geral a listagem incluirá muitas outras.

Existem diversos benchmarks disponíveis, muitos cuidadosamente elaborados para aplicações específicas, outros mais simples e talvez até pouco úteis. Existem benchmarks "free and open source" e outros caríssimos.

Há sites com resultados de benchmarks que podem ser úteis para comparação de desempenho de componente (microprocessadores, placas de vídeo, HDs, etc.) como o www.cpubenchmark.net e, especialmente, a listagem dos maiores supercomputadores em atividade no planeta, referência na área de HPC (High Performance Computing), o top500.org.

Uma "fragilidade" dos benchmarks é que eles podem não representar plenamente a aplicação a ser usada, ou a forma como o sistema será usado. Ao tomarmos as partes medidas pelo todo o resultado da avaliação pode não corresponder à realidade. É preciso ter uma boa ideia do profile (perfil) da aplicação ou do uso do sistema para escolher o benchmark ou os testes adequados. Outro ponto fraco é que sistemas e aplicações podem ser otimizadas para benchmarks "padrão" de forma a mascarar seu desempenho. Um bom exemplo é destacado na nota explicativa da "aposentadoria" do benchmark de JavaScript Optane (https://v8.dev/blog/retiring-octane). Os autores relatam que estavam sendo feitas otimizações para o código do benchmark e não para todas as aplicações, o que os levou a descontinuarem o projeto pois já haviam levado um grande benefício à comunidade ao incentivar a melhoria das "JavaScript engines", mas mantê-lo no ar começava a ser prejudicial. Resumindo o ponto, a análise quantitativa pode não corresponder à análise qualitativa!

É possível realizarmos alguns testes com benchmarks facilmente acessíveis. Seguem alguns exemplos para avaliação de desempenho de sistemas e também de redes. Ao final desta página há referências, bibliografia e links úteis.


Medindo o desempenho de sistemas

Dois programas muito populares para Windows que incorporam pequenas ferramentas de benchmark de CPU são a feramenta de compactação de arquivos open source 7zip (www.7-zip.org) e a ferramenta de identificação de hardware freeware CPU-Z (www.cpuid.com). No primeiro caso a métrica utilizada é MIPS, ou Milhões de Instruções Por Segundo, tanto para a compressão como para a descompressão, o que, aliado aos parâmetros que podem ser variados e as outras informações fornecidas é bastante compreensível e comparável, embora limitada a esse tipo de processamento. Já no caso do CPU-Z o resultado é um valor numérico de difícil interpretação. Por mais que seja possível comparar o resultado com uma referência no programa, ou outro sistema, não há muita informação sobre o que de fato esse número significa e seu uso deve ser feito com certa parcimônia.

Para avaliar o desempenho de discos no Windows a Microsoft disponibiliza a ferramenta DISKSPD em seu GitHub: https://github.com/microsoft/diskspd. Há também o Crystal Disk Mark, disponível em https://crystalmark.info/en/software/crystaldiskmark/.

O sysbench (System Benchmark) é muito popular no Linux e outros Unix, e pode ser usado até no Windows com o WSL. Há opções de teste de I/O (E/S), CPU, memória e outros. Alguns exemplos:

  • sysbench cpu run

    • Executa o teste de CPU que envolve cálculo de números primos.

    • Para ajustar o número de threads use: sysbench --threads=4 cpu run

  • sysbench memory run

    • Executa o teste de memória.

    • Também é possível ajustar a quantidade de threads utilizada da mesma forma que no item anterior

    • Consulte a ajuda para verificar testes de I/O e banco de dados.

O hdparm serve para obter parâmetros e configurar discos nos sistemas Linux e também possui opções para a realização de testes de performance. Use:

  • hdparm -t /dev/sda

      • para testar o desempenho de leitura do disco.

    • hdparm -T /dev/sda

      • para testar o desempenho de leitura do cache de disco.

O comando dd também permite realizar testes de disco. Na linha de comando o 7zip (7z b) permite testar o desempenho da CPU de forma similar à interface gráfica. Outros comandos Linux úteis para benchmark, ou simplesmente coleta de informações e estatísticas do sistema são procinfo, vmstat, iostat, mpstat e pidstat. O comando time permite avaliar o tempo de execução de um outro processo e vários outros parâmetros. Execute time nomedoprograma. Na maior parte das distribuições haverá uma saída mais completa executando /usr/bin/time --verbose nomedoprograma. O kernel do Linux possui uma ferramenta de profiling e benchmark no comando perf, que pode ser usado por desenvolvedores para o profiling de seus códigos.

Veja mais opções abaixo, na seção de links.


Medindo o desempenho de rede

Para avaliar o desempenho de redes o iPerf é uma ferramenta muito útil nos sistemas Unix e Linux. Se sua intenção é avaliar o desempenho da conexão com a Internet experimente a ferramenta do SIMET (https://simet.nic.br/projetos/) mantida pelo NIC.br.

iPerf

  • iPerf3 - https://iperf.fr/

  • Ferramenta de testes de desempenho de redes para os protocolos TCP, UDP e SCTP disponível para quase todos os sistemas operacionais.

  • Tendo 2 sistemas disponíveis com o iPerf servidor um teste bem simples pode ser feito executando no terminal:

    • No sistema que será o servidor do teste:

      • iperf3 -s

    • No sistema que será o cliente:

      • iperf3 -c 192.0.2.1

        • Substitua pelo IP do servidor.

    • O resultado será algo como:

$ iperf3 -c 10.0.2.14

Connecting to host 10.0.2.14, port 5201

[ 5] local 10.0.2.15 port 59010 connected to 10.0.2.14 port 5201

[ ID] Interval Transfer Bitrate Retr Cwnd

[ 5] 0.00-1.00 sec 148 MBytes 1.24 Gbits/sec 327 259 KBytes

[ 5] 1.00-2.00 sec 162 MBytes 1.36 Gbits/sec 502 238 KBytes

[ 5] 2.00-3.00 sec 148 MBytes 1.24 Gbits/sec 254 239 KBytes

[ 5] 3.00-4.00 sec 157 MBytes 1.32 Gbits/sec 344 174 KBytes

[ 5] 4.00-5.00 sec 230 MBytes 1.93 Gbits/sec 1755 223 KBytes

[ 5] 5.00-6.00 sec 245 MBytes 2.06 Gbits/sec 1633 180 KBytes

[ 5] 6.00-7.00 sec 171 MBytes 1.43 Gbits/sec 661 199 KBytes

[ 5] 7.00-8.00 sec 166 MBytes 1.39 Gbits/sec 490 191 KBytes

[ 5] 8.00-9.00 sec 161 MBytes 1.35 Gbits/sec 293 185 KBytes

[ 5] 9.00-10.00 sec 157 MBytes 1.32 Gbits/sec 165 181 KBytes

- - - - - - - - - - - - - - - - - - - - - - - - -

[ ID] Interval Transfer Bitrate Retr

[ 5] 0.00-10.00 sec 1.70 GBytes 1.46 Gbits/sec 6424 sender

[ 5] 0.00-10.00 sec 1.70 GBytes 1.46 Gbits/sec receiver

iperf Done.

    • Para selecionar UDP, ao invés do TCP padrão, use a flag -u. Veja as demais opções na ajuda do iperf3, é possível selecionar tempo de teste, carga, parâmetros do TCP, formatação de exibição dos resultados, etc.

    • Para testar o desempenho de servidores web o Siege e o Apache Benchmark podem ser muito úteis.


Um pouco de teoria e prática sobre a aceleração de sistemas

A Lei de Ahmdal nos permite avaliar como a aceleração (ou melhoria) de uma parte específica de um sistema afeta o desempenho global do sistema e também abre caminho para discutir o equilíbrio de um sistema em termos de desempenho. Ela pode ser usada para avaliar uma melhoria dentro de um sistema, ou através de paralelismo em sistemas distribuídos como clusters e grids. Essa melhoria pode ser um simples upgrade, ou até uma nova tecnologia. A fórmula da Lei de Ahmdal é a seguinte:

Um exemplo de aplicação prática da Lei de Ahmdal: Qual é o impacto no desempenho de um sistema na troca de um HDD por um SSD?

Há algum tempo fiz o upgrade de um notebook trocando o HDD, que virou HD externo com um case USB 3.0, por um SSD. Antes e depois da troca usei alguns dos benchmarks de disco mencionados anteriormente. Calculando a média de algumas rodadas de benchmark o ganho de desempenho de disco médio foi de 7,67 vezes. Mas este é o ganho de desempenho obtido no disco!

Na minha avaliação qualitativa o desempenho realmente fez parecer um novo notebook. Usuário completamente satisfeito e isso importa muito. Mas, e quantitativamente!? Mas e se eu precisasse avaliar isso antes de fazer o upgrade para ter certeza que o investimento valeria a pena!? O custo realmente compensa o benefício? E se fosse uma situação menos óbvia do que a troca de um HDD por um SSD? Ou um sistema de maior porte ainda sendo projetado onde está sendo avaliada justamente as diferentes possibilidades de construção?

A Lei de Ahmdal acaba nos salvando dessas perguntas. Eu poderia obter o ganho de desempenho de disco através dos datasheets, antes de adquirir um dispositivo novo, por exemplo. E a aceleração geral dependerá do quanto o disco é usado no sistema. Geralmente em servidores isso é mais facilmente mensurável. Em sistemas desktop de múltiplos usos isso é literalmente uma incógnita. Aplicando então a Lei de Ahmdal tendo a aceleração usada como 7,67 e variando a parcela de aceleração utilizada de 0 a 90% obtém-se o gráfico abaixo.

Note que se o uso do SSD chegar perto de 40% do uso do sistema, a aceleração geral já estará na casa de 50%. A aceleração geral já corresponderá ao dobro do sistema original se o uso do SSD se aproximar de 60% de uso do sistema. Ou seja, o impacto é realmente bastante relevante.

Seria possível levar esse exercício adiante comparando o "custo x benefício" de se fazer um upgrade de processador, ou mesmo avaliar se uma troca de peças ainda não compensa em relação a um computador completamente novo. Note, porém, que essas últimas perguntas já envolvem mais do que a Lei de Ahmdal, incluindo custos, ou requisitos mínimos para a realização de determinadas tarefas computacionais, por exemplo. Outra situação seria um upgrade da quantidade de memória principal (DRAM) que não traria uma aceleração direta, mas alteraria o balanço de uso de CPU, memória principal e memória secundária, diminuindo o uso desta última, geralmente mais lenta, e induzindo o aumento de desempenho a partir desse rebalanceamento.


Referências, bibliografia e links úteis

Orientei um projeto de Iniciação Científica entre 2015 e 2016 sobre Análise de desempenho em máquinas virtuais. No trabalho foi avaliado e comparado o desempenho dos sistemas computacionais host e guest (virtualizado). O trabalho foi realizado, muito bem, diga-se de passagem, pelos hoje cientistas da computação Eder de Oliveira, Thais de Farias, Wilber Costa e Weine de Oliveira. Os resultados do trabalho foram apresentados na 7ª Escola Regional de Alto Desempenho de São Paulo (ERAD-SP), promovida pela SBC, com o título de "Análise de Desempenho de Máquinas Virtuais" e no 1º Seminário em Tecnologia da Informação Inteligente (SeTII), promovido pelo Programa de Pós-graduação em Informática e Gestão do Conhecimento (PPGI) da UNINOVE, com o título de "Análise de Desempenho de Máquinas Virtuais Executadas Simultaneamente em um Mesmo Sistema Hospedeiro", onde foi avaliado o desempenho com mais de uma máquina virtual em execução simultânea. O artigo do ERAD pode ser lido neste site em Publicações disponíveis, enquanto o do SeTII pode ser lido em http://www.setii.net/2016/anais-setii-2016-v01.pdf.

Nas bibliografias de Arquitetura de Computadores e Sistemas Operacionais há livros excelentes que abordam o tema de análise de Desempenho:

  • Arquitetura e Organização de Computadores - 10a edição - William Stallings - Editora Pearson Education - 2018.

  • Arquitetura de Computadores - 5ª edição - José Delgado e Carlos Ribeiro - LTC Editora - 2017.

  • Arquitetura de Computadores - Uma Abordagem Quantitativa - 5a edição - John L. Hennessy e David A. Patterson - Elsevier - 2013.

  • Organização e Projeto de Computadores – A Interface Hardware/Software - 4ª edição - David A. Patterson e John L. Hennessy - Elsevier - 2013.

  • Arquitetura de Microprocessadores - Do Simples Pipeline ao Multiprocessador em Chip - Jean-Loup Baer - Editora Gen-LTC - 2013.

  • Avaliação de Desempenho de Sistemas Computacionais - Thienne Johnson e Mauro Margalho - LTC - 2011.

  • Arquitetura de Computadores - De Microprocessadores a Supercomputadores - Behrooz Parhami - Editora McGraW-Hill - 2007

  • Sistemas Operacionais - 3ª edição - H.M Deitel, P.J. Deitel, D.R. Choffnes - Pearson Education - 2005.

  • Arquitetura de Computadores - Coleção Schaum - Nicholas Carter - Editora Bookman - 2003.

O site do Top500 traz um ótimo material sobre benchmarks em https://www.top500.org/resources/frequently-asked-questions/.

Nessa bibliografia indicada você também encontrará outros aspectos não abordados aqui nesta pequena introdução.

Mais links úteis de benchmarks:

Sobre o perf, ferramenta de profiling e benchmark do Linux, consulte https://perf.wiki.kernel.org, www.brendangregg.com/perf.html e www.pixelbeat.org/programming/profiling/.

Finalmente, o site especializado Opensourcetesting.org e o artigo da Wikipedia traz uma boa relação de benchmarks também.


Retornar para Arquitetura de Computadores, Redes - Telecom - Datacom - Segurança, Sistemas Operacionais ou Computação em Nuvem - IoT - Ambientes inteligentes.