Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(514)

Unified Diff: bootperf-bin/bootperf

Issue 4148011: Create bootperf-bin tools for running boot time tests and reporting results (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/crosutils.git
Patch Set: Apply selected fixes recommended by gpylint Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « bootperf-bin/__init__.py ('k') | bootperf-bin/perfprinter.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: bootperf-bin/bootperf
diff --git a/bootperf-bin/bootperf b/bootperf-bin/bootperf
new file mode 100755
index 0000000000000000000000000000000000000000..4aea1a8971103ddc065c46dc265cf13da2b8a836
--- /dev/null
+++ b/bootperf-bin/bootperf
@@ -0,0 +1,213 @@
+#!/bin/bash
+
+# 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.
+
+# Wrapper to run the platform_BootPerfServer autotest, and store the
+# results for later analysis by the 'showbootdata' script.
+#
+# NOTE: This script must be run from inside the chromeos build
+# chroot environment.
+#
+
+# SCRIPT_DIR="$(cd "$(dirname $0)/.." ; pwd)"
+SCRIPT_DIR=$HOME/trunk/src/scripts
+. "$SCRIPT_DIR/common.sh"
+
+DEFINE_string output_dir "" "output directory for results" o
+DEFINE_boolean keep_logs "$FLAGS_FALSE" "keep autotest results" k
+
+RUN_TEST="$SCRIPT_DIR/run_remote_tests.sh"
+TEST=server/site_tests/platform_BootPerfServer/control
+TMP_RESULTS="/tmp/bootperf.$(date '+%Y%j%H%M').$$"
+RESULTS_KEYVAL=platform_BootPerfServer/platform_BootPerfServer/results/keyval
+RESULTS_SUMMARY_FILES=(
+ $RESULTS_KEYVAL
+ platform_BootPerfServer/keyval
+ platform_BootPerfServer/platform_BootPerfServer/keyval
+ platform_BootPerfServer/platform_BootPerfServer/platform_BootPerf/keyval
+ platform_BootPerfServer/platform_BootPerfServer/status
+ platform_BootPerfServer/platform_BootPerfServer/status.log
+ platform_BootPerfServer/status
+ platform_BootPerfServer/status.log
+ platform_BootPerfServer/sysinfo/cmdline
+ platform_BootPerfServer/sysinfo/cpuinfo
+ platform_BootPerfServer/sysinfo/modules
+ platform_BootPerfServer/sysinfo/uname
+ platform_BootPerfServer/sysinfo/version
+)
+
+# Structure of a results directory:
+# $RUNDIR.$ITER/ - directory
+# $RUNDIR_LOG - file
+# $RUNDIR_SUMMARY/ - directory
+# $RUNDIR_ALL_RESULTS/ - optional directory
+# $KEYVAL_SUMMARY/ - file
+# If you add any other content under the results directory, you'll
+# probably need to change extra_files(), below.
+RUNDIR=run
+RUNDIR_LOG=log.txt
+RUNDIR_SUMMARY=summary
+RUNDIR_ALL_RESULTS=logs
+KEYVAL_SUMMARY=results_keyval
+
+
+# Usage/help function. This function is known to the shflags library,
+# and mustn't be renamed.
+flags_help() {
+ cat <<END_USAGE >&2
+usage: $(basename $0) [ <options> ] <ip-address> [ <count> ]
+Options:
+ --output_dir <directory>
+ --o <directory> Specify output directory for results
+
+ --[no]keep_logs
+ -k Keep [don't keep] autotest log files
+Summary:
+ Run the platform_BootPerfServer autotest, and store results in the
+ given destination directory. The test target is specified by
+ <ip-address>.
+
+ By default, the test is run once; if <count> is given, the test is
+ run that many times. Note that the platform_BootPerfServer test
+ reboots the target 10 times, so the total number of reboots will
+ be 10*<count>.
+
+ If the destination directory doesn't exist, it is created. If the
+ destination directory already holds test results, additional
+ results are added in without overwriting earlier results.
+
+ If no destination is specified, the current directory is used,
+ provided that the directory is empty, or has been previously used
+ as a destination directory for this command.
+
+ By default, only a summary subset of the log files created by
+ autotest is preserved; with --keep_logs the (potentially large)
+ autotest logs are preserved with the test results.
+END_USAGE
+ return $FLAGS_TRUE
+}
+
+usage() {
+ if [ $# -gt 0 ]; then
+ error "$(basename $0): $*"
+ echo >&2
+ fi
+ flags_help
+ exit 1
+}
+
+# List any files in the current directory not created as output
+# from running this script.
+extra_files() {
+ ls | grep -v "^$RUNDIR[.]...\$" |
+ grep -v $KEYVAL_SUMMARY
+}
+
+# Main function to run the boot performance test. Run the boot
+# performance test for the given count, putting output into the
+# current directory.
+#
+# Arguments are <ip-address> and <count> arguments, as for the main
+# command.
+#
+# We terminate test runs if "run_remote_tests" ever fails to produce
+# the results file; generally this is the result of a serious error
+# (e.g. disk full) that won't go away if we just plow on.
+run_boot_test() {
+ local remote="$1"
+ local count="${2:-1}"
+
+ local iter=$(expr "$(echo $RUNDIR.???)" : '.*\(...\)')
+ if [ "$iter" != "???" ]; then
+ iter=$(echo $iter | awk '{printf "%03d\n", $1 + 1}')
+ else
+ iter=000
+ fi
+
+ i=0
+ while [ $i -lt $count ]; do
+ local iter_rundir=$RUNDIR.$iter
+ local logfile=$iter_rundir/$RUNDIR_LOG
+ local summary_dir=$iter_rundir/$RUNDIR_SUMMARY
+ local all_results_dir=$iter_rundir/$RUNDIR_ALL_RESULTS
+
+ mkdir $iter_rundir
+ echo "run $iter start at $(date)"
+ $RUN_TEST --results_dir_root="$TMP_RESULTS" \
+ --remote="$remote" $TEST >$logfile 2>&1
+ if [ ! -e "$TMP_RESULTS/$RESULTS_KEYVAL" ]; then
+ error "No results file; terminating test runs."
+ error "Check $logfile for output from the test run,"
+ error "and see $TMP_RESULTS for full test logs and output."
+ break
+ fi
+ mkdir $summary_dir
+ tar cf - -C $TMP_RESULTS "${RESULTS_SUMMARY_FILES[@]}" |
+ tar xf - -C $summary_dir
+ if [ $FLAGS_keep_logs -eq $FLAGS_TRUE ]; then
+ mv $TMP_RESULTS $all_results_dir
+ chmod 755 $all_results_dir
+ else
+ rm -rf $TMP_RESULTS
+ fi
+ i=$(expr $i + 1)
+ iter=$(echo $iter | awk '{printf "%03d\n", $1 + 1}')
+ done
+ # "run 000 start at $(date)"
+ echo " ... end at $(date)"
+ cat $RUNDIR.???/$RUNDIR_SUMMARY/$RESULTS_KEYVAL >$KEYVAL_SUMMARY
+}
+
+# Main routine - check validity of the (already parsed) command line
+# options. 'cd' to the results directory, if it was specified. If
+# all the arguments checks pass, hand control to run_boot_test
+main() {
+ if [ $# -lt 1 ]; then
+ usage "Missing target host address"
+ elif [ $# -gt 2 ]; then
+ usage "Too many arguments"
+ fi
+
+ if [ -n "${FLAGS_output_dir}" ]; then
+ if [ ! -d "${FLAGS_output_dir}" ]; then
+ if ! mkdir "${FLAGS_output_dir}"; then
+ usage "Unable to create ${FLAGS_output_dir}"
+ fi
+ fi
+ cd "${FLAGS_output_dir}" ||
+ usage "No permissions to chdir to ${FLAGS_output_dir}"
+ elif [ -n "$(extra_files)" ]; then
+ error "No results directory specified, and current directory"
+ error "contains contents other than run results."
+ error "You can override this error by using the --output_dir option"
+ usage
+ fi
+
+ # Check the count argument.
+ # N.B. the test [ "$2" -eq "$2" ] tests whether "$2" is valid as a
+ # number; when it fails it will also report a syntax error (which
+ # we suppress).
+ if [ -n "$2" ]; then
+ if ! [ "$2" -eq "$2" ] 2>/dev/null || [ "$2" -le 0 ]; then
+ usage "<count> argument must be a positive number"
+ fi
+ fi
+
+ run_boot_test "$@"
+}
+
+# shflags defines --help implicitly; if it's used on the command
+# line FLAGS will invoke flags_help, set FLAGS_help to TRUE, and
+# then return false. To avoid printing help twice, we have to check
+# for that case here.
+if ! FLAGS "$@"; then
+ if [ ${FLAGS_help} -eq ${FLAGS_TRUE} ]; then
+ exit 0
+ else
+ usage
+ fi
+fi
+
+eval main "${FLAGS_ARGV}"
« no previous file with comments | « bootperf-bin/__init__.py ('k') | bootperf-bin/perfprinter.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698