[libvirt] PATCH: Adjust way RPC calls are dispatched in libvirtd

Daniel Veillard veillard at redhat.com
Fri Oct 17 12:28:53 UTC 2008

On Fri, Oct 17, 2008 at 11:39:40AM +0100, Daniel P. Berrange wrote:
> Looking at the libvirtd objects with pfunct I knoticed that the method
> remoteDispatchClientRequest in remote.c was unusually large
>   size: 11497, variables: 169, inline expansions: 159 (5144 bytes)
> Listing variables present its clear why - for every RPC call, we have 
> a pair of local variables declared for the structs for the reply and
> response. Following by a memset() call for every single one.
> Any single call to this method only processes one RPC call, so I figured
> we could collapse all these variables down into a single pair by using
> a union for all args, and a union for all replies. 
> This patch does just that with the result that the method changes to:
>  /* size: 1386, variables: 10, inline expansions: 4 (89 bytes) */
> If you want to see details list of variables before and after results
> then run
>  $ pfunct -f remoteDispatchClientRequest libvirtd-remote.o 
> NB pfunct is in the 'dwarves' RPM, along with some other interesting
> tools like 'pahole'
> In doing this I noticed that the dispatch function is O(n) on the 
> number of RPC calls we have defined. This isn't a serious bottleneck
> since 'n' isn't very large, but while doing the refactoring for the
> union stuf, it was easy enough to also change it to declare an array
> of all the dispatch methods, which could simply be indexed on the 
> RPC call number. This changes it to O(1) time to dispatch.

  The patch tends to generate headaches, and I still can't grok perl,
but what I recognized looks fine, and the principles sounds good.


Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/

More information about the libvir-list mailing list