[Libvir] libvirt statistics

Eduardo Habkost ehabkost at redhat.com
Thu Sep 6 13:52:59 UTC 2007


Hi,

On Thu, Sep 06, 2007 at 02:10:39PM +0100, Richard W.M. Jones wrote:
> [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
<snip>

What is the second field here?


> 
> Structures with holes which could be made smaller by packaging (third 
> number is how many bytes you'd save per allocation):
> 
<snip>
> _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

Are those defined by libxml, or are they from the libvirt code?

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

12 parameters, wow!

> 
> All global variables (nothing wrong with global variables, I say):
> 
> extern unsigned int               __invalid_size_argument_for_IOC; /* 0 */

Doesn't seem to be from libvirt code.

> 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 */

Not many. The arrays smell like constant data, that wouldn't be
a Bad Thing being global. Some may be made static, however.


> extern struct _IO_FILE *          stderr; /* 9 */
> extern struct _IO_FILE *          stdin; /* 23 */
> extern struct _IO_FILE *          stdout; /* 23 */

System variables.


> enum /**/ virDrvOpenRemoteFlags; /* 0 */

I think this was supposed to be a type definition. The variable is
never used.

> struct xenUnifiedDriver    xenDaemonDriver; /* 1 */
> struct xenUnifiedDriver    xenHypervisorDriver; /* 1 */
> struct xenUnifiedDriver    xenProxyDriver; /* 1 */
> struct xenUnifiedDriver    xenStoreDriver; /* 1 */
> struct xenUnifiedDriver    xenXMDriver; /* 1 */

Those seem to work like "class" definitions, so they are not a Bad
Thing, too.

> extern xmlFreeFunc                xmlFree; /* 3 */
> extern xmlMallocFunc              xmlMalloc; /* 0 */

Not from libvirt code.

-- 
Eduardo
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20070906/cf34252d/attachment-0001.sig>


More information about the libvir-list mailing list