Blame SOURCES/kvm-tools-kvm_stat-add-new-command-line-switch-i.patch

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