Making Evolution Data Server's addressbook 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 address books 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

  • Add logging to e-d-s to see what searches are performed, how long the take to execute, and (for the default local addressbook) if they use the summary database or not
  • The summary database needs to be replaced, either with a new implementation matching the API, or by adding indexing directly to the "file" (Berkeley DB) backend
  • You will profile e-d-s on typical workloads from Evolution, using addressbook and contacts of different sizes, so that we can find hotspots for optimization.
  • 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 RossBurton. Feel free to mail him at

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