| 1 | #!/usr/bin/env bash
 | 
| 2 | #
 | 
| 3 | # Run all the benchmarks on a given machine.
 | 
| 4 | #
 | 
| 5 | # Usage:
 | 
| 6 | #   benchmarks/auto.sh <function name>
 | 
| 7 | #
 | 
| 8 | # List of benchmarks:
 | 
| 9 | #
 | 
| 10 | # - Single Machine (for now):
 | 
| 11 | #   - mycpp-examples
 | 
| 12 | #   - gc
 | 
| 13 | # - Multiple machines
 | 
| 14 | #   - osh-parser
 | 
| 15 | #   - osh-runtime
 | 
| 16 | #   - vm-baseline
 | 
| 17 | #   - compute
 | 
| 18 | #     - awk-python could be moved here
 | 
| 19 | #     - startup.sh could be moved here, it also has strace counts
 | 
| 20 | #   - ovm-build
 | 
| 21 | 
 | 
| 22 | set -o nounset
 | 
| 23 | set -o pipefail
 | 
| 24 | set -o errexit
 | 
| 25 | 
 | 
| 26 | source test/common.sh  # die
 | 
| 27 | source benchmarks/common.sh  # default value of OSH_OVM
 | 
| 28 | source benchmarks/id.sh
 | 
| 29 | 
 | 
| 30 | measure-shells() {
 | 
| 31 |   local host_name=$1
 | 
| 32 |   local job_id=$2
 | 
| 33 |   local out_dir=$3
 | 
| 34 | 
 | 
| 35 |   local host_job_id="$host_name.$job_id"
 | 
| 36 | 
 | 
| 37 |   local raw_out_dir
 | 
| 38 |   raw_out_dir="$out_dir/osh-runtime/raw.$host_job_id"
 | 
| 39 | 
 | 
| 40 |   # New Style doesn't need provenance -- it's joined later
 | 
| 41 |   benchmarks/osh-runtime.sh measure \
 | 
| 42 |     $host_name $raw_out_dir $OSH_CPP_BENCHMARK_DATA $out_dir
 | 
| 43 | 
 | 
| 44 |   # Old style uses provenance.txt.  TODO: use raw_out_dir everywhere
 | 
| 45 |   local provenance=_tmp/provenance.txt
 | 
| 46 | 
 | 
| 47 |   raw_out_dir="$out_dir/vm-baseline/raw.$host_job_id"
 | 
| 48 |   benchmarks/vm-baseline.sh measure \
 | 
| 49 |     $provenance $host_job_id $out_dir/vm-baseline
 | 
| 50 | 
 | 
| 51 |   raw_out_dir="$out_dir/vm-baseline/raw.$host_job_id"
 | 
| 52 |   benchmarks/osh-parser.sh measure \
 | 
| 53 |     $provenance $host_job_id $out_dir/osh-parser
 | 
| 54 | 
 | 
| 55 |   raw_out_dir="$out_dir/compute/raw.$host_job_id"
 | 
| 56 |   benchmarks/compute.sh measure \
 | 
| 57 |     $provenance $host_job_id $out_dir/compute
 | 
| 58 | }
 | 
| 59 | 
 | 
| 60 | measure-builds() {
 | 
| 61 |   local host_name=$1
 | 
| 62 |   local job_id=$2
 | 
| 63 |   local out_dir=$3
 | 
| 64 | 
 | 
| 65 |   # TODO: Use new provenance style, like measure-shells
 | 
| 66 |   local build_prov
 | 
| 67 |   build_prov=$(benchmarks/id.sh compiler-provenance)  # capture the filename
 | 
| 68 | 
 | 
| 69 |   benchmarks/ovm-build.sh measure $build_prov $out_dir/ovm-build
 | 
| 70 | }
 | 
| 71 | 
 | 
| 72 | # Run all benchmarks from a clean git checkout.
 | 
| 73 | # Before this, run devtools/release.sh benchmark-build.
 | 
| 74 | 
 | 
| 75 | all() {
 | 
| 76 |   local do_machine1=${1:-}
 | 
| 77 | 
 | 
| 78 |   local host_name
 | 
| 79 |   host_name=$(hostname)  # Running on multiple machines
 | 
| 80 | 
 | 
| 81 |   local job_id
 | 
| 82 |   job_id=$(print-job-id)
 | 
| 83 | 
 | 
| 84 |   local host_job_id="$host_name.$job_id"
 | 
| 85 |   local out_dir='../benchmark-data'
 | 
| 86 | 
 | 
| 87 |   benchmarks/id.sh shell-provenance-2 \
 | 
| 88 |     $host_name $job_id $out_dir \
 | 
| 89 |     "${SHELLS[@]}" $OSH_CPP_BENCHMARK_DATA python2
 | 
| 90 | 
 | 
| 91 |   # TODO: probably move compiler-provenance here
 | 
| 92 | 
 | 
| 93 |   # Notes:
 | 
| 94 |   # - During release, this happens on machine1, but not machine2
 | 
| 95 |   if test -n "$do_machine1"; then
 | 
| 96 |     # Only run on one machine
 | 
| 97 |     benchmarks/uftrace.sh soil-run
 | 
| 98 |     benchmarks/mycpp.sh soil-run
 | 
| 99 |     benchmarks/gc.sh soil-run
 | 
| 100 |     benchmarks/gc-cachegrind.sh soil-run
 | 
| 101 | 
 | 
| 102 |     benchmarks/osh-parser.sh measure-cachegrind \
 | 
| 103 |       _tmp/provenance.txt $host_job_id $out_dir/osh-parser $OSH_CPP_BENCHMARK_DATA
 | 
| 104 |   fi
 | 
| 105 | 
 | 
| 106 |   measure-shells $host_name $job_id $out_dir
 | 
| 107 |   measure-builds $host_name $job_id $out_dir
 | 
| 108 | }
 | 
| 109 | 
 | 
| 110 | "$@"
 |