BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Notícias Performance em Ruby: A grande batalha entre as implementações e MRI binário VS MRI compilado

Performance em Ruby: A grande batalha entre as implementações e MRI binário VS MRI compilado

Favoritos

Atualmente existe uma forte competição entre as implementações Ruby, particularmente em relação a performance. A um ano atrás, Antonio Cangiano postou em seu blog um artigo chamado the Great Ruby Shootout, uma comparação de desempenho entre as versões 1.8.6, 1.9.0 em implementações como JRuby, Rubinius e Ruby.NET(este projeto foi descontinuado).

Recentemente Antonio publicou uma recente versão dessa comparação, porém, desta vez utilizando as versões 1.8.6 e 1.9.1 das implementações JRuby, Rubinius, Ruby Enterprise Edition, IronRuby e Maglev.

É interessante lembrar que todas as vezes que executar benchmarks esteja certo de estar utilizando as ferramentas corretas, como mostrado novamente por Antonio , onde ele encontrou alguns dados incorretos e publica uma versão atualizada do artigo mudando um pouco os resultados. Um dos problemas encontrados por ele foi na versão obtida via apt-get:

A grande suspresa acontece quando instala-se Ruby via apt-get. Ao compilar via source, você obtém uma velocidade duas vezes maior do que instalar via apt-get. Eu estava esperando algo do tipo 10/20%, não 100%. A principal razão disso é que a versão pré-empacotada de Ruby é compilada utilizando a opção --enable-pthreads onde encontra-se o problema.


Prashant Srinivasan menciona em seu artigo a razão a qual a opção --enable-ptread deixa o sistema mais lento. Este mesmo benchmark mostra também que Ruby 1.8.x rodando em plataforma do Windows possui a metade do desempenho relacionado a versão 1.8.7 (compilado diretamente do source) em distribuições Linux.

Atualmente encontramos disponíveis as versão 1.9.1 de Ruby, seguida de perto pela implementação JRuby 1.1.6RC1. De acordo com recentes benchmarks, JRuby mostra-se a mais rápida implementação de Ruby até o momento.

Outras implementações, tais como Rubinius e IronRuby continuam mais lentas do que o próprio MRI. MacRuby 0.3, baseado na implementação de Ruby 1.9 mostrava um desempenho inferior, entretanto esta versão não está em produção ainda, o que deva acontecer já nos próximos releases(MacRuby 0.4 será lançado ainda este ano).

Os resultados obtidos em benchmarks em cima de MagLev mostra que se trata de implementação promissora, tendo apresentado resultados rodando mais rápido que a MRI estando lento em pequenos pontos. É claro que devemos ressaltar que Maglev é uma iniciativa nova, tendo começado este ano.

Um ponto importante a levantar é que os benchmarks utilizados para a Great Ruby Shootout consiste em microbenchmarks, os quais testam individualmente as features de Ruby e seus Runtimes, conforme explicado por Antonio:

Há muitas pessoas interessadas em quais tipos de melhoria tais testes podem trazer para o deployment em aplicações Ruby on Rails. Por favor, não assuma que devido a VM A ter um resultado três vezes melhor que a VM B, Rails irá atender três vezes mais requisições por minuto. Isso não irá acontecer. Como dito, isto influenciará apenas para um melhor desempenho.


Em uma entrevista para a InfoQ Antonio explica a necessidade por mais benchmarks e expõe uma Suite de Benchmarks criada por ele para este propósito.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

BT