|
|
9bac43 |
From 3e1d2fc34c6ff536cfcc2787a98e579ff31550b1 Mon Sep 17 00:00:00 2001
|
|
|
9bac43 |
From: David Hildenbrand <david@redhat.com>
|
|
|
9bac43 |
Date: Tue, 17 Oct 2017 19:15:35 +0200
|
|
|
9bac43 |
Subject: [PATCH 30/69] tools/kvm_stat: display guest name when using pid
|
|
|
9bac43 |
filter
|
|
|
9bac43 |
MIME-Version: 1.0
|
|
|
9bac43 |
Content-Type: text/plain; charset=UTF-8
|
|
|
9bac43 |
Content-Transfer-Encoding: 8bit
|
|
|
9bac43 |
|
|
|
9bac43 |
RH-Author: David Hildenbrand <david@redhat.com>
|
|
|
9bac43 |
Message-id: <20171017191605.2378-10-david@redhat.com>
|
|
|
9bac43 |
Patchwork-id: 77317
|
|
|
9bac43 |
O-Subject: [RHEL-7.5 qemu-kvm-rhev PATCH 09/39] tools/kvm_stat: display guest name when using pid filter
|
|
|
9bac43 |
Bugzilla: 1497137
|
|
|
9bac43 |
RH-Acked-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
|
9bac43 |
RH-Acked-by: Cornelia Huck <cohuck@redhat.com>
|
|
|
9bac43 |
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
|
|
|
9bac43 |
RH-Acked-by: Thomas Huth <thuth@redhat.com>
|
|
|
9bac43 |
|
|
|
9bac43 |
Upstream-status: linux.git a24e85f6a69f09a9d09a86110a6bb168c60610ef
|
|
|
9bac43 |
|
|
|
9bac43 |
commit a24e85f6a69f09a9d09a86110a6bb168c60610ef
|
|
|
9bac43 |
Author: Stefan Raspl <raspl@linux.vnet.ibm.com>
|
|
|
9bac43 |
Date: Fri Mar 10 13:40:08 2017 +0100
|
|
|
9bac43 |
|
|
|
9bac43 |
tools/kvm_stat: display guest name when using pid filter
|
|
|
9bac43 |
|
|
|
9bac43 |
When running kvm_stat with option '-p' to filter per process, display
|
|
|
9bac43 |
the QEMU guest name next to the pid, if available.
|
|
|
9bac43 |
|
|
|
9bac43 |
Signed-off-by: Stefan Raspl <raspl@linux.vnet.ibm.com>
|
|
|
9bac43 |
Reviewed-By: Janosch Frank <frankja@linux.vnet.ibm.com>
|
|
|
9bac43 |
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
|
|
|
9bac43 |
|
|
|
9bac43 |
Signed-off-by: David Hildenbrand <david@redhat.com>
|
|
|
9bac43 |
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
9bac43 |
---
|
|
|
9bac43 |
scripts/kvm/kvm_stat | 41 +++++++++++++++++++++++++++++++++++++++--
|
|
|
9bac43 |
1 file changed, 39 insertions(+), 2 deletions(-)
|
|
|
9bac43 |
|
|
|
9bac43 |
diff --git a/scripts/kvm/kvm_stat b/scripts/kvm/kvm_stat
|
|
|
9bac43 |
index aca8508..95ffa9a 100755
|
|
|
9bac43 |
--- a/scripts/kvm/kvm_stat
|
|
|
9bac43 |
+++ b/scripts/kvm/kvm_stat
|
|
|
9bac43 |
@@ -320,6 +320,37 @@ def parse_int_list(list_string):
|
|
|
9bac43 |
return integers
|
|
|
9bac43 |
|
|
|
9bac43 |
|
|
|
9bac43 |
+def get_gname_from_pid(pid):
|
|
|
9bac43 |
+ """Returns the guest name for a QEMU process pid.
|
|
|
9bac43 |
+
|
|
|
9bac43 |
+ Extracts the guest name from the QEMU comma line by processing the '-name'
|
|
|
9bac43 |
+ option. Will also handle names specified out of sequence.
|
|
|
9bac43 |
+
|
|
|
9bac43 |
+ """
|
|
|
9bac43 |
+ name = ''
|
|
|
9bac43 |
+ try:
|
|
|
9bac43 |
+ line = open('/proc/{}/cmdline'.format(pid), 'rb').read().split('\0')
|
|
|
9bac43 |
+ parms = line[line.index('-name') + 1].split(',')
|
|
|
9bac43 |
+ while '' in parms:
|
|
|
9bac43 |
+ # commas are escaped (i.e. ',,'), hence e.g. 'foo,bar' results in
|
|
|
9bac43 |
+ # ['foo', '', 'bar'], which we revert here
|
|
|
9bac43 |
+ idx = parms.index('')
|
|
|
9bac43 |
+ parms[idx - 1] += ',' + parms[idx + 1]
|
|
|
9bac43 |
+ del parms[idx:idx+2]
|
|
|
9bac43 |
+ # the '-name' switch allows for two ways to specify the guest name,
|
|
|
9bac43 |
+ # where the plain name overrides the name specified via 'guest='
|
|
|
9bac43 |
+ for arg in parms:
|
|
|
9bac43 |
+ if '=' not in arg:
|
|
|
9bac43 |
+ name = arg
|
|
|
9bac43 |
+ break
|
|
|
9bac43 |
+ if arg[:6] == 'guest=':
|
|
|
9bac43 |
+ name = arg[6:]
|
|
|
9bac43 |
+ except (ValueError, IOError, IndexError):
|
|
|
9bac43 |
+ pass
|
|
|
9bac43 |
+
|
|
|
9bac43 |
+ return name
|
|
|
9bac43 |
+
|
|
|
9bac43 |
+
|
|
|
9bac43 |
def get_online_cpus():
|
|
|
9bac43 |
"""Returns a list of cpu id integers."""
|
|
|
9bac43 |
with open('/sys/devices/system/cpu/online') as cpu_list:
|
|
|
9bac43 |
@@ -803,6 +834,7 @@ LABEL_WIDTH = 40
|
|
|
9bac43 |
NUMBER_WIDTH = 10
|
|
|
9bac43 |
DELAY_INITIAL = 0.25
|
|
|
9bac43 |
DELAY_REGULAR = 3.0
|
|
|
9bac43 |
+MAX_GUEST_NAME_LEN = 48
|
|
|
9bac43 |
|
|
|
9bac43 |
|
|
|
9bac43 |
class Tui(object):
|
|
|
9bac43 |
@@ -863,9 +895,14 @@ class Tui(object):
|
|
|
9bac43 |
if pid is None:
|
|
|
9bac43 |
pid = self.stats.pid_filter
|
|
|
9bac43 |
self.screen.erase()
|
|
|
9bac43 |
+ gname = get_gname_from_pid(pid)
|
|
|
9bac43 |
+ if gname:
|
|
|
9bac43 |
+ gname = ('({})'.format(gname[:MAX_GUEST_NAME_LEN] + '...'
|
|
|
9bac43 |
+ if len(gname) > MAX_GUEST_NAME_LEN
|
|
|
9bac43 |
+ else gname))
|
|
|
9bac43 |
if pid > 0:
|
|
|
9bac43 |
- self.screen.addstr(0, 0, 'kvm statistics - pid {0}'
|
|
|
9bac43 |
- .format(pid), curses.A_BOLD)
|
|
|
9bac43 |
+ self.screen.addstr(0, 0, 'kvm statistics - pid {0} {1}'
|
|
|
9bac43 |
+ .format(pid, gname), curses.A_BOLD)
|
|
|
9bac43 |
else:
|
|
|
9bac43 |
self.screen.addstr(0, 0, 'kvm statistics - summary', curses.A_BOLD)
|
|
|
9bac43 |
self.screen.addstr(2, 1, 'Event')
|
|
|
9bac43 |
--
|
|
|
9bac43 |
1.8.3.1
|
|
|
9bac43 |
|