• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/bin/bash
2# Copyright 2016 The Chromium OS Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5#
6# Script for generating and running telemetry benchmarkes via crosperf with
7# different perf command lines in order to measure the impact of the perf
8# commands on performance. Crosperf cannot run the same benchmark multiple
9# times, so this script runs crosperf multpilpe times instead. Unfortunately,
10# this means you must compare the results yourself.
11#
12# Perf will run for the entire benchmark run, so results should be interpreted
13# in that context. i.e, if this shows a 3% overhead for a particular perf
14# command, that overhead would only be seen during the 2 seconds of measurement
15# during a Chrome OS Wide Profiling collection.
16set -e
17
18board=xxx #<you-board-here>
19remote=xxx #<your-remote-here>
20iterations=5
21chromeos_root=~/chromiumos
22chrome_src=~/chromium
23
24
25function GenerateExperiment() {
26  local perf_args="${1:+perf_args: $1}"
27  local track="$2"  # stable, beta, dev
28
29  cat <<_EOF
30$perf_args
31benchmark: page_cycler_v2.typical_25 {
32    suite: telemetry_Crosperf
33}
34
35$track {
36  build: latest-$track
37}
38_EOF
39}
40
41function RunExperiment() {
42  local name="$1"
43  local perf_command="$2"
44  GenerateExperiment "$perf_command" "stable" > /tmp/crosperf.exp
45  ./crosperf /tmp/crosperf.exp \
46    --name telemetry_perf_perf_${name} \
47    --board="${board}" \
48    --remote="${remote}" \
49    --iterations="${iterations}" \
50    --chromeos_root="${chromeos_root}" \
51    --chrome_src="${chrome_src}" \
52    --rerun=true \
53    --use_file_locks=true \
54    --locks_dir=/tmp/crosperf.locks
55}
56
57if [ "$board" = "xxx" -o "$remote" = "xxx" ]; then
58  echo "Please set board and remote at the top of this script before running."
59  exit -1
60fi
61
62
63# Note that "-a" is automatically inserted in the perf command line.
64
65# Control: No profiling.
66RunExperiment 'control' ''
67# This is our baseline standard 'cycles' perf command.
68RunExperiment 'cycles.flat' \
69  'record -e cycles -c 1000003'
70# Callgraph profiling.
71RunExperiment 'cycles.callgraph' \
72  'record -g -e cycles -c 4000037'
73# Memory bandwidth profiling. As a perf stat command, we expect imperceptible
74# overhead.
75RunExperiment 'memory.bandwidth' \
76  '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/'
77
78