78 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
| #!/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/'
 | |
| 
 |