|
|
4a2fec |
From 72f660ddfca081d8a3124e30b0d55f2be06965bc Mon Sep 17 00:00:00 2001
|
|
|
4a2fec |
From: David Hildenbrand <david@redhat.com>
|
|
|
4a2fec |
Date: Tue, 17 Oct 2017 19:16:02 +0200
|
|
|
4a2fec |
Subject: [PATCH 57/69] tools/kvm_stat: add new command line switch '-i'
|
|
|
4a2fec |
|
|
|
4a2fec |
RH-Author: David Hildenbrand <david@redhat.com>
|
|
|
4a2fec |
Message-id: <20171017191605.2378-37-david@redhat.com>
|
|
|
4a2fec |
Patchwork-id: 77348
|
|
|
4a2fec |
O-Subject: [RHEL-7.5 qemu-kvm-rhev PATCH 36/39] tools/kvm_stat: add new command line switch '-i'
|
|
|
4a2fec |
Bugzilla: 1497137
|
|
|
4a2fec |
RH-Acked-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
|
4a2fec |
RH-Acked-by: Cornelia Huck <cohuck@redhat.com>
|
|
|
4a2fec |
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
|
|
|
4a2fec |
RH-Acked-by: Thomas Huth <thuth@redhat.com>
|
|
|
4a2fec |
|
|
|
4a2fec |
Upstream-status: linux.git ab7ef193fab628fc5da6fd4f4672ffd0d1bb53df
|
|
|
4a2fec |
|
|
|
4a2fec |
Convertion of documentation (for man page generation) to texi.
|
|
|
4a2fec |
|
|
|
4a2fec |
commit ab7ef193fab628fc5da6fd4f4672ffd0d1bb53df
|
|
|
4a2fec |
Author: Stefan Raspl <raspl@linux.vnet.ibm.com>
|
|
|
4a2fec |
Date: Sun Jun 25 21:34:15 2017 +0200
|
|
|
4a2fec |
|
|
|
4a2fec |
tools/kvm_stat: add new command line switch '-i'
|
|
|
4a2fec |
|
|
|
4a2fec |
It might be handy to display the full history of event stats to compare
|
|
|
4a2fec |
the current event distribution against any available historic data.
|
|
|
4a2fec |
Since we have that available for debugfs, we offer a respective command
|
|
|
4a2fec |
line option to display what's available.
|
|
|
4a2fec |
|
|
|
4a2fec |
Signed-off-by: Stefan Raspl <raspl@linux.vnet.ibm.com>
|
|
|
4a2fec |
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
|
4a2fec |
|
|
|
4a2fec |
Signed-off-by: David Hildenbrand <david@redhat.com>
|
|
|
4a2fec |
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
4a2fec |
---
|
|
|
4a2fec |
scripts/kvm/kvm_stat | 34 ++++++++++++++++++++++++++++++----
|
|
|
4a2fec |
scripts/kvm/kvm_stat.texi | 2 ++
|
|
|
4a2fec |
2 files changed, 32 insertions(+), 4 deletions(-)
|
|
|
4a2fec |
|
|
|
4a2fec |
diff --git a/scripts/kvm/kvm_stat b/scripts/kvm/kvm_stat
|
|
|
4a2fec |
index 39476e5..4065b29 100755
|
|
|
4a2fec |
--- a/scripts/kvm/kvm_stat
|
|
|
4a2fec |
+++ b/scripts/kvm/kvm_stat
|
|
|
4a2fec |
@@ -681,12 +681,14 @@ class TracepointProvider(Provider):
|
|
|
4a2fec |
class DebugfsProvider(Provider):
|
|
|
4a2fec |
"""Provides data from the files that KVM creates in the kvm debugfs
|
|
|
4a2fec |
folder."""
|
|
|
4a2fec |
- def __init__(self, pid, fields_filter):
|
|
|
4a2fec |
+ def __init__(self, pid, fields_filter, include_past):
|
|
|
4a2fec |
self.update_fields(fields_filter)
|
|
|
4a2fec |
self._baseline = {}
|
|
|
4a2fec |
self.do_read = True
|
|
|
4a2fec |
self.paths = []
|
|
|
4a2fec |
self.pid = pid
|
|
|
4a2fec |
+ if include_past:
|
|
|
4a2fec |
+ self.restore()
|
|
|
4a2fec |
|
|
|
4a2fec |
def get_available_fields(self):
|
|
|
4a2fec |
""""Returns a list of available fields.
|
|
|
4a2fec |
@@ -730,7 +732,14 @@ class DebugfsProvider(Provider):
|
|
|
4a2fec |
self.reset()
|
|
|
4a2fec |
|
|
|
4a2fec |
def read(self, reset=0):
|
|
|
4a2fec |
- """Returns a dict with format:'file name / field -> current value'."""
|
|
|
4a2fec |
+ """Returns a dict with format:'file name / field -> current value'.
|
|
|
4a2fec |
+
|
|
|
4a2fec |
+ Parameter 'reset':
|
|
|
4a2fec |
+ 0 plain read
|
|
|
4a2fec |
+ 1 reset field counts to 0
|
|
|
4a2fec |
+ 2 restore the original field counts
|
|
|
4a2fec |
+
|
|
|
4a2fec |
+ """
|
|
|
4a2fec |
results = {}
|
|
|
4a2fec |
|
|
|
4a2fec |
# If no debugfs filtering support is available, then don't read.
|
|
|
4a2fec |
@@ -747,8 +756,10 @@ class DebugfsProvider(Provider):
|
|
|
4a2fec |
for field in self._fields:
|
|
|
4a2fec |
value = self.read_field(field, path)
|
|
|
4a2fec |
key = path + field
|
|
|
4a2fec |
- if reset:
|
|
|
4a2fec |
+ if reset == 1:
|
|
|
4a2fec |
self._baseline[key] = value
|
|
|
4a2fec |
+ if reset == 2:
|
|
|
4a2fec |
+ self._baseline[key] = 0
|
|
|
4a2fec |
if self._baseline.get(key, -1) == -1:
|
|
|
4a2fec |
self._baseline[key] = value
|
|
|
4a2fec |
results[field] = (results.get(field, 0) + value -
|
|
|
4a2fec |
@@ -771,6 +782,11 @@ class DebugfsProvider(Provider):
|
|
|
4a2fec |
self._baseline = {}
|
|
|
4a2fec |
self.read(1)
|
|
|
4a2fec |
|
|
|
4a2fec |
+ def restore(self):
|
|
|
4a2fec |
+ """Reset field counters"""
|
|
|
4a2fec |
+ self._baseline = {}
|
|
|
4a2fec |
+ self.read(2)
|
|
|
4a2fec |
+
|
|
|
4a2fec |
|
|
|
4a2fec |
class Stats(object):
|
|
|
4a2fec |
"""Manages the data providers and the data they provide.
|
|
|
4a2fec |
@@ -791,7 +807,8 @@ class Stats(object):
|
|
|
4a2fec |
providers = []
|
|
|
4a2fec |
|
|
|
4a2fec |
if options.debugfs:
|
|
|
4a2fec |
- providers.append(DebugfsProvider(options.pid, options.fields))
|
|
|
4a2fec |
+ providers.append(DebugfsProvider(options.pid, options.fields,
|
|
|
4a2fec |
+ options.dbgfs_include_past))
|
|
|
4a2fec |
if options.tracepoints or not providers:
|
|
|
4a2fec |
providers.append(TracepointProvider(options.pid, options.fields))
|
|
|
4a2fec |
|
|
|
4a2fec |
@@ -1270,6 +1287,8 @@ class Tui(object):
|
|
|
4a2fec |
sleeptime = self._delay_initial
|
|
|
4a2fec |
if char == 'x':
|
|
|
4a2fec |
self.update_drilldown()
|
|
|
4a2fec |
+ # prevents display of current values on next refresh
|
|
|
4a2fec |
+ self.stats.get()
|
|
|
4a2fec |
except KeyboardInterrupt:
|
|
|
4a2fec |
break
|
|
|
4a2fec |
except curses.error:
|
|
|
4a2fec |
@@ -1381,6 +1400,13 @@ Press any other key to refresh statistics immediately.
|
|
|
4a2fec |
dest='once',
|
|
|
4a2fec |
help='run in batch mode for one second',
|
|
|
4a2fec |
)
|
|
|
4a2fec |
+ optparser.add_option('-i', '--debugfs-include-past',
|
|
|
4a2fec |
+ action='store_true',
|
|
|
4a2fec |
+ default=False,
|
|
|
4a2fec |
+ dest='dbgfs_include_past',
|
|
|
4a2fec |
+ help='include all available data on past events for '
|
|
|
4a2fec |
+ 'debugfs',
|
|
|
4a2fec |
+ )
|
|
|
4a2fec |
optparser.add_option('-l', '--log',
|
|
|
4a2fec |
action='store_true',
|
|
|
4a2fec |
default=False,
|
|
|
4a2fec |
diff --git a/scripts/kvm/kvm_stat.texi b/scripts/kvm/kvm_stat.texi
|
|
|
4a2fec |
index 68d5024..b0e282a 100644
|
|
|
4a2fec |
--- a/scripts/kvm/kvm_stat.texi
|
|
|
4a2fec |
+++ b/scripts/kvm/kvm_stat.texi
|
|
|
4a2fec |
@@ -73,6 +73,8 @@ Press any other key to refresh statistics immediately.
|
|
|
4a2fec |
retrieve statistics from debugfs
|
|
|
4a2fec |
@item -p, --pid=@var{pid}
|
|
|
4a2fec |
limit statistics to one virtual machine (pid)
|
|
|
4a2fec |
+@item -i, --debugfs-include-past
|
|
|
4a2fec |
+ include all available data on past events for debugfs
|
|
|
4a2fec |
@item -g, --guest=@var{guest_name}
|
|
|
4a2fec |
limit statistics to one virtual machine (guest name)
|
|
|
4a2fec |
@item -f, --fields=@var{fields}
|
|
|
4a2fec |
--
|
|
|
4a2fec |
1.8.3.1
|
|
|
4a2fec |
|