Making Evolution Data Server's calendar smaller and faster

Evolution-data-server ("e-d-s") is a daemon that holds a user's calendar and addressbook data. Evolution, the panel's clock, the contact lookup applet, and other programs communicate with e-d-s to extract the data they need.

E-d-s was written during the early days of Evolution, and as such has not seen much optimization. It consumes more memory than it should, and queries to calendars are slower than they should be. Evolution uses several semi-bad hacks to improve performance, but this in turn uses more memory than it should.

Your mission

  • You will add logging to evolution-data-server to see what kind of queries get sent to the calendar, what queries remain alive, and for how long they remain active.
  • You will profile e-d-s on typical workloads from Evolution, using calendars of different sizes, so that we can find hotspots for optimization.
  • You will implement an interval tree to store calendar data in memory, which will allow typical calendar queries to be made much faster and have a lower working set in memory.

  • You will evaluate whether Evolution's cache of calendar queries is worthwhile.
  • At the end, you will produce a report with your findings and patches.

Required knowledge

You need to be very familiar with C coding.

You need to be moderately familiar with low-level tools like Valgrind and gdb.

You'll benefit from experience with plotting tools like gnuplot.

Experience with profiling applications is desirable.



Your mentor will be FedericoMenaQuintero. Feel free to mail him at

Outreach/SummerOfCode/2008/Ideas/EvolutionDataServerCalendar (last edited 2013-12-03 18:32:29 by WilliamJonMcCann)