[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-block] [PATCH v2 2/3] scripts: add render_block_graph function

From: Vladimir Sementsov-Ogievskiy
Subject: Re: [Qemu-block] [PATCH v2 2/3] scripts: add render_block_graph function for QEMUMachine
Date: Fri, 17 Aug 2018 21:59:41 +0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0

17.08.2018 21:25, Eduardo Habkost wrote:
On Fri, Aug 17, 2018 at 09:04:39PM +0300, Vladimir Sementsov-Ogievskiy wrote:
Render block nodes graph with help of graphviz. This new function is
for debugging, so there is no sense to put it into qemu.py as a method
of QEMUMachine. Let's instead put it separately.

Signed-off-by: Vladimir Sementsov-Ogievskiy <address@hidden>
  scripts/render_block_graph.py | 78 +++++++++++++++++++++++++++++++++++++++++++
  1 file changed, 78 insertions(+)
  create mode 100644 scripts/render_block_graph.py

diff --git a/scripts/render_block_graph.py b/scripts/render_block_graph.py
new file mode 100644
index 0000000000..7048a0bac8
--- /dev/null
+++ b/scripts/render_block_graph.py
@@ -0,0 +1,78 @@
+# Render Qemu Block Graph

What about making the script work from the command-line?

Signed-off-by: Eduardo Habkost <address@hidden>
diff --git a/scripts/render_block_graph.py b/scripts/render_block_graph.py
old mode 100644
new mode 100755
index 7048a0bac8..e29fe0fc41
--- a/scripts/render_block_graph.py
+++ b/scripts/render_block_graph.py
@@ -1,3 +1,4 @@
+#!/usr/bin/env python
  # Render Qemu Block Graph
  # Copyright (c) 2017 Parallels International GmbH
@@ -16,8 +17,9 @@
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
-import os
+import os, sys
  from graphviz import Digraph
+from qmp.qmp import QEMUMonitorProtocol
def perm(arr):
      s = 'w' if 'write' in arr else '_'
@@ -27,16 +29,16 @@ def perm(arr):
      s += 's' if 'resize' in arr else '_'
      return s
-def render_block_graph(vm, filename, pointers=False, format='png'):
+def render_block_graph(qmp, filename, pointers=False, format='png'):
      Render graph in text (dot) representation into "@filename" and
      representation in @format into "@address@hidden"
- nodes = vm.command('query-named-block-nodes')
+    nodes = qmp.command('query-named-block-nodes')
      nodes_info = {n['node-name']: n for n in nodes}
- block_graph = vm.command('x-query-block-graph')
+    block_graph = qmp.command('x-query-block-graph')
graph = Digraph(comment='Block Nodes Graph')
      graph.format = format
@@ -76,3 +78,9 @@ def render_block_graph(vm, filename, pointers=False, 
          graph.edge(str(e['parent']), str(e['child']), label=label)
+if __name__ == '__main__':
+    #TODO: use argparse for command-line arguments
+    qmp = QEMUMonitorProtocol(sys.argv[1])
+    qmp.connect()
+    render_block_graph(qmp, sys.argv[2])

Cool, thanks.

so, how to use it then?

for python iotest a proper parameter would be vm._qmp, yes?

is there a way to dump running libvirt vm graph?

I've started libvirt guest, qemu process has cmdline parameters
-chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-3-tmp/monitor.sock,server,nowait
-mon chardev=charmonitor,id=monitor,mode=control

virsh qemu-monitor-command tmp '{"execute": "x-query-block-graph"}'
works fine,

but script hangs on connection:
# python ./scripts/render_block_graph.py /var/lib/libvirt/qemu/domain-3-tmp/monitor.sock
^CTraceback (most recent call last):
  File "./scripts/render_block_graph.py", line 85, in <module>
  File "/work/src/qemu/up-new-fleecing/scripts/qmp/qmp.py", line 140, in connect
  File "/usr/lib64/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)

./scripts/qmp/qmp-shell /var/lib/libvirt/qemu/domain-3-tmp/monitor.sock
outputs nothing...

Best regards,

reply via email to

[Prev in Thread] Current Thread [Next in Thread]