english
NebuLog

Lo scontro finale delle performance Ruby

di Matteo Latini
Topics: Tools, Systems

spacer Da quando, il 31 Ottobre 2011 è stata rilasciata la prima versione stabile di Ruby 1.9.3, qui a NebuLab abbiamo iniziato a pensare che fosse tempo di aggiornarsi. Per renderci le cosa più semplice, abbiamo voluto effettuare qualche test per vedere se ne valesse veramente la pena. Questo articolo contiene i risultati di quei test.


Fino a poco tempo fa per le nostre applicazioni web usavamo Ruby Enterprise (ree per gli amici di rvm). Ruby Enterprise è, per chi non l'avesse mai incontrato, Ruby 1.8.7 ma con alcune patch che ne garantiscono un miglior utilizzo della memoria e permettono ai più geek di configurare vari aspetti del garbage collector (GC). Al seguito di questi test abbiamo deciso di usare Ruby 1.9.2 per le nostre applicazioni in produzione, con ottimi risultati!


Per effettuare i test abbiamo utilizzato ruby-benchmark-suite su un MacBookPro5,5 ricorrendo a rvm per installare:


  • ruby-1.8.7-p352
  • ruby-1.9.2-p290
  • ruby-1.9.3-preview1
  • ree-1.8.7-2011.03
  • rbx-2.0.0pre
  • jruby-1.6.4
  • maglev-26852


Come avrete notato, le versioni con cui sono stati effettuati i test non sono proprio le ultime in circolazione. Capire le differenze prestazionali non dovrebbe essere un problema in ogni caso (cerchiamo differenze evidenti per scegliere una versione Ruby stabile e performante da utilizzare).


Il grafico è stato realizzato con Highcharts una libreria js per la realizzazione di grafici dinamici. Potete esplorare il grafico cliccando su un punto e trascinando il mouse.


Alcune sezioni del grafico sembrano non popolate da barre, questo è legato principalmente ad alcuni test con tempi di esecuzione inferiori al secondo. Lo stesso vale quando un test, non essendo andato a buon fine, ha ricevuto un tempo di esecuzione pari a 0. Ciò vuol dire che, se vedete uno spazio vuoto tra le barre, è successo che quella particolare versione di Ruby non è stata in grado di portare a termine il benchmark senza eccezioni.



Guardando il grafico sembra evidente che 1.9.2 e 1.9.3 vincono sotto molti punti di vista. Al momento sembrano essere le due versioni di Ruby in assoluto più stabili e veloci. Le versioni più "esotiche" di Ruby regalano, in alcuni test, performance straordinarie ma spesso non riescono a portare a termine un test con successo impiegando o troppo tempo o fallendo miseramente.


Personalmente, sono rimasto molto colpito dall'evidente inadeguatezza di Ruby Enterprise. Al seguito di questa analisi posso affermare con sicurezza che Ruby Enterprise andrebbe usato esclusivamente se si hanno applicazioni in produzione per cui non è previsto un aggiornamento. Ovviamente bisogna tenere conto che Ruby Enterprise non offre solo benefici prestazionali ma, più che altro, benefici legati all'utilizzo della memoria nel caso sulla stessa macchina risiedano diverse applicazioni Ruby e benefici legati alla possibilità di configurare il GC.


Bisogna anche dire però che parte di queste funzionalità che ree offre sono ormai anche parte di Ruby 1.9. Da una parte le performance sono state notevolmente migliorate grazie all'inclusione in Ruby 1.9 di YARV dall'altra in Ruby 1.9.3 è stata introdotta la possibilità di configurare il GC proprio come ree.


Per concludere, mi rendo conto che per alcuni di voi, i più scrupolosi, questa sia una valutazione approssimativa (lo è anche per me :D) per cui vi metto a disposizione anche il file originario dei test in formato CSV, così potrete lavorarci sopra come meglio credete.


Approfondimenti

  • The Great Ruby Shootout
  • 1.8.7 vs 1.9.2
  • The Story Behind Ruby 1.9.3 Getting 36% Faster Loading Times
  • Matz parla di Ruby 1.9

Tweet
RSS

Categorie

© 2012 - Nebulab - Tutti i diritti riservati

gipoco.com is neither affiliated with the authors of this page nor responsible for its contents. This is a safe-cache copy of the original web site.