#!/usr/bin/env bash . "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common" set -x bench_build=false bench_buildroot_baseline=false bench_gem5_build=false bench_linux_boot=false default_arch=x86_64 update_repo=false while getopts Aa:Bbglu OPT; do case "$OPT" in A) bench_build=true bench_buildroot_baseline=true bench_gem5_build=true bench_linux_boot=true ;; a) default_arch="$OPTARG" ;; b) bench_build=true ;; B) bench_buildroot_baseline=true ;; g) bench_gem5_build=true ;; l) bench_linux_boot=true ;; u) update_repo=true ;; ?) exit 2 ;; esac done shift "$(($OPTIND - 1))" comment="${1:-}" # Create output directory. benchmark_repo="${common_root_dir}/../linux-kernel-module-cheat-regression" mkdir -p "$benchmark_repo" last_dir="$(ls "$benchmark_repo" | grep -E '^[0-9]' | tail -n 1)" if [ -n "$last_dir" ]; then seq_id="$(("$(echo "$last_dir" | sed -E -e 's/_.*//' -e 's/^0*//')" + 1))" else seq_id=0 fi seq_id="$(printf '%0.4d' "$seq_id")" dir_basename="${seq_id}_${common_sha}" new_dir="${benchmark_repo}/${dir_basename}" mkdir "$new_dir" if "$bench_build"; then common_arch="$default_arch" common_suffix=bench common_setup rm -rf "$common_out_arch_dir" ./build -a "$common_arch" -B 'BR2_CCACHE=n' -s "$common_suffix" cp "${common_build_dir}/build-time.log" "${new_dir}/build-time-${common_arch}.log" rm -rf "$common_out_arch_dir" fi if "$bench_buildroot_baseline"; then cd "${common_root_dir}/buildroot" git clean -xdf make "qemu_${default_arch}_defconfig" printf ' BR2_CCACHE=y BR2_TARGET_ROOTFS_CPIO=y BR2_TARGET_ROOTFS_EXT2=n ' >>.config make olddefconfig make source time env -u LD_LIBRARY_PATH make BR2_JLEVEL="$(nproc)" cp output/build/build-time.log "${new_dir}/baseline-build-time-${default_arch}.log" wc -c output/images/* > "${new_dir}/baseline-image-size-${default_arch}.log" git clean -xdf fi if "$bench_gem5_build"; then arches='x86_64 arm' for common_arch in $arches; do common_setup cd "${common_gem5_src_dir}" git clean -xdf results_file="${common_gem5_out_dir}/bench-build.txt" gem5_outdir="${common_out_dir}/bench_build" rm -fr "$results_file" "${gem5_outdir}" # TODO understand better: --foreground required otherwise we cannot # kill the build with Ctrl+C if something goes wrong, can be minimized to: # bash -c "eval 'timeout 5 sleep 3'" common_bench_cmd "timeout --foreground 900 ../build -a '$common_arch' -o '${gem5_outdir}'" "$results_file" cp "$results_file" "${new_dir}/gem5-bench-build-${common_arch}.txt" cd "${common_root_dir}/gem5/gem5" git clean -xdf rm -fr "${gem5_outdir}" done fi if "$bench_linux_boot"; then cd "${common_root_dir}" ./build-all ./bench-boot cp "$common_bench_boot" "$new_dir" fi if "$update_repo"; then if [ -n "$comment" ]; then echo "$comment" > "${new_dir}/README.adoc" fi echo cd "$benchmark_repo" git add . git commit -m "$dir_basename" git push fi