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

Peter Krempa pkrempa at redhat.com
Mon Sep 2 14:57:27 UTC 2013


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
-- 
1.8.3.2




More information about the libvir-list mailing list