I added over the past couple days a few MBeans to allow monitoring some of JRuby's internals. I also added a --manage flag that turns on the remote bits of JMX monitoring so you can connect to the process using jconsole. All fun stuff.

So here's a few findings from running Rails in normal mode with a bunch of ab requests (i.e. not handling sessions in any reasonable way):

(this is all jitted...I'll try a +C run after I add monitoring to on-load compilation.)

dev mode, after startup:

- 69 methods have jitted
- average jitted code size is 3936 bytes
- average compile time is 2300 microseconds (need to doublecheck this metric...)
- all methods that attempted to JIT have succeeded.
- 11858 call sites have inline cached
- module inclusion has triggered 38 removals, for a total of 88 removals (very good considering 11858 caches)

after one request to static main page + dynamic info page:

- 75 methods have jitted
- average jitted code size is 3878 bytes
- average compile time is 2171 microseconds
- all methods that attempted to JIT have succeeded
- 14191 call sites have inline cached
- module inclusion has triggered 38 removals, for a total of 89 removals

after 51 requests to the static page and 51 requests to the dynamic page

- 461 methods have jitted (3 reused, which means at least 3 methods that would otherwise have jitted in a *single* app had identical ASTs) - average jitted code size is 4024 (1.87MB total byte[], which translates to somewhat less actual memory used)
- average compile time is 1236microseconds
- all 464 methods that attempted to jit have succeeded (3 reusing code already jitted)
- 30941 call sites have inline cached, same module/removal statistics

So a few interesting details from this..

- up to this point we're only using about 10% of the current "max" number of JITted methods. Granted, this is a very simple request, so maybe that's a high percentage. - jitted code size isn't too bad considering the number. An LRU that ages out old, unused methods might be even better. - 30941 call sites have attempted to cache, but we have no measurement on how many of those call sites have given up because of too-polymorphic calls or how many of them might be stepping on each other forcing a re-cache. Currently the call sites are set to give up after 50 cache misses. I'll try to add some monitoring for call site caches soon. So busy.

Interesting though.

- Charlie

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

   http://xircles.codehaus.org/manage_email


Reply via email to