# Ruby 1.9.2: un missile

**URL:** <https://www.ruby-forum.com/t/ruby-1-9-2-un-missile/194544>\
**Category:** IT\
**Created:** [September 6, 2010, 11:16pm UTC](https://www.ruby-forum.com/t/ruby-1-9-2-un-missile/194544 "2010-09-06T23:16:34Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![triplem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b19c9b/32.png) [@triplem](https://www.ruby-forum.com/u/triplem)\
**Post date:** [September 6, 2010, 11:16pm UTC](https://www.ruby-forum.com/t/ruby-1-9-2-un-missile/194544/1 "2010-09-06T23:16:34Z")

</div>

Ho fatto un paio di test e mi risulta piÃ¹ veloce di jruby!

[http://mastrodonato.info/index.php/2010/09/ruby-1-9-2-prestazioni-al-top/](http://mastrodonato.info/index.php/2010/09/ruby-1-9-2-prestazioni-al-top/)

---

<div class="post-metadata">

**Author:** ![triplem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b19c9b/32.png) [@triplem](https://www.ruby-forum.com/u/triplem)\
**Post date:** [September 7, 2010, 10:07am UTC](https://www.ruby-forum.com/t/ruby-1-9-2-un-missile/194544/2 "2010-09-07T10:07:16Z")

</div>

On Mon, Sep 6, 2010 at 11:16 PM, Marco M.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Ho fatto un paio di test e mi risulta più veloce di jruby!
> 
> [http://mastrodonato.info/index.php/2010/09/ruby-1-9-2-prestazioni-al-top/](http://mastrodonato.info/index.php/2010/09/ruby-1-9-2-prestazioni-al-top/)

mi sovviene, io da tempo non seguo lo sviluppo, ma nel design iniziale  
di YARV c’era anche compilazione JIT e AOT (e a un certo punto  
funzionava pure, in parte). Non ci lavora più nessuno?

---

<div class="post-metadata">

**Author:** ![triplem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b19c9b/32.png) [@triplem](https://www.ruby-forum.com/u/triplem)\
**Post date:** [September 7, 2010, 3:24pm UTC](https://www.ruby-forum.com/t/ruby-1-9-2-un-missile/194544/3 "2010-09-07T15:24:06Z")

</div>

Io non ho mai seguito lo sviluppo e non so che tipo di compilazione  
faccia la vm YARV, so che ci stanno lavorando perchÃ¨ Ã¨ stata integrata  
in ruby dalla serie 1.9 (KRI).  
Solo che nell’implementazione precedente, la vm era molto simile alla  
precedente vm MRI delle versioni 1.8, era si molto piÃ¹ performante ma  
simile nel comportamento nel senso che era molto reattiva e costante, al  
contrario di quella java che ha bisogno di un tempo di warming.  
Questa nuova versione di KRI Ã¨ piÃ¹ veloce sia a freddo che dopo il  
warming!  
Dai miei test (poi bisogna vedere nella realtÃ ) la jvm, dopo il warming  
aumenta le prestazioni del 25%! La KRI 1.9.2 invece Ã¨ anche piÃ¹  
costante, solo del 14%.  
La precedente KRI invece, come anche la MRI, non miglioravano o non  
avevano il decadimento iniziale, a seconda di come la si vuole  
interpretare.

---

<div class="post-metadata">

**Author:** ![triplem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b19c9b/32.png) [@triplem](https://www.ruby-forum.com/u/triplem)\
**Post date:** [September 8, 2010, 8:26am UTC](https://www.ruby-forum.com/t/ruby-1-9-2-un-missile/194544/4 "2010-09-08T08:26:46Z")

</div>

2010/9/7 Marco M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

\> La precedente KRI invece, come anche la MRI, non miglioravano o non \> avevano il decadimento iniziale, a seconda di come la si vuole \> interpretare.

non _penso_ dovresti vedere questo comportamento.  
Io so come funziona yarv (è una vm per bytecode che non dumpa niente,  
con il main loop direct threaded) e non dovrebbe avere nessun  
meccanismo che possa causare una cosa simile 🙂

---

<div class="post-metadata">

**Author:** ![triplem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b19c9b/32.png) [@triplem](https://www.ruby-forum.com/u/triplem)\
**Post date:** [September 8, 2010, 11:16am UTC](https://www.ruby-forum.com/t/ruby-1-9-2-un-missile/194544/5 "2010-09-08T11:16:31Z")

</div>

Non Ã¨ che lo penso, l’ho verificato. Avviene proprio quello che ho  
scritto, stavo commentando i dati.  
Fino alla 1.9.1 tu hai mai notato differenze con le partenze a freddo?  
Erano interpreti molto costanti, anche come consumo di memoria…  
l’unica cosa che variava era il tempo di esecuzione.

---

<div class="post-metadata">

**Author:** ![triplem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b19c9b/32.png) [@triplem](https://www.ruby-forum.com/u/triplem)\
**Post date:** [September 8, 2010, 5:46pm UTC](https://www.ruby-forum.com/t/ruby-1-9-2-un-missile/194544/6 "2010-09-08T17:46:33Z")

</div>

Ciao Pietro,  
non sapevo del problema e neanche che in una singola richiesta Rails  
venissero allocati quelle migliaia di oggetti!

---

<div class="post-metadata">

**Author:** ![triplem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b19c9b/32.png) [@triplem](https://www.ruby-forum.com/u/triplem)\
**Post date:** [September 8, 2010, 11:35am UTC](https://www.ruby-forum.com/t/ruby-1-9-2-un-missile/194544/7 "2010-09-08T11:35:15Z")

</div>

2010/9/6 Marco M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> Ho fatto un paio di test e mi risulta più veloce di jruby!

Ciao,  
molto interessante.  
Tuttavia, secondo alcuni, ad esempio [1], ciò che più influisce sulle  
prestazioni di un’applicazione ruby di una certa complessità è la  
garbage collection.  
Hai provato a testare questo aspetto, ad esempio creando tanti (ma  
proprio tanti) oggetti, per poi eliminarne ogni riferimento, e  
ripetendo il tutto più volte?

pietro

[1] [Merbist](http://merbist.com/2010/07/29/object-allocation-why-you-should-care/)

---

<div class="post-metadata">

**Author:** ![triplem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b19c9b/32.png) [@triplem](https://www.ruby-forum.com/u/triplem)\
**Post date:** [September 9, 2010, 10:48pm UTC](https://www.ruby-forum.com/t/ruby-1-9-2-un-missile/194544/8 "2010-09-09T22:48:51Z")

</div>

2010/9/8 Marco M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> Non è che lo penso, l’ho verificato. Avviene proprio quello che ho  
> scritto, stavo commentando i dati.

infatti sono io che pensavo fosse diverso non tu 🙂

> Fino alla 1.9.1 tu hai mai notato differenze con le partenze a freddo?  
> Erano interpreti molto costanti, anche come consumo di memoria…  
> l’unica cosa che variava era il tempo di esecuzione.

certo, ma mentre nel resto del tuo benchmark consideri più casi, nel  
considerare la differenza ne prendi uno solo.

Questi sono i valori che ottengo io facendo girare 29 volte il  
testcase, e sommando i tempi del primi giri a freddo, e dei tempi medi  
finali  
310.275  
310.59

la differenza più o meno è zero, le variazioni sono nell’ordine del  
15% dalla mediana, e dipendono da cose esterne a ruby (swap in/out, io  
di rete, demoni in background e cose così).

---

<div class="post-metadata">

**Author:** ![triplem](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b19c9b/32.png) [@triplem](https://www.ruby-forum.com/u/triplem)\
**Post date:** [September 10, 2010, 9:19am UTC](https://www.ruby-forum.com/t/ruby-1-9-2-un-missile/194544/9 "2010-09-10T09:19:35Z")

</div>

> infatti sono io che pensavo fosse diverso non tu 🙂

ops 😛

> > Fino alla 1.9.1 tu hai mai notato differenze con le partenze a freddo?  
> > Erano interpreti molto costanti, anche come consumo di memoria…  
> > l’unica cosa che variava era il tempo di esecuzione.
> 
> certo, ma mentre nel resto del tuo benchmark consideri piï¿½ casi, nel  
> considerare la differenza ne prendi uno solo.

Ne ho provati di interpreti eppure non ho mai riscontrato differenze:  
[http://mastrodonato.info/index.php/2010/01/ruby-vs-ruby-vs-python-vs-python/](http://mastrodonato.info/index.php/2010/01/ruby-vs-ruby-vs-python-vs-python/)  
a meno che mi sia perso qualche modalitÃ di esecuzione?

> Questi sono i valori che ottengo io facendo girare 29 volte il  
> testcase, e sommando i tempi del primi giri a freddo, e dei tempi medi  
> finali  
> 310.275  
> 310.59
> 
> la differenza piï¿½ o meno ï¿½ zero, le variazioni sono nell’ordine del  
> 15% dalla mediana, e dipendono da cose esterne a ruby (swap in/out, io  
> di rete, demoni in background e cose cosï¿½).

Ok, era solo per evidenziare quella curiosa diversitÃ con le versioni  
precedenti.  
L’utilizzo “reale” per istanze web e processi batch di un certo peso non  
si accorgono nemmeno di questo particolare. Forse i piccoli processi ma  
basterebbe non farli troppo piccoli e trovare il giusto compromesso tra  
gestione/occupazione memoria e tempi. Ma forse neanche questo e sono  
solo pippe
