Skip to content

Commit

Permalink
tools/kvm_stat: add command line switch '-s' to set update interval
Browse files Browse the repository at this point in the history
This now controls both, the refresh rate of the interactive mode as well
as the logging mode. Which, as a consequence, means that the default of
logging mode is now 3s, too (use command line switch '-s' to adjust to
your liking).

Signed-off-by: Stefan Raspl <raspl@linux.ibm.com>
Message-Id: <20200306114250.57585-4-raspl@linux.ibm.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  • Loading branch information
Stefan Raspl authored and bonzini committed Mar 23, 2020
1 parent 0e6618f commit 3cbb394
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 12 deletions.
46 changes: 34 additions & 12 deletions tools/kvm/kvm_stat/kvm_stat
Original file line number Diff line number Diff line change
Expand Up @@ -974,15 +974,17 @@ DELAY_DEFAULT = 3.0
MAX_GUEST_NAME_LEN = 48
MAX_REGEX_LEN = 44
SORT_DEFAULT = 0
MIN_DELAY = 0.1
MAX_DELAY = 25.5


class Tui(object):
"""Instruments curses to draw a nice text ui."""
def __init__(self, stats):
def __init__(self, stats, opts):
self.stats = stats
self.screen = None
self._delay_initial = 0.25
self._delay_regular = DELAY_DEFAULT
self._delay_regular = opts.set_delay
self._sorting = SORT_DEFAULT
self._display_guests = 0

Expand Down Expand Up @@ -1282,7 +1284,8 @@ class Tui(object):
' p filter by guest name/PID',
' q quit',
' r reset stats',
' s set update interval',
' s set delay between refreshs (value range: '
'%s-%s secs)' % (MIN_DELAY, MAX_DELAY),
' x toggle reporting of stats for individual child trace'
' events',
'Any other key refreshes statistics immediately')
Expand Down Expand Up @@ -1348,11 +1351,9 @@ class Tui(object):
try:
if len(val) > 0:
delay = float(val)
if delay < 0.1:
msg = '"' + str(val) + '": Value must be >=0.1'
continue
if delay > 25.5:
msg = '"' + str(val) + '": Value must be <=25.5'
err = is_delay_valid(delay)
if err is not None:
msg = err
continue
else:
delay = DELAY_DEFAULT
Expand Down Expand Up @@ -1488,7 +1489,7 @@ def batch(stats):
pass


def log(stats):
def log(stats, opts):
"""Prints statistics as reiterating key block, multiple value blocks."""
keys = sorted(stats.get().keys())

Expand All @@ -1506,7 +1507,7 @@ def log(stats):
banner_repeat = 20
while True:
try:
time.sleep(1)
time.sleep(opts.set_delay)
if line % banner_repeat == 0:
banner()
statline()
Expand All @@ -1515,6 +1516,16 @@ def log(stats):
break


def is_delay_valid(delay):
"""Verify delay is in valid value range."""
msg = None
if delay < MIN_DELAY:
msg = '"' + str(delay) + '": Delay must be >=%s' % MIN_DELAY
if delay > MAX_DELAY:
msg = '"' + str(delay) + '": Delay must be <=%s' % MAX_DELAY
return msg


def get_options():
"""Returns processed program arguments."""
description_text = """
Expand Down Expand Up @@ -1604,6 +1615,13 @@ Press any other key to refresh statistics immediately.
default=0,
help='restrict statistics to pid',
)
argparser.add_argument('-s', '--set-delay',
type=float,
default=DELAY_DEFAULT,
metavar='DELAY',
help='set delay between refreshs (value range: '
'%s-%s secs)' % (MIN_DELAY, MAX_DELAY),
)
argparser.add_argument('-t', '--tracepoints',
action='store_true',
default=False,
Expand Down Expand Up @@ -1675,6 +1693,10 @@ def main():
sys.stderr.write('Did you use a (unsupported) tid instead of a pid?\n')
sys.exit('Specified pid does not exist.')

err = is_delay_valid(options.set_delay)
if err is not None:
sys.exit('Error: ' + err)

stats = Stats(options)

if options.fields == 'help':
Expand All @@ -1686,9 +1708,9 @@ def main():
sys.exit(0)

if options.log:
log(stats)
log(stats, options)
elif not options.once:
with Tui(stats) as tui:
with Tui(stats, options) as tui:
tui.show_stats()
else:
batch(stats)
Expand Down
4 changes: 4 additions & 0 deletions tools/kvm/kvm_stat/kvm_stat.txt
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,10 @@ OPTIONS
--pid=<pid>::
limit statistics to one virtual machine (pid)

-s::
--set-delay::
set delay between refreshs (value range: 0.1-25.5 secs)

-t::
--tracepoints::
retrieve statistics from tracepoints
Expand Down

0 comments on commit 3cbb394

Please sign in to comment.