You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.4 KiB
78 lines
2.4 KiB
4 months ago
|
#!/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/'
|
||
|
|