Freigeben über


Desempenho com Economia

Projetar para desempenho custa caro e é bom economizar energia – gaste apenas quando precisar.

Tenho um caso de sucesso para contar. Em 84, no meu segundo emprego (acreditem, só fiquei 4 meses no meu primeiro emprego - não agüentei o marasmo e pedi demissão), fui designado para implementar o protocolo X.25. Aceitei a tarefa e exigi que fosse implementado em C.

Bem, naquele tempo esta empresa desenvolvia em linguagem de montagem (assembly) e o pessoal achou que ia ter baixíssimo desempenho. Como já tinha desenvolvido um protótipo na universidade, sabia que um X.25 seria grande e, com isto, convenci que em C seria menos custoso.

Grupo montado (éramos 3) implementamos o nível 3 do protocolo e fomos testá-lo. Resultado? No máximo 200bps quando precisávamos de 19200bps!

Lembro-me até hoje de quanto tive que ouvir por causa daquele mau desempenho...

Seguro do que estava fazendo, pedi mais um tempo para fazer otimizações. Colocamos um analisador (profiller) para analisar o comportamento do código e constatamos que 90% do tempo o código estava tratando da interrupção para transmissão e recepção de bytes do hardware. Com isto, focamos apenas neste código reimplementando-o em assembly a partir do código original em C.

Quatro dias de otimizações e fomos para o laboratório testar. Resultado? 21000bps!

Hoje, vejo arquitetos muito preocupados com o desempenho de suas aplicações implementando over-enginnering antes da hora. Isto costuma levar a sistemas complexos, de alto custo para fazer e manter.

Meu conselho: realize provas de conceito testando primeiro as arquiteturas mais simples e pare quando o sistema mostrar que consegue, na média, um desempenho aceitável. Daí em diante gaste tempo e dinheiro apenas com as funções mais críticas. Seu bolso e suas noites vão agradecer.

Comments

  • Anonymous
    July 21, 2008
    Concordo 100% com voce, e sempre que possível adoto esta política nos sistemas que trabalho mas tem um porém, dependendo da criticidade do sistema para a companhia, o nível de ansiedade em relação a ele e o prazo, é complicado conseguir o tempo necessário para os ajustes (tunning) dos componentes que realmente importam. Em sistemas distribuídos e/ou "em camadas", testes de carga em cada um dos componentes costumam dar bons resultados de forma a antecipar gargalos e assim evitar a situação acima descrita.

  • Anonymous
    July 24, 2008
    Também concordo que performance custa caro. Sempre procuro visualizar o cenário da aplicação, se realmente o negócio que ela representa necessita ser "performático", pois isso causa impacto direto, não só no seu modelo de desenvolvimento, mas também no bolso do cliente.

  • Anonymous
    July 25, 2008
    The comment has been removed