[Libvir] libvirt statistics

Richard W.M. Jones rjones at redhat.com
Thu Sep 6 13:10:39 UTC 2007


[Using `pahole' and friends - see 
http://git.kernel.org/?p=linux/kernel/git/acme/pahole.git;a=summary and 
https://ols2006.108.redhat.com/2007/Reprints/melo-Reprint.pdf ]

These are all on x86-64.  You'll get slightly different results on a 32 
bit arch.

Largest structures, by size:

qemud_vm_def: 16608 4
qemud_vm_os_def: 16436 1
_testConn: 14504 2
qemud_vm: 12368 2
qemud_network: 8240 0
qemud_vm_disk_def: 4376 2
qemud_driver: 4192 1
qemud_vm_net_def: 4136 2
xenXMConfCache: 4112 0
_virProxyFullPacket: 4096 0
_xmlParserCtxt: 696 5
_virDriver: 432 1
utsname: 390 0
_testDom: 360 0
_xmlXPathContext: 352 4
xenUnifiedDriver: 328 0
dirent: 280 0
_xmlSAXHandler: 256 1
_IO_FILE: 216 2
_xenUnifiedPrivate: 192 1
qemud_network_def: 192 2
_xmlDoc: 168 2
_virConnect: 168 0
_testNet: 156 0

Structures with holes which could be made smaller by packaging (third 
number is how many bytes you'd save per allocation):

qemud_vm                         12368 12360     8
qemud_vm_def                     16608 16600     8
private_data                        56    48     8
remote_domain_get_info_ret          40    32     8
XDR                                 48    40     8
xen_v0_vcpuinfo                     40    32     8
_xmlValidCtxt                      112   104     8
_xmlEntity                         136   128     8
_xmlParserCtxt                     696   672    24
_testConn                        14504 14496     8
_xmlURI                             80    72     8
_xmlXPathObject                     72    56    16
_xmlXPathParserContext              80    72     8
_xmlXPathContext                   352   336    16
_xmlError                           88    80     8
_xmlAttr                            96    88     8
_xmlDoc                            168   160     8
_xmlNode                           120   112     8
_IO_FILE                           216   208     8
_virDomainInfo                      40    32     8

Longest functions (NB: long functions are not a bad thing -- read Steve 
McConnell).

qemudParseVMDef: 9680
doRemoteOpen: 6631
xenXMParseXMLToConfig: 5678
xenXMDomainFormatXML: 5678
xend_parse_sexp_desc: 5424
qemudBuildCommandLine: 5204
virDomainParseXMLDesc: 3503
qemudGenerateXML: 2556
__virErrorMsg: 2332
testOpenFromFile: 2210
call: 2206
qemudStartNetworkDaemon: 2105
virDomainParseXMLOSDescHVM: 2078
qemudParseNetworkDef: 2023
xenHypervisorMakeCapabilitiesXML: 1838
virDomainParseXMLDiskDesc: 1686
qemudStartVMDaemon: 1683
xenXMConfigCacheRefresh: 1547
xenXMParseXMLDisk: 1545
virConfParseValue: 1516
virConfParse: 1457
qemudScanConfigDir: 1396
testLoadNetwork: 1353
dhcpStartDhcpDaemon: 1259
virXen_getvcpusinfo: 1257
testLoadDomain: 1244
qemudDomainSave: 1194
virDomainParseXMLIfDesc: 1164
xenHypervisorInit: 1104
xenXMDomainDefineXML: 1083
iptablesAddRemoveRule: 1081
testOpen: 1075

Functions with the most variables (perhaps a better indicator of 
"complexity", I know that doRemoteOpen is a bloody complicated function 
for example):

xenXMDomainFormatXML: 18
virDomainParseXMLDesc: 18
doRemoteOpen: 18
testLoadDomain: 17
xenHypervisorMakeCapabilitiesXML: 16
testLoadNetwork: 15
xenXMParseXMLDisk: 14
xenStoreLookupByName: 13
xend_parse_sexp_desc: 13
virDomainParseXMLDiskDesc: 13
testOpenFromFile: 12
qemudBuildCommandLine: 12
xenStoreDomainGetNetworkID: 10
xenDaemonDomainGetVcpus: 10
virDomainParseXMLOSDescHVM: 10
qemudParseInterfaceXML: 10
xenXMParseXMLVif: 9
xenXMParseXMLToConfig: 9
xenXMDomainDefineXML: 9
query_parse: 9
iptablesAddRemoveRule: 9
xenStoreListDomains: 8
xenHypervisorLookupDomainByUUID: 8
xenHypervisorInit: 8
xenDaemonListDomainsOld: 8
virDomainParseXMLOSDescPV: 8
virDomainParseXMLIfDesc: 8
testNetworkDumpXML: 8
testDomainDumpXML: 8
qemudNetworkIfaceConnect: 8
qemudGenerateXML: 8
qemudDomainSave: 8

Functions with more than one "goto" label:

qemudAddIptablesRules: 10
doRemoteOpen: 4
xenDaemonOpen: 3
qemudStartNetworkDaemon: 3
qemudExtractVersionInfo: 3
xenXMDomainFormatXML: 2
xenHypervisorInit: 2
xend_parse_sexp_desc: 2
virParseXMLDevice: 2
__virGetNetwork: 2
__virGetDomain: 2
virDomainXMLDevID: 2
remoteForkDaemon: 2
query_parse: 2
qemudStartup: 2
qemudNetworkIfaceConnect: 2
qemudGenerateXML: 2
qemudBuildCommandLine: 2
negotiate_gnutls_on_connection: 2

Functions with the most parameters (in C these are dangerous because of 
C's lousy typechecking):

__virRaiseError: 12
xenXMConfigSetIntFromXPath: 8
xenUnifiedDomainMigratePrepare: 8
xenDaemonDomainMigratePrepare: 8
__virDomainMigratePrepare: 8
remoteDomainMigratePrepare: 8
qemudReadMonitorOutput: 8
call: 8
xenXMConfigSetStringFromXPath: 7
xenUnifiedDomainMigratePerform: 7
xenDaemonDomainMigratePerform: 7
_virExec: 7
__virDomainMigratePerform: 7
remoteDomainMigratePerform: 7
xenUnifiedDomainMigrateFinish: 6
xend_op_ext2: 6
virXen_getvcpusinfo: 6
virExecNonBlock: 6
virExec: 6
virDomainParseXMLOSDescHVM: 6
__virDomainMigrateFinish: 6
virDomainMigrate: 6
remoteDomainMigrateFinish: 6

All global variables (nothing wrong with global variables, I say):

extern unsigned int               __invalid_size_argument_for_IOC; /* 0 */
struct qemu_feature_flags  arch_info_i686_flags[4]; /* 0 */
struct qemu_feature_flags  arch_info_x86_64_flags[3]; /* 0 */
struct qemud_driver *      qemu_driver; /* 0 */
struct qemu_arch_info      qemudArchs[7]; /* 1 */
extern struct _IO_FILE *          stderr; /* 9 */
extern struct _IO_FILE *          stdin; /* 23 */
extern struct _IO_FILE *          stdout; /* 23 */
enum /**/ virDrvOpenRemoteFlags; /* 0 */
struct xenUnifiedDriver    xenDaemonDriver; /* 1 */
struct xenUnifiedDriver    xenHypervisorDriver; /* 1 */
struct xenUnifiedDriver    xenProxyDriver; /* 1 */
struct xenUnifiedDriver    xenStoreDriver; /* 1 */
struct xenUnifiedDriver    xenXMDriver; /* 1 */
extern xmlFreeFunc                xmlFree; /* 3 */
extern xmlMallocFunc              xmlMalloc; /* 0 */

Rich.

-- 
Emerging Technologies, Red Hat - http://et.redhat.com/~rjones/
Registered Address: Red Hat UK Ltd, Amberley Place, 107-111 Peascod
Street, Windsor, Berkshire, SL4 1TE, United Kingdom.  Registered in
England and Wales under Company Registration No. 03798903
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 3237 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20070906/a933ef63/attachment-0001.bin>


More information about the libvir-list mailing list