May 31, 2008 10:52
Posted by Jeremy Durham
RailsConf 2008 is upon us! The day started out with a little introduction from Chad Fowler, explaining where both Ruby and Rails came from, and how we got to where we are. After that, it was Joel Spolsky who gave a funny Keynote. Then, the real action began.
After a couple of interesting discussions about GlassFish and JRuby, I had a conversation with Nick Sieger and Ola Bini about JRuby’s memory usage. I’ve been using JRuby for the last 9 months or so, and had some lingering questions about overall memory usage of JRuby as well as memory required to spin a new Rails instance. JRuby does in fact use a bit over 800 megs of RAM, but this can be shared amongst multiple applications. Each Rails instance that is spun up to handle requests will take about 20 megs of RAM on startup, and “warm-up” to about 30 megs of RAM. The amount of RAM each Rails instance uses has been something that has been elusive for me, and there’s no easy way that I can tell to extract that information from the JVM, so it was helpful to get some good information out of the experts.
After jMaki, I went to Hosting and the Woes by EngineYard, which ended up being an OK talk, but for the most part pretty obvious. Index all your foreign keys, don’t run Ferret in production, and a vague comment about them having an issue with image_science and monit. That one left me baffled, so I’ll have to get more information on it later. The one interesting comment was that they really have no issue with Nginx.
I sat in on both the Rubinius talk, and the MagLev talk, and that’s where things really got interesting. Rubinius and MagLev, from my point of view before about 4:30pm Friday (when the MagLev talk started) were trying to accomplish the same goal. Rubinius had some really excellent information about the guts of Rubinius, with Wilson Bilkovich talking about how to implement eval in Ruby (in about 20 lines of code). I loved hearing about the guts of Rubinius, and any talk that includes Eric Hodel, Ryan Davis, Evan Phoenix, and others is bound to get interesting. They discussed their future plans to implement a new Ruby grammar in Rubinius and convert to using LLVM to turn VM bytecode into native code.
After Rubinius, Avi Bryant was sitting right in front of me so I asked him a few quick questions about MagLev. I immediately found out it was only about 90-100 days old. My expectations were very, very low.
Avi went to the podium and started to demo MagLev. He created an irb, and created a global “hat”. Then, he started another irb, and created another “hat”. Then, on the left irb, he added a rabbit to the hat, and on the right irb he pulled the rabbit he’d created on the left out of the hat. Now this was interesting. Apparently, MagLev supports a global persistence system that allows all global things (classes, variables) to be seen by multiple instances of the VM, regardless of when they are started. But, he wasn’t done yet.
Bob Walker from Gemstone got up and starting discussing benchmarks, and that’s pretty much where it got crazy. He showed that in the exception benchmark, MagLev was 8x faster than MRI. In sieve, they were about 70x faster. In loop, about 110x faster. They explained that MagLev was built on top of the pre-existing Gemstone Smalltalk VM, which apparently is very high performing. There were some references to MagLev having more functionality in another 3-4 months, as currently it does not run Rails. Definitely an amazing project, though, for three months worth of work.
After that, we listened to DHH talk about the “Rails surplus”, and how to better yourself outside of the programming space. He suggested a few books, including Envisioning Information.