blob: dc062710971087f26732739bd7f923b7a8e269e3 [file] [log] [blame]
#!/bin/bash
# Copyright 2016 The ChromiumOS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# Script for generating and running telemetry benchmarkes via crosperf with
# different perf command lines in order to measure the impact of the perf
# commands on performance. Crosperf cannot run the same benchmark multiple
# times, so this script runs crosperf multpilpe times instead. Unfortunately,
# this means you must compare the results yourself.
#
# Perf will run for the entire benchmark run, so results should be interpreted
# in that context. i.e, if this shows a 3% overhead for a particular perf
# command, that overhead would only be seen during the 2 seconds of measurement
# during a ChromeOS Wide Profiling collection.
set -e
board=xxx #<you-board-here>
remote=xxx #<your-remote-here>
iterations=5
chromeos_root=~/chromiumos
chrome_src=~/chromium
function GenerateExperiment() {
local perf_args="${1:+perf_args: $1}"
local track="$2" # stable, beta, dev
cat <<_EOF
$perf_args
benchmark: page_cycler_v2.typical_25 {
suite: telemetry_Crosperf
}
$track {
build: latest-$track
}
_EOF
}
function RunExperiment() {
local name="$1"
local perf_command="$2"
GenerateExperiment "$perf_command" "stable" > /tmp/crosperf.exp
./crosperf /tmp/crosperf.exp \
--name telemetry_perf_perf_${name} \
--board="${board}" \
--remote="${remote}" \
--iterations="${iterations}" \
--chromeos_root="${chromeos_root}" \
--chrome_src="${chrome_src}" \
--rerun=true \
--use_file_locks=true \
--locks_dir=/tmp/crosperf.locks
}
if [ "$board" = "xxx" -o "$remote" = "xxx" ]; then
echo "Please set board and remote at the top of this script before running."
exit -1
fi
# Note that "-a" is automatically inserted in the perf command line.
# Control: No profiling.
RunExperiment 'control' ''
# This is our baseline standard 'cycles' perf command.
RunExperiment 'cycles.flat' \
'record -e cycles -c 1000003'
# Callgraph profiling.
RunExperiment 'cycles.callgraph' \
'record -g -e cycles -c 4000037'
# Memory bandwidth profiling. As a perf stat command, we expect imperceptible
# overhead.
RunExperiment 'memory.bandwidth' \
'stat -e cycles -e instructions -e uncore_imc/data_reads/ -e uncore_imc/data_writes/ -e cpu/event=0xD0,umask=0x11,name=MEM_UOPS_RETIRED-STLB_MISS_LOADS/ -e cpu/event=0xD0,umask=0x12,name=MEM_UOPS_RETIRED-STLB_MISS_STORES/'