| 1 | #!/usr/bin/env bash |
| 2 | set -euo pipefail |
| 3 | |
| 4 | script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" |
| 5 | repo_root="$(cd "${script_dir}/../../../../.." && pwd)" |
| 6 | cd "${repo_root}" |
| 7 | |
| 8 | timestamp="$(date +%Y-%m-%d_%H%M%S)" |
| 9 | results_dir="${DTM2_BENCH_RESULTS_DIR:-vlib/x/templating/dtm2/benchmarks/results/${timestamp}}" |
| 10 | bench_source="vlib/x/templating/dtm2/benchmarks/dtm2_benchmark.v" |
| 11 | bench_bin="/tmp/dtm2_benchmark_${timestamp}_$$" |
| 12 | bench_mode="${DTM2_BENCH_MODE:-prod}" |
| 13 | |
| 14 | mkdir -p "${results_dir}" |
| 15 | trap 'rm -f "${bench_bin}"' EXIT |
| 16 | |
| 17 | case "${bench_mode}" in |
| 18 | dev) |
| 19 | build_cmd=(./v -o "${bench_bin}" "${bench_source}") |
| 20 | ;; |
| 21 | prod) |
| 22 | build_cmd=(./v -prod -o "${bench_bin}" "${bench_source}") |
| 23 | ;; |
| 24 | prod_o2) |
| 25 | build_cmd=(./v -prod -no-prod-options -cflags -O2 -o "${bench_bin}" "${bench_source}") |
| 26 | ;; |
| 27 | *) |
| 28 | echo "unsupported DTM2_BENCH_MODE=${bench_mode}; use dev, prod, or prod_o2" >&2 |
| 29 | exit 2 |
| 30 | ;; |
| 31 | esac |
| 32 | |
| 33 | { |
| 34 | echo "date: $(date -Iseconds)" |
| 35 | echo "v_version: $(./v --version)" |
| 36 | echo "kernel: $(uname -srmo)" |
| 37 | echo "cpu_model: $(awk -F': ' '/model name/{print $2; exit}' /proc/cpuinfo)" |
| 38 | echo "logical_cpu_count: $(nproc)" |
| 39 | echo "memory_total: $(awk '/MemTotal/{print $2 " " $3}' /proc/meminfo)" |
| 40 | echo "benchmark_mode: ${bench_mode}" |
| 41 | echo "benchmark_source: ${bench_source}" |
| 42 | echo "DTM2_BENCH_CASE: ${DTM2_BENCH_CASE:-all}" |
| 43 | echo "DTM2_BENCH_ITERATIONS: ${DTM2_BENCH_ITERATIONS:-50000}" |
| 44 | echo "DTM2_BENCH_COLD_ITERATIONS: ${DTM2_BENCH_COLD_ITERATIONS:-500}" |
| 45 | echo "DTM2_BENCH_PLACEHOLDERS: ${DTM2_BENCH_PLACEHOLDERS:-50}" |
| 46 | echo "DTM2_BENCH_COMPRESS_HTML: ${DTM2_BENCH_COMPRESS_HTML:-true}" |
| 47 | echo "DTM2_BENCH_RELOAD_MODIFIED_TEMPLATES: ${DTM2_BENCH_RELOAD_MODIFIED_TEMPLATES:-false}" |
| 48 | echo "DTM2_BENCH_VALIDATE_EACH_ITERATION: ${DTM2_BENCH_VALIDATE_EACH_ITERATION:-false}" |
| 49 | } > "${results_dir}/environment.txt" |
| 50 | |
| 51 | "${build_cmd[@]}" > "${results_dir}/build.log" 2>&1 |
| 52 | |
| 53 | { |
| 54 | cat "${results_dir}/environment.txt" |
| 55 | echo |
| 56 | /usr/bin/time -v "${bench_bin}" |
| 57 | } 2>&1 | tee "${results_dir}/benchmark.log" |
| 58 | |