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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 all makes sense, but ...

[...]
> 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.

Which part is O(n)?  If you mean the switch statement, then gcc should
be able to turn this into an array lookup, computed goto or whatever
is most efficient.

Anyhow, +1 for the patch.

Rich.

-- 
Richard Jones, Emerging Technologies, Red Hat  http://et.redhat.com/~rjones
virt-p2v converts physical machines to virtual machines.  Boot with a
live CD or over the network (PXE) and turn machines into Xen guests.
http://et.redhat.com/~rjones/virt-p2v

--
Libvir-list mailing list
Libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list

[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]