[Mono-list] Re: The Mauve unicode testcase and VM performance

Jonathan Pryor jonpryor@vt.edu
Tue, 13 Apr 2004 18:08:59 -0400


Below...

On Tue, 2004-04-13 at 14:55, Stuart Ballard wrote:
<snip/>
> Interestingly, my installation of mono (from debian sid) doesn't even 
> come with its own libraries AOT'd. I'd have thought that you'd get the 
> best performance by AOT'ing *all* the libraries, including (and 
> especially) the low-level platform ones such as System.dll and 
> System.Xml.dll.

AOT (or pre-JITing) assemblies is not as useful as you'd think.  It has
two primary effects:

  - Reduce memory requirements, as memory doesn't need to be allocated
    for the JITed code
  - Decrease startup time, as (again) the JITing doesn't need to be 
    done.

This isn't without consequence.  Here are some highlights, but see Chris
Brumme's blog[1] for *lots* of details:

  - Fewer opportunities to inline during the JIT, as many methods you'd 
    like to inline will already have been compiled.
  - The real killer: AOT/pre-JIT code is AppDomain-neutral
    - Builds on the above inlining issue
    - Slows down access to class statics fields, as you need to go 
      through an indirection (for AppDomain lookup)
    - The JIT can't emit a direct function call to AOT code

You should (obviously) always run a performance analysis to see what the
impacts of AOT/pre-JIT are, but the general consensus from the .NET
developers is that it should be avoided unless you really can't afford
the startup penalty or the memory requirements.

Personally, I haven't had any problems with startup time under Mono, so
I don't see the point in shipping AOT-compiled assemblies.

 - Jon

[1] http://blogs.msdn.com/cbrumme/