[Mono-devel-list] Escape Analysis
Willibald.Krenn at gmx.at
Tue Jan 25 17:36:50 EST 2005
Massimiliano Mantione schrieb:
> A couple of things...
> 1st, I like the idea of Escape Analysis a lot.
> Even without having seen any paper about it, this is an obvious
> optimization... it's true that a generational GC would help as
> well, but this is a more "direct" approach to the problem (in any
> case complementary to a generational GC).
> In any case it's something I'd like to see, if nobody implements
> it eventually (after the more urgent things that I should do) I
> would do it myself.
Yes, it sounds quite promising, but AFAIK it's also quite dependand on
inlining. (Because lots of functions return newly allocated objects and
stack allocation of objects can only be made if the lifetime of an
object remains within a single function, obviously: You can not 'remote'
or return a stack allocated object.)
> But (2nd) I cannot see how Paolo is blocking you.
Well, actually he's not blocking me, but I had the impression that he
had significant reworks of the trampolines (et al.) in the pipeline. So
I figured it would be better to wait (until these changes are made)
before fussing too much with low-level-mono internals.
Anyways, currently I'm not that far, as I'm coding the Phase Shift
Detection (= monitor samples and tell when hot methods have
significantly changed ) and try to come up with some good balance to
trigger re-compilation activities.
I'm also investigating what type of sampling profiler I should use:
- My own one (low-profile; max 100 samples per second or so; basically
just a thread that sends SIGPROF signals to threads that have profiling
- Paolo's highly accurate one.
- or some mixture between the two.
BTW: At the moment I'm testing with some custom C# application server
(1) but I'm always looking for good suggestions regarding test
applications.. (GTK# doesn't work here - seems I'm not up to date with
all the libs. :-( )
> It is probably true that Escape Analysis is expensive, so it
> makes sense only with profile guided optimizations, but this is
> not a good reason not to code it now, knowing that sooner or
> later we *will* have that... and moreover, couldn't it be used
> with AOT anyway?
Interferes a little bit with my plan:
(1.) Get the basic framework ready (profiler, phase change pred.,
picker, static predictor, optimizer)
(2.) Apply _existing_ optimiziations dynamically in some sane manner to
non-static methods (change VMTs)
(3.) Add new optimization:
candidates: Devirtualization (incl. inlining), Escape Analysis, profile
guided code positioning, whatever...
(4.) ask community for comments and inclusion...
(5.) go (3.)
First iteration will end beginning April.. Points 1 and 2 I'd like to
have in a first working version end of next week. Thereafter I'll
probably look into the different optimizations and decide which one gets
to honor of being implemented.
At least that's the plan if I'm not spending too much time writing e-mails,
(1) For the interested reader:
Basically my application server is an object persistent framework on top
of a firebird database that is called via some remoting interface:
It's also my first 'success' story of porting a .NET webservice to
Linux, as everything was developed on windows using C#/Delphi and now
also runs on Mono/Kylix.. (Agreed, the client looks _way_ better when
running on XP..)
More information about the Mono-devel-list