[gclist] Wiring up the Boehm GC to the Ruby interpreter
Matthew Bloch
matthew@bytemark.co.uk
Fri, 12 Jul 2002 11:36:41 +0100
Hi there;
I tried wiring up the Boehm GC (downloaded a couple of days ago) to the
latest Ruby (from CVS) in an effort to smooth out the interpter's lengthy
delays in an interactive application written in the language: the only
changes I made to the Ruby source were:
* changed malloc/realloc/free to call GC_ equivalents like this in ruby.h:
#ifdef HAVE_BOEHM_GC
# include <gc/gc.h>
# undef malloc
# undef free
# undef realloc
# define malloc(x) GC_malloc(x)
# define free(x) GC_free(x)
# define realloc(x,y) GC_realloc(x,y)
#endif
* disabled Ruby signal handlers for SIGBUS/SIGSEGV;
* disabled all the code in rb_gc() and replaced with GC_collect_a_little();
* GC.enable / .disable / .start methods changed to affect the Boehm GC.
Only problem was-- it leaks! Or at least the memory use from my application
went up and up while the standard Ruby collector kept it bounded at around
10%. I could tell it was doing *something* because the memory shot up much
more quickly if I turned off collection. Are there any 'roots' in the Ruby
interpreter that an external GC should need to be told about? There were no
shared library dependencies other than the usual libc etc. Can this *only*
be because there's memory Boehm doesn't know about, or are there other
pitfalls to watch out for?
Also, I was a little disappointed not to see any difference 'smoothness' of
garbage collection between the two GCs-- the Boehm GC still paused the
application as often despite much fiddling with the global variables that can
control the frequency & severity of incremental collcetion; is a realistic
strategy to try to call GC_collect_a_little() every animation frame, with the
time limit set to, say 10ms? It didn't seem to stick to this unfortunately
(though I realise this isn't a guarantee by the collector-- will 10ms always
be too quick for it to do any useful work?).
Seeing as I'm fairly new to both the Ruby interpreter internals and the Boehm
GC, I'd appreciate tips on using either.
thanks,
--
Matthew Bloch Bytemark Computer Consulting
http://www.bytemark.co.uk/
tel. +44 (0) 8707 455026