MEDIDA E ANÁLISE DE DESEMPENHO AULA 14 Arquitetura de Computadores Gil Eduardo de Andrade O conteúdo deste documento é baseado no livro Princípios Básicos de Arquitetura e Organização de Computadores Linda Null e Julia Labur Se você não pode medir, você não pode administrar - Peter Drucker Números nem sempre são fatos - Ditado Americano INTRODUÇÃO A escolha de ferramentas quantitativas para media de desempenho não é uma tarefa trivial, vista a dificuldade em ter-se certeza que as ferramentas escolhidas atendem aos objetivos da avaliação? Além disso, fornecedores de sistemas são fortemente motivados a distorcer números para fazer com que sua marca pareça melhor que a de seus concorrentes. O conteúdo desta aula será útil quando houver a necessidade de selecionarmos um novo sistema ou estivermos tentando melhorar a performance de um já existente. Boas ferramentas de desempenho (geralmente fornecidas pelo fabricante) também são uma ajuda indispensável para manter um sistema funcionando da melhor maneira possível. Equações de Performance de Computador A equação apresentada logo abaixo é de fundamental importância para avaliar o desempenho de computadores, medindo o tempo de UCP: onde o tempo por programa é o tempo requerido de UCP. A análise desta equação revela que a otimização de UCP pode ter um efeito dramático na performance. Máquinas RISC tentam reduzir o número de ciclos por instrução e máquinas CISC tentam reduzir o número de instruções por programa. A otimização da UCP não é a única maneira de aumentar o desempenho do sistema. Memória e E/S também pesam muito na sua vazão (número de tarefas que o sistema pode realizar sem afetar de forma adversa o tempo de resposta). Contudo, a contribuição da memória e da E/S não é considerada na equação básica. Para aumentar o desempenho geral de um sistema, temos as seguintes opções: Otimização da UCP: maximizar a velocidade e a eficiência das operações realizadas pela UCP. Otmização da memória: Maximizar a eficiência de um código de gerenciamento de memória. Otimização da E/S: Maximizar a eficiência de operações de entrada/saída. Uma aplicação cujo o desempenho geral é limitado por um dos ítens acima é dita ser limitada por UCP, limitada por memória ou limitada por E/S, respectivamente. Antes de continuarmos vamos relembrar a lei de Amdahl, que afirma que uma melhoria de desempenho a ser obtida, pelo uso de algum modo de execução mais rápido, está limitada pela fração de tempo em que o modo mais rápido é usado:
S aceleação geral do sistema f fração de trabalho realizado k aceleração do novo componente (melhoria) Assim a melhoria mais evidente no desempenho do sistema é obtida quando a performance dos componentes mais frequentementes usados é melhorada. Saber que um sistema é limitado por UCP, por memória ou limitado por E/S é o primeiro passo na direção da melhoria do seu desempenho. Ferramentas Matemáticas Medidas de desempenho dependem do ponto de vista individual. Um usuário de computador está mais preocupado com tempo de resposta: o tempo total para o sistema realizar uma tarefa. Administradores de sistema estão mais preocupados com vazão: quantas tarefas concorrentes o sistema pode realizar sem afetar de forma adversa seu tempo de resposta. Estes dois pontos de vista são inversamente relacionados. Especificamente, se um sistema realiza uma tarefa em k segundos, sua vazão é 1/k destas tarefas por segundo. Na comparação de performance de dois sistemas, medimos o tempo que cada um leva para realizar a mesma quantidade de trabalho. Se o mesmo programa é executado nos dois sistemas, Sistema A e Sistema B, o Sistema A é n vezes mais rápido que o sistema B se: O Sistema A é x% mais rápido do que o sistema B se: Estas fórmulas são úteis na comparação do desempenho médio de um sistema com o desempenho médio de outro sistema. Entretanto, o número que obtemos com elas é muito dependente de nossa definição de média no desempenho real de sistemas. Média Aritmética A média aritmética é aquela com a qual a maioria das pessoas está mais familiarizada. Se temos cinco medidas, as somamos e dividimos por cinco, o resultado é a média aritmética. Esse tipo de média não deve ser usada quando os dados são altamente variáveis ou distorcidos em direção a valores maiores ou menores. Nesses casos a média aritmética ponderada é melhor que a aritmética porque pode nos dar um cenário mais claro do comportamento esperado do sistema. A média poderada é encontrada fazendo os produtos da freqüência de execução pelo tempo de execução do programa.
Tabela 1: Média aritmética de tempo de execução em segundos de cinco programas nos três sistemas. A média ponderada (tabela 2) dos tempos de excução para estes cincos programas sendo executados no Sistema A é: (50 x 0,5) + (200 x 0,3) + (250 x 0,1) + (400 x 0,05) + (5000 x 0,05) = 380. Um cálculo similar revela que a média ponderada dos tempos de execução para estes cinco programas sendo executados no Sistema B é de 695 segundos. Usando a média ponderada, agora vemos claramente que o Sistema A é cerca de 83% mais rápido do que o Sistema C para esta carga de trabalho específica. Tabela 2: Mix de execução de cinco programas em dois sistemas e a média ponderada dos tempos de execução. BENCHMARKING Benchmarking de performance é a ciência de fazer avaliações objetivas do desempenho de um sistema em relação a um outro. Benchmarks são também úteis para determinar melhorias de performance obtidas pela atualização de um sistema ou de seus componentes. Bons benchmarks nos permitem avaliar propagandas enganosas e truques estatísticos, pois irão identificar os sistemas que fornecem um bom desempenho a um custo mais razoável. Em poucas palavras, um desempenho ótimo é obtido quando um sistema de computação executa a sua aplicação usando a menor quantidade de tempo (de relógio) possível. Ciclos de relógio, MIPS e FLOPS A velocidade da UCP, por si, é a métrica enganosa (infelizmente) mais frequentemente utilizada por vendedores de computadores, que alegam a superioridade de seus sistemas sobre todos os outros. Em sistemas arquitetonicamente idênticos, uma UCP executando ao dobro da velocidade de relógio do que uma outra UCP provavelmente vai fornecer uma vazão melhor.
Mas ao comparar ofertas de diferentes vendedores, os sistemas provavelmente não serão arquitetonicamente idênticos. (Caso contrário, ninguém poderia alegar uma margem de vantagem competitiva). Uma métrica amplamente citada relacionada ao ciclo de relógio é a métrica milhões de instruções por segundo (MIPS). Isso mede a razão na qual o sistema pode executar uma combinação típica de instruções de aritmética inteira, ponto flutuante e operações lógicas. No entanto arquiteturas diferentes de máquinas requerem um número diferente de ciclos para realizar uma dada tarefa. A métrica MIPS não considera o número de instruções necessárias para completar uma tarefa esécífica. A diferença mais evidente pode ser vista quando comparamos sistemas RISC com sistemas CISC. Digamos que solicitamos a ambos os sistemas a execução de uma operação de divisão inteira. O sistema CISC pode realizar 20 instruções binárias de máquina antes de dar a resposta final. O sistema RISC pode executar 60 instruções. Se ambos os sistemas derem a resposta em um segundo, o índice MIPS do sistema RISC seria o triplo daquele do sistema CISC. Podemos honestamente dizer que o sistema RISC é três vezes mais rápido do que o sistema CISC? Claro que não: em ambos os casos recebemos a nossa resposta em um segundo. Também existe um problema similar com a métrica FLOPS (operações de pontoflutuante por segundo). Megaflops ou MFLOPS é a métrica originalmente usada para descrever a potência de supercomputadores, mas que agora é citada em literatura de computadores pessoais. A métrica FLOPS é ainda mais enganosa do que a métrica MIPS porque não existe consenso sobre o que constitui uma operação de ponto-flutuante. Apesar de suas deficiências, velocida de relógio, MIPS e FLOPS podem ser métricas úteis na comparação de desempenho de uma linha de computadores similares oferecidos pelo mesmo vendedor. Assim se um vendedor oferece uma atualização de seu sistema dos atuais x MIPS para um 2x MIPS, você terá uma ideia mais precisa da melhoria de performance que estará obtendo de acordo com o custo necessário para tal. Benchmarks sintéticos: Whetstone, Linpack e Dhrystone Pesquisadores de computação lutaram por muito tempo para definir um único benchmark que pudesse permitir comparações de performance honestas e confiáveis, embora independentes da organização e da arquitetura de qualquer tipo de sistema. A ideia predominante naquela época era que se podia escrever um programa usando uma linguagem como C, compilá-lo e executá-lo em diversos sistemas. O tempo de execução resultante poderia levar a uma única métrica de performance de todos os sistemas testados. Métricas de performance derivadas desta maneira são chamadas de benchmarks sintéticos porque não necessariamente representam qualquer carga de trabalho ou aplicação específica. Três dos mais conhecidos benchmarks sintéticos são as métricas Whetstone, Linpack e Dhrystone. O programa de benchmark Whetstone foi publicado em 1976, sendo seu código muito intensivo em ponto-flutuante, utilizando rotinas de bibliotecas de funções trigonométricas e exponenciais. Seus resultados são divulgados em Kilo-Whetstone Instruções por segundo ou Mega-Whetstone Instruções por segundo. Outra fonte para performance de ponto flutuante é o benchmark Linpack. O Linpack, uma contração de LINear algebra PACKage, é uma coleção de sub-rotinas denominadas Basic Linear Algebra Subrotines (BLAS) que resolviam sistemas de equações lineares usando aritmética de dupla precisão. Contudo cálculos de ponto-flutuante de alta velocidade certamente não são importantes para todos os usuários de computadores. Reconhecendo isso, Reinhold P. Weicker escreveu um programa de benchmark que focava operações de manipulação de strings e inteiros. Ele denominou seu programa de benchmark Dhrystone. O programa é limitado por UCP, não executando E/S e chamadas de sistema. Os resultados de Dhrystone são reportados usando simplesmente Dhrystones por segundo (o número de vezes que o programa de teste pode ser executado em um segundo) e não em DIPS ou Mega-DIPS.
Benchmarks padrão de avaliação de performance A ciência de avaliação de performance de computadores se beneficiou enormente das contribuições dos benchmarks Whetstone, Linpack e Dhrystone. A SPEC (Standard Performance Evalution Corporation) foi fundada em 1988, seu principal objetivo é estabelecer métodos imparciais e realistas para avaliação de performance de computadores. O mais amplamente conhecido (e respeitado) dentre os benchmarks SPEC é sua suite UCP, que mede vazão de UCP, velocidade de acesso a cache e memória e eficiência de compilador. A última versão benchmarks é UCP2000. Ele consiste de duas partes: CINT2000, que mede quão bem um sistema realiza o processamento de inteiros e CFP2000, que mede a performance de ponto-flutuante. O CINT2000 consiste de 12 aplicações, 11 das quais são escritas em C e uma em C++. A suite CPF2000 consiste em 14 aplicações, 6 das quais são escritas FORTRAN 77, 4 em FORTRAN 90 e 4 em C. Os resultados (vazão do sistema) obtidos na execução destes programas são reportados como uma razão entre o tempo que o sistema sob teste demora para executar e o tempo que uma máquina de referência leva para executar o mesmo suite.