To save people time, here is some already-known info on D-Bus performance.
this post and a
short followup about the new recursive type
marshaling stuff slowing down those numbers a bit. I think there may
be a couple other relevant mails in the archives, but not finding them
Be sure the build for performance testing
does not have assertions, verbose mode, etc. enabled.
I’d also avoid caring too much about the DBusGProxy layer as it does a
pile of extra copying and is really convenience-over-performance in
many ways. Not to mention it needs basic sanity work in addition to
Historical background: the “D-Bus is faster” and “CORBA is slow” rumors are
purely originated by fanboys, and have never been either the goal or
the case. ORBit2 is nearly as fast as raw sockets.
By contrast, most design decisions of D-Bus
(the central bus daemon, validation in a paranoid/secure way of all
data, certain ordering guarantees, etc.) were
traded off in favor of robustness, decreased resource usage,
convenience, etc. rather than speed.
The only potentially significant speed wins in D-Bus I know of: 1)
D-Bus makes it pretty easy to be fully async and avoid any round
trips, which can be the key performance issue in some cases, in
particular may matter for application startup; 2) the
central bus daemon makes broadcasts/signals more efficient than the
case where any app that wants to broadcast has to connect directly to all listeners.
I should note that the D-Bus robustness-over-speed tradeoff mostly has
to do with the libdbus implementation, not the wire protocol. So
someone who disagreed could do a different implementation.
Finally, I’d encourage profiling the desktop and apps, rather than
D-Bus; I would be surprised if D-Bus showed up much in app profiles,
unless someone starts shoveling giant quantities of data through
it. If someone is doing that then a structural change would probably
work better than optimizing libdbus marshaling code:
dropping D-Bus from that app,
using D-Bus in point-to-point mode instead of through the bus daemon,
using D-Bus async instead of with round trips, or whatever.
Though anyone is of course welcome to optimize the libdbus marshaling code.
(This post was originally found at http://log.ometer.com/2006-07.html#21)