JRuby invokedynamic updates for November

Charles Oliver Nutter headius at headius.com
Wed Nov 30 15:40:45 PST 2011


I may have found one big problem, using some rexml benchmarks I found.
The instance-variable logic I just added seems like it might not be
working right. It was supposed to be experimental and turned off, but
I used the wrong flag.

Invokedynamic disabled (-Xcompile.invokedynamic=false)

Parsing small document for 5 seconds          ... 5128 calls      (1025.60/s)
Adding new elemnt for 5 seconds               ... 599104 calls    (119820.80/s)
Document creation for 5 seconds               ... 105740 calls    (21148.00/s)
Writing tree for 5 seconds                    ... 6387 calls      (1277.40/s)
By-hand search for 5 seconds                  ... 319598 calls    (63919.60/s)
XPath search for 5 seconds                    ... 1319 calls      (263.80/s)
Parse large document for 5 seconds            ... 367 calls       (73.40/s)
Stream parsing for 5 seconds                  ... 586 calls       (117.20/s)
Pull parsing for 5 seconds                    ... 622 calls       (124.40/s)
SAX2 parsing for 5 seconds                    ... 213 calls       (42.60/s)
Lightweight parsing for 5 seconds             ... 787 calls       (157.40/s)

With instance var logic on:

Parsing small document for 5 seconds          ... 620 calls       (124.00/s)
Adding new elemnt for 5 seconds               ... 538775 calls    (107755.00/s)
Document creation for 5 seconds               ... 4457 calls      (891.40/s)
Writing tree for 5 seconds                    ... 1940 calls      (388.00/s)
By-hand search for 5 seconds                  ... 63180 calls     (12636.00/s)
XPath search for 5 seconds                    ... 104 calls       (20.80/s)
Parse large document for 5 seconds            ... 31 calls        (6.20/s)
Stream parsing for 5 seconds                  ... 334 calls       (66.80/s)
Pull parsing for 5 seconds                    ... 336 calls       (67.20/s)
SAX2 parsing for 5 seconds                    ... 134 calls       (26.80/s)
Lightweight parsing for 5 seconds             ... 426 calls       (85.20/s)

With instance var logic off:

Parsing small document for 5 seconds          ... 1179 calls      (235.80/s)
Adding new elemnt for 5 seconds               ... 554026 calls    (110805.40/s)
Document creation for 5 seconds               ... 112482 calls    (22496.40/s)
Writing tree for 5 seconds                    ... 8190 calls      (1638.00/s)
By-hand search for 5 seconds                  ... 415686 calls    (83137.20/s)
XPath search for 5 seconds                    ... 107 calls       (21.40/s)
Parse large document for 5 seconds            ... 72 calls        (14.40/s)
Stream parsing for 5 seconds                  ... 332 calls       (66.40/s)
Pull parsing for 5 seconds                    ... 339 calls       (67.80/s)
SAX2 parsing for 5 seconds                    ... 133 calls       (26.60/s)
Lightweight parsing for 5 seconds             ... 408 calls       (81.60/s)

The parsing cases are still slow, so there's something happening there.

For those following along, the sampled profile (-Xprof, or --sample
passed to JRuby) showed me that my instance variable fallback paths
were getting hit heavily, which is how I figured out something's wrong
there.

- Charlie

On Wed, Nov 30, 2011 at 5:25 PM, Charles Oliver Nutter
<headius at headius.com> wrote:
> On Wed, Nov 30, 2011 at 3:27 PM, Stephen Bannasch
> <stephen.bannasch at deanbrook.org> wrote:
>>                              user     system      total        real
>>  rexml                  73.540000   0.000000  73.540000 ( 73.540000)
>>  hpricot                 6.483000  0.000000   6.483000 (  6.483000)
>>  jdom_document_builder   0.245000   0.000000   0.245000 (  0.245000)
>>  nokogiri                0.433000   0.000000   0.433000 (  0.433000)
>
> Ok, that's *incredibly* bad. Do you have the script you're using so I
> can reproduce the results here? Something's broken.
>
> - Charlie


More information about the mlvm-dev mailing list