| 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 | "$@"
|