tools/kvm_stat: handle guest removals more gracefully

When running with the DebugFS provider, removal of a guest can result in a
negative CurAvg/s, which looks rather confusing.
If so, suppress the body refresh and print a message instead.
To reproduce, have at least one guest A completely booted. Then start
another guest B (which generates a huge amount of events), then destroy B.
On the next refresh, kvm_stat should display a whole lot of negative values
in the CurAvg/s column.

Signed-off-by: Stefan Raspl <raspl@linux.ibm.com>
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
This commit is contained in:
Stefan Raspl 2018-08-24 14:03:59 +02:00 committed by Radim Krčmář
parent 0db8b31023
commit 29c39f38e4
1 changed files with 9 additions and 2 deletions

View File

@ -1194,6 +1194,7 @@ class Tui(object):
# print events # print events
tavg = 0 tavg = 0
tcur = 0 tcur = 0
guest_removed = False
for key, values in get_sorted_events(self, stats): for key, values in get_sorted_events(self, stats):
if row >= self.screen.getmaxyx()[0] - 1 or values == (0, 0): if row >= self.screen.getmaxyx()[0] - 1 or values == (0, 0):
break break
@ -1201,7 +1202,10 @@ class Tui(object):
key = self.get_gname_from_pid(key) key = self.get_gname_from_pid(key)
if not key: if not key:
continue continue
cur = int(round(values.delta / sleeptime)) if values.delta else '' cur = int(round(values.delta / sleeptime)) if values.delta else 0
if cur < 0:
guest_removed = True
continue
if key[0] != ' ': if key[0] != ' ':
if values.delta: if values.delta:
tcur += values.delta tcur += values.delta
@ -1214,7 +1218,10 @@ class Tui(object):
values.value * 100 / float(ltotal), cur)) values.value * 100 / float(ltotal), cur))
row += 1 row += 1
if row == 3: if row == 3:
self.screen.addstr(4, 1, 'No matching events reported yet') if guest_removed:
self.screen.addstr(4, 1, 'Guest removed, updating...')
else:
self.screen.addstr(4, 1, 'No matching events reported yet')
if row > 4: if row > 4:
tavg = int(round(tcur / sleeptime)) if tcur > 0 else '' tavg = int(round(tcur / sleeptime)) if tcur > 0 else ''
self.screen.addstr(row, 1, '%-40s %10d %8s' % self.screen.addstr(row, 1, '%-40s %10d %8s' %