Profiling of DBUS Port of EDS vis-a-vis CORBA BONOBO based EDS

Addressbook used


Local Addressbook with 9981 contact.

These contacts were in the form of a vcf file, so imported the file into evolution. The DBUS based version imported the file successfully and was significantly faster in importing the file. But it is not reporting the right number of contacts in evolution (it shows around 3200 contacts instead of 9981 contacts although it has imported all the contacts). There are around 900 contacts with names starting with 'a' which it displays correctly when searches for in evolution.

The DBUS based version sometimes stops responding (hangs) printing the following repeatedly on the terminal

dbus_g_proxy_cancel_call: assertion `pending != NULL' failed

This is arising because of the g_return_if_fail (pending != NULL) in the file dbus_gproxy.c

It is trying to cancel a pending call which is not there in DBusGProxy->pending_calls list. Might be happening due to some bug in DBUS code or wrongly calling dbus_g_proxy_cancel_call somewhere from eds code.

Test 1

The following statements were run 10 times in a loop

query = e_book_query_any_field_contains ("")

e_book_get_book_view (book, query, NULL, 0, &view, &error

DBUS

real 0m16.927s

user 0m11.809s

sys 0m0.168s

CORBA

real 1m11.952s

user 0m33.792s

sys 0m0.191s

For detailed timing reports on this test download the following files and open them with sysprof.http://sysprofwww.daimi.au.dk/~sandmann/sysprof/

test1_dbus.txt

test1_corba.txt

Test 2

The following statements were run 10 times in a loop

query = e_book_query_field_exists (E_CONTACT_FULL_NAME)

e_book_get_contacts (book, query, &contacts, &error)

DBUS

real 2m16.289s

user 1m44.399s

sys 0m0.432s

CORBA

real 1m9.436s

user 0m20.536s

sys 0m0.345s

For this test dbus looks like taking too much time executing but some sysprof analysis tells that almost all the time is spent in glib, time spent in contacting the backend over dbus and getting the contacts is actually very less. I didn't explored the problem any deeper but appears that there is some problem with e_book_get_contacts code.

For detailed timing reports on this test download the following files and open them with sysprof.

test2_dbus.txt

test2_corba.txt

Calendar


In personal calendar i.e. with uri "$HOME/.evolution/calendar/local/system/calendar.ics" a number of calendar items were randomly generated with and without alarms over a span of three months. The generation was done with help of srand () and rand () from stdlib.

Test with e_cal_view_start

The function e_cal_view_start is chosen as it involves a lot of data transfer from eds. The values given here indicate the amount of time spent in the function e_cal_view_start (). The table here indicates the number of calendar items for which the test was performed. The values are averaged over each query iterated 100 times.

 Number of Calendar Items        DBUS      BONOBO
 100                             1.040     0.321
 120                             1.046     0.324
 140                             1.071     0.357

With the current code written for eds-dbus, bonobo seems faster for calendar.

I should say I am rather surprised here and would like to dig a bit deeper - Evolution/User:Harish

Apps/Evolution/DBus_Port_of_EDS (last edited 2013-08-08 22:50:01 by WilliamJonMcCann)