The Life of RubenV - Wolkjesblauw!
Federico's timeline tool gebruiken met Mono

Toen ik aan het uitzoeken was waarom Tomboy vrij veel tijd nodig heeft om te starten (BGO #567989, hint: het is niet het gebrek aan SQLite), dacht ik aan Lord Kelvin's uitspraak: "Meten is weten".

Nadenkend hoe ik dit kon doen, dacht ik eraan dat de GNOME community de perfecte tool heeft om uit te zoeken waarom iets traag is: Federico's geweldige timeline tool. Het enige wat ik moest doen is uitzoeken hoe dit gebruikt kan worden met Mono. En dat is vrij simpel, zoals je hieronder zal zien.

Tomboy startup
Tomboy startup (klik voor een volledige grafiek)


Federico gebruikt een slimme hack met syscalls, die gelogd worden met strace. Gelukkig is dit heel simpel te reproduceren met C#.


  1. Allereerst moeten we de juiste syscalls genereren. Voeg onderstaande toe aan je programma:

    public class TraceLogger {
        public static void trace (string group, string format, params object[] args)
        {
            string message = String.Format (format, args);
            string str = String.Format ("MARK: {0}: {1}", group, message);
            Mono.Unix.Native.Syscall.access(str, Mono.Unix.Native.AccessModes.F_OK);
        }
    }
  2. Voeg royaal veel trace statements toe aan je code: TraceLogger.trace("Main", "Starting main loop");
  3. Wijzig je startup script zodat de regel met "exec mono ..." nu "exec strace -ttt -f -o /tmp/timeline.strace mono ...." bevat.
  4. Gebruik Federicos script om het te plotten: python plot-timeline.py -o graph.png /tmp/timeline.strace.


Zo simpel is het. De aandachtige lezer zal merken dat ik het tracing formaat iets anders gebruik: in plaats van de programma naam gebruik ik een groep parameter. Dit maakt de grafiek interpreteren iets gemakkelijker: als je teveel tracing statements gebruikt kan het moeilijk zijn om te zien waar de grote gaten zijn. Door de kleurcodes te kapen wordt deze interpretatie moeilijkheid vermeden.

Ga nu maar allemaal snel jullie Mono programma's nog sneller maken!

gnome, mono, performance | Saturday 17 January 2009 08:44
Reactie van Vadim P.
Hope people take you up on this. I notice having the tomboy applet in my panel, and thus having to start tomboy & mono, adds 2-3 seconds to the "usable desktop" time.
17 January 2009 15:13
Reactie van Miguel de Icaza
Additionally, you could sprinkle things in your code and put this annotation on the method trace:

[Conditional("TRACE")]
void trace (....)

Then when you compile the code with -d:TRACE the calls to Trace.trace would run, but if you do not include the -D, then the method would not be compiled in.
19 May 2009 02:39
Reactie van RubenV
Didn't knew that was possible, that's a very neat trick miguel!
www.savanne.be | 20 May 2009 08:40
Reactie toevoegen:
Naam
Email (optioneel)
Website (optioneel)
Onthoud mijn gegevens
Email mij wanneer er nieuwe reacties zijn
Reactie
The author:
RubenV
Ruben Vermeersch
Computer Scientist (Software Engineering), GNOME Hacker, PhD Researcher, Photographer, Earthling
More info | Tweets
You are here:
I speak:
More:
The past: