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:
parent
0db8b31023
commit
29c39f38e4
|
@ -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' %
|
||||||
|
|
Loading…
Reference in New Issue