[libvirt] [PATCH] examples: Add script to parse topology from capabilities output

Martin Kletzander mkletzan at redhat.com
Tue Sep 3 09:15:16 UTC 2013


On 09/02/2013 04:57 PM, Peter Krempa wrote:
> Add a demo script originally written by Amador Pahim to parse topology
> of the host from data provided in the capabilities XML.
> ---
>  examples/python/topology.py | 45 +++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 45 insertions(+)
>  create mode 100755 examples/python/topology.py
> 
> diff --git a/examples/python/topology.py b/examples/python/topology.py
> new file mode 100755
> index 0000000..1b678bc
> --- /dev/null
> +++ b/examples/python/topology.py
> @@ -0,0 +1,45 @@
> +#!/usr/bin/env python
> +# Parse topology information from the capabilities XML and use
> +# them to calculate host topology
> +#
> +# Authors:
> +#   Amador Pahim <apahim at redhat.com>
> +#   Peter Krempa <pkrempa at redhat.com>
> +
> +import libvirt
> +import sys
> +from xml.dom import minidom
> +
> +try:
> +    conn = libvirt.openReadOnly(None)
> +except libvirt.libvirtError:
> +    print 'Failed to connect to the hypervisor'
> +    sys.exit(1)
> +
> +try:
> +    capsXML = conn.getCapabilities()
> +except libvirt.libvirtError:
> +    print 'Failed to request capabilities'
> +    sys.exit(1)
> +
> +caps = minidom.parseString(capsXML)
> +host = caps.getElementsByTagName('host')[0]
> +cells = host.getElementsByTagName('cells')[0]
> +total_cpus = cells.getElementsByTagName('cpu').length
> +
> +socketIds = []
> +siblingsIds = []
> +
> +socketIds = [ proc.getAttribute('socket_id')
> +              for proc in cells.getElementsByTagName('cpu')
> +              if proc.getAttribute('socket_id') not in socketIds ]
> +
> +siblingsIds = [ proc.getAttribute('siblings')
> +                for proc in cells.getElementsByTagName('cpu')
> +                if proc.getAttribute('siblings') not in siblingsIds ]
> +
> +print "Host topology"
> +print "NUMA nodes:", cells.getAttribute('num')
> +print "   Sockets:",len(set(socketIds))
> +print "     Cores:",len(set(siblingsIds))
> +print "   Threads:",total_cpus
> 

I won't get into details like len() vs. .length, string formatting, etc.
;-)  But please add a space after these commas.

Even though I don't know how this will turn out on those weird
multi-processor per core and similar architectures/processors, it should
turn out OK since you're the one who should know how those will look in
the capabilities XML.

It would be also worth adding it into specfile like other python
examples (I'm guessing those are in libvirt-python).

ACK with those two things fixed,
Martin




More information about the libvir-list mailing list