Commit 617c66b9 authored by Stefan Raspl's avatar Stefan Raspl Committed by Radim Krčmář

tools/kvm_stat: fix handling of invalid paths in debugfs provider

When filtering by guest, kvm_stat displays garbage when the guest is
destroyed - see sample output below.
We add code to remove the invalid paths from the providers, so at least
no more garbage is displayed.
Here's a sample output to illustrate:

  kvm statistics - pid 13986 (foo)

   Event                                         Total %Total CurAvg/s
   diagnose_258                                     -2    0.0        0
   deliver_program_interruption                     -3    0.0        0
   diagnose_308                                     -4    0.0        0
   halt_poll_invalid                               -91    0.0       -6
   deliver_service_signal                         -244    0.0      -16
   halt_successful_poll                           -250    0.1      -17
   exit_pei                                       -285    0.1      -19
   exit_external_request                          -312    0.1      -21
   diagnose_9c                                    -328    0.1      -22
   userspace_handled                              -713    0.1      -47
   halt_attempted_poll                            -939    0.2      -62
   deliver_emergency_signal                      -3126    0.6     -208
   halt_wakeup                                   -7199    1.5     -481
   exit_wait_state                               -7379    1.5     -493
   diagnose_500                                 -56499   11.5    -3757
   exit_null                                    -85491   17.4    -5685
   diagnose_44                                 -133300   27.1    -8874
   exit_instruction                            -195898   39.8   -13037
   Total                                       -492063
Signed-off-by: default avatarStefan Raspl <raspl@linux.vnet.ibm.com>
Signed-off-by: default avatarRadim Krčmář <rkrcmar@redhat.com>
parent 58f33cfe
...@@ -766,6 +766,13 @@ class DebugfsProvider(Provider): ...@@ -766,6 +766,13 @@ class DebugfsProvider(Provider):
self.do_read = True self.do_read = True
self.reset() self.reset()
def _verify_paths(self):
"""Remove invalid paths"""
for path in self.paths:
if not os.path.exists(os.path.join(PATH_DEBUGFS_KVM, path)):
self.paths.remove(path)
continue
def read(self, reset=0, by_guest=0): def read(self, reset=0, by_guest=0):
"""Returns a dict with format:'file name / field -> current value'. """Returns a dict with format:'file name / field -> current value'.
...@@ -780,6 +787,7 @@ class DebugfsProvider(Provider): ...@@ -780,6 +787,7 @@ class DebugfsProvider(Provider):
# If no debugfs filtering support is available, then don't read. # If no debugfs filtering support is available, then don't read.
if not self.do_read: if not self.do_read:
return results return results
self._verify_paths()
paths = self.paths paths = self.paths
if self._pid == 0: if self._pid == 0:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment