[Mono-dev] Re: GC startup time on windows (in DllMain)

Aras Pranckevicius aras at otee.dk
Thu Mar 2 04:58:11 EST 2006


Hi,

> When profiling our startup times on Windows, I noticed that GC_init
> takes quite long (~1.5 seconds on P4 3GHz), called from DllMain.

I've investigated the startup time more. Basically, I can cut mono
startup time by ~1 second on my 3 GHz machine, and everything still
seems to work :)

GC startup time did not look like it's a SMP issue - DllMain called
GC_init, which called GC_init_inner which has code like:
    if (!GC_dont_precollect || GC_incremental) GC_gcollect_inner();

And this first collection seems to walk over memory, find out which
memory can be read and which can't, etc. etc. On my machine it does
~5000 calls to GC_mark_from, each of them being a millisecond or less,
but all the calls add up.

Now, one could set GC_dont_precollect to be one (it is zero by
default), and the comments at gc.h seem to say that you can do this if
you're building the root set yourself - which I think mono does.

Long story short, just not calling GC_collect_inner from GC_init_inner
still makes all the code we have work, and cuts the startup time
significantly.

Is there some serious reason for GC pre-collecting everything on startup?


Aras Pranckevicius
otee.dk



More information about the Mono-devel-list mailing list