| #!/bin/bash |
| # Copyright 2016 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. |
| # |
| # 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 Chrome OS 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/' |
| |