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(a)redhat.com>
+# Peter Krempa <pkrempa(a)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