mirror of
https://github.com/flatcar/scripts.git
synced 2025-09-24 07:01:13 +02:00
This change is made in anticipation of needing more than one kind of reader in future. Most notably, a reader to extract data from the MySQL results database would be a nice addition. BUG=None TEST=run showbootdata on any pre-existing data set Change-Id: I5811aa1427a2714ce6ba392cdec584b4236162fd Reviewed-on: http://gerrit.chromium.org/gerrit/2644 Reviewed-by: Mike Truty <truty@chromium.org> Tested-by: Richard Barnette <jrbarnette@chromium.org>
140 lines
4.6 KiB
Python
Executable File
140 lines
4.6 KiB
Python
Executable File
#!/usr/bin/python
|
|
|
|
# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
"""A command to display summary statistics from runs of 'bootperf'.
|
|
|
|
Command line options allow selecting from one of two sets of
|
|
performance statistics: The boot time statistics (selected by
|
|
--timestats) measure time spent from kernel startup in milliseconds.
|
|
The disk statistics (selected by --diskstats) measure total bytes
|
|
read from the boot device since kernel startup.
|
|
|
|
Boot time statistics are recorded as cumulative time (or disk read)
|
|
since kernel startup, measured when specific events occur during
|
|
boot. Events include such things as 'startup', the moment when the
|
|
upstart 'startup' job begins running, and 'login', when the
|
|
Chrome OS login screen is displayed. By default, all recorded events
|
|
are included in the output; command line options allow restricting
|
|
the view to a selected subset of events.
|
|
|
|
Separate command line options allow selecting from one of two
|
|
different display modes. When --averages is selected, the display
|
|
shows the average value and sample standard deviation (as a percent
|
|
of the average) for all selected events. The --averages display also
|
|
calculates the time (or bytes) between adjacent events, and shows
|
|
the avearage and sample standard deviation of the differences.
|
|
|
|
The --rawdata display shows the raw data value associated with each
|
|
event for each boot: Each line of output represents the event values
|
|
for one boot cycle.
|
|
|
|
"""
|
|
|
|
import sys
|
|
import optparse
|
|
|
|
import resultsdir
|
|
import perfprinter
|
|
|
|
|
|
_USAGE = "%prog [options] [results-directory ...]"
|
|
_DESCRIPTION = """\
|
|
Summarize boot time performance results. The result directory
|
|
arguments are directories previously specified as output for the
|
|
'bootperf' script.
|
|
"""
|
|
|
|
|
|
def _SetupOptions():
|
|
optparser = optparse.OptionParser(usage=_USAGE, description=_DESCRIPTION)
|
|
|
|
optgroup = optparse.OptionGroup(
|
|
optparser, "Selecting boot time or disk statistics (choose one)")
|
|
optgroup.add_option(
|
|
"-t", "--timestats", action="store_true",
|
|
dest="use_timestats",
|
|
help="use statistics for time since kernel startup (default)")
|
|
optgroup.add_option(
|
|
"-d", "--diskstats", action="store_true",
|
|
dest="use_diskstats",
|
|
help="use statistics for bytes read since kernel startup")
|
|
optparser.add_option_group(optgroup)
|
|
optparser.set_defaults(use_diskstats=False)
|
|
optparser.set_defaults(use_timestats=False)
|
|
|
|
optgroup = optparse.OptionGroup(optparser, "Event selection")
|
|
optgroup.add_option(
|
|
"-e", "--event", action="append",
|
|
dest="eventnames",
|
|
help="restrict statistics to the comma-separated list of events")
|
|
optparser.add_option_group(optgroup)
|
|
|
|
optgroup = optparse.OptionGroup(
|
|
optparser, "Display mode selection (choose one)")
|
|
optgroup.add_option(
|
|
"-a", "--averages", action="store_true",
|
|
dest="print_averages",
|
|
help="display a summary of the averages of chosen statistics (default)")
|
|
optgroup.add_option(
|
|
"-r", "--rawdata", action="store_true",
|
|
dest="print_raw",
|
|
help="display raw data from all boot iterations")
|
|
optparser.add_option_group(optgroup)
|
|
optparser.set_defaults(print_averages=False)
|
|
optparser.set_defaults(print_raw=False)
|
|
return optparser
|
|
|
|
|
|
def _ProcessDisplayOptions(options):
|
|
display_count = 0
|
|
if options.print_averages:
|
|
display_count += 1
|
|
printfunc = perfprinter.PrintStatisticsSummary
|
|
if options.print_raw:
|
|
display_count += 1
|
|
printfunc = perfprinter.PrintRawData
|
|
if display_count == 0:
|
|
printfunc = perfprinter.PrintStatisticsSummary
|
|
elif display_count > 1:
|
|
print >>sys.stderr, "Can't use -a and -r together.\n"
|
|
return None
|
|
return printfunc
|
|
|
|
|
|
def _ProcessStatsOptions(options):
|
|
if options.use_timestats and options.use_diskstats:
|
|
print >>sys.stderr, "Can't use -t and -d together.\n"
|
|
return None
|
|
return not options.use_diskstats
|
|
|
|
|
|
def _ProcessKeylistOptions(options):
|
|
if not options.eventnames:
|
|
return None
|
|
keylist = []
|
|
for kl in options.eventnames:
|
|
keylist.extend(kl.split(','))
|
|
return keylist
|
|
|
|
|
|
def main(argv):
|
|
optparser = _SetupOptions()
|
|
(options, args) = optparser.parse_args(argv)
|
|
printfunc = _ProcessDisplayOptions(options)
|
|
use_timestats = _ProcessStatsOptions(options)
|
|
keylist = _ProcessKeylistOptions(options)
|
|
if printfunc is None or use_timestats is None:
|
|
optparser.print_help()
|
|
sys.exit(1)
|
|
if not args:
|
|
args = ["."]
|
|
printfunc(resultsdir.ReadResultsDirectory,
|
|
args, use_timestats, keylist)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main(sys.argv[1:])
|