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@xxxxxxxxxx> +# Peter Krempa <pkrempa@xxxxxxxxxx> + +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 -- 1.8.3.2 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list