[Mongrel] fastthread -- what is it?

Joe Van Dyk joevandyk at gmail.com
Fri Jan 5 17:25:19 EST 2007


On 1/4/07, Zed A. Shaw <zedshaw at zedshaw.com> wrote:
> On Thu, 4 Jan 2007 00:55:41 -0800
> "Joe Van Dyk" <joevandyk at gmail.com> wrote:
>
> > Hi,
> >
> > A quick search didn't explain what fastthread is, and how it relates
> > to mongrel.  Why would I want to install fastthread?
>
> Hi Joe, long answer is that ruby has a bug in how the array works and how threads are garbage collected.  When the current Ruby thread locking primitives operate on threads, they tend to store idle ones in arrays.  As the existing thread locking mechanisms pull the threads off the array they never get garbage collected and that causes a nasty leak.
>
> At the time I was testing this, me and Bradley Taylor narrowed the problem down and produced these two scripts:
>
> http://pastie.caboo.se/10194
> http://pastie.caboo.se/10317
>
> The first one shows the leak by using Mutex (with graph), the second showed proper GC operation by using Sync (with graph).  Still wasn't enough because several high profile idiots on ruby-lang tried to claim the test was invalid but couldn't offer a reason why the first script leaked and the second didn't.
>
> Later, after much arguing, calling me an idiot, debating the merits of OS memory allocation, and other stupidities, we find out that Eric Mahurin fixed the whole problem a year ago and it was missed:
>
> http://blade.nagaokgaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/5861
>
> Thankfully, there's smart cool people like mentalguy who can make improvements and provide them as gems.  What mentalguy did is re-create all of the Ruby thread locking gear in a C extension called fastthread.  With fastthread we can provide a modest speed boost as well as fix the memory leaks Ruby has by just including a gem.  He's pushing for it to become the new thread locking api in Ruby, so  hopefully he can get it in without much fuss.
>
> I'm telling people that you have to use fastthread, but it's still external so if you run into problems or don't see an improvements then you don't have to run it.  Mongrel has fastthread as a gem dependency, but it will run it only if it's installed.  So, you can install it, try it out, and then remove the gem if it's a problem.
>
> And that's the whole story.  Enjoy!

Thanks for the explanation!

Joe


More information about the Mongrel-users mailing list