bench-all 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. #!/usr/bin/env bash
  2. set -eux
  3. root_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null && pwd)"
  4. bench_all=false
  5. bench_buildroot_build=false
  6. bench_buildroot_baseline_build=false
  7. bench_gem5_build=false
  8. bench_linux_boot=false
  9. default_arch=x86_64
  10. update_repo=false
  11. while getopts Aa:Bbglu OPT; do
  12. case "$OPT" in
  13. A)
  14. bench_all=true
  15. ;;
  16. a)
  17. default_arch="$OPTARG"
  18. ;;
  19. b)
  20. bench_buildroot_build=true
  21. ;;
  22. B)
  23. bench_buildroot_baseline_build=true
  24. ;;
  25. g)
  26. bench_gem5_build=true
  27. ;;
  28. l)
  29. bench_linux_boot=true
  30. ;;
  31. u)
  32. update_repo=true
  33. ;;
  34. ?)
  35. exit 2
  36. ;;
  37. esac
  38. done
  39. shift "$(($OPTIND - 1))"
  40. comment="${1:-}"
  41. if \
  42. ! "$bench_buildroot_build" && \
  43. ! "$bench_buildroot_baseline_build" && \
  44. ! "$bench_gem5_build" && \
  45. ! "$bench_linux_boot" \
  46. ; then
  47. bench_all=true
  48. fi
  49. if "$bench_all"; then
  50. bench_buildroot_build=true
  51. bench_buildroot_baseline_build=true
  52. bench_gem5_build=true
  53. bench_linux_boot=true
  54. fi
  55. getvar="${root_dir}/getvar"
  56. # Create output directory.
  57. benchmark_repo="${root_dir}/../linux-kernel-module-cheat-regression"
  58. mkdir -p "$benchmark_repo"
  59. last_dir="$(ls "$benchmark_repo" | grep -E '^[0-9]' | tail -n 1)"
  60. if [ -n "$last_dir" ]; then
  61. seq_id="$(("$(echo "$last_dir" | sed -E -e 's/_.*//' -e 's/^0*//')" + 1))"
  62. else
  63. seq_id=0
  64. fi
  65. seq_id="$(printf '%0.4d' "$seq_id")"
  66. dir_basename="${seq_id}_$("$getvar" sha)"
  67. new_dir="${benchmark_repo}/${dir_basename}"
  68. mkdir "$new_dir"
  69. do_bench_buildroot_build() (
  70. arch="$default_arch"
  71. build_id=bench
  72. if [ "${1:-}" = baseline ]; then
  73. baseline=--baseline
  74. baseline_suffix=-baseline
  75. else
  76. baseline=
  77. baseline_suffix=
  78. fi
  79. common_build_dir="$("$getvar" --arch "$arch" --buildroot-build-id "$build_id" build_dir)"
  80. common_images_dir="$("$getvar" --arch "$arch" --buildroot-build-id "$build_id" buildroot_images_dir)"
  81. "${root_dir}/build-buildroot" --arch "$arch" $baseline --buildroot-build-id "$build_id" --clean
  82. "${root_dir}/build-buildroot" --arch "$arch" $baseline --buildroot-build-id "$build_id" --no-all -- source
  83. "${root_dir}/build-buildroot" --arch "$arch" $baseline --buildroot-build-id "$build_id"
  84. cp "${common_build_dir}/build-time.log" "${new_dir}/buildroot-build-time-${baseline_suffix}${arch}.log"
  85. wc -c "${common_images_dir}/"* > "${new_dir}/buildroot-image-size-${baseline_suffix}${arch}.log"
  86. "${root_dir}/build-buildroot" --arch "$arch" $baseline --buildroot-build-id "$build_id" --clean
  87. )
  88. if "$bench_buildroot_build"; then
  89. do_bench_buildroot_build
  90. fi
  91. if "$bench_buildroot_baseline_build"; then
  92. do_bench_buildroot_build baseline
  93. fi
  94. if "$bench_gem5_build"; then
  95. common_arch="$default_arch"
  96. gem5_build_id=bench
  97. common_gem5_build_dir="$("$getvar" --arch "$common_arch" --gem5-build-id "$gem5_build_id" gem5_build_dir)"
  98. common_gem5_source_dir="$("$getvar" --arch "$common_arch" --gem5-build-id "$gem5_build_id" gem5_source_dir)"
  99. results_file="${common_gem5_build_dir}/lkmc-bench-build.txt"
  100. git -C "${common_gem5_source_dir}" clean -xdf
  101. rm -f "$results_file"
  102. "${root_dir}/build-gem5" --arch "$common_arch" --clean --gem5-build-id "$gem5_build_id"
  103. # TODO understand better: --foreground required otherwise we cannot
  104. # kill the build with Ctrl+C if something goes wrong, can be minimized to:
  105. # bash -c "eval 'timeout 5 sleep 3'"
  106. "${root_dir}/bench-cmd" "timeout --foreground 900 ./build-gem5 --arch '$common_arch' --gem5-build-id '$gem5_build_id'" "$results_file"
  107. cp "$results_file" "${new_dir}/gem5-bench-build-${common_arch}.txt"
  108. git -C "${common_gem5_source_dir}" clean -xdf
  109. "${root_dir}/build-gem5" --arch "$common_arch" --clean --gem5-build-id "$gem5_build_id"
  110. fi
  111. if "$bench_linux_boot"; then
  112. cd "${root_dir}"
  113. "${root_dir}/build" --all-archs all
  114. "${root_dir}/test-boot" --size 3
  115. cp "$(${root_dir}/getvar test_boot_benchmark_file)" "$new_dir"
  116. fi
  117. if "$update_repo"; then
  118. if [ -n "$comment" ]; then
  119. echo "$comment" > "${new_dir}/README.adoc"
  120. fi
  121. echo
  122. cd "$benchmark_repo"
  123. git add .
  124. git commit -m "$dir_basename"
  125. git push
  126. fi