h2o.sh 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #!/bin/bash
  2. set -e
  3. H2O_APP_PROFILE_PORT=54321
  4. H2O_APP_PROFILE_URL="http://127.0.0.1:$H2O_APP_PROFILE_PORT"
  5. SCRIPT_PATH=$(realpath "$0")
  6. H2O_APP_SRC_ROOT=$(dirname "$SCRIPT_PATH")
  7. H2O_APP_BUILD_DIR="${H2O_APP_SRC_ROOT}/build"
  8. if [[ -z "$DBHOST" ]]; then
  9. DBHOST=tfb-database
  10. fi
  11. if [[ -z "$H2O_APP_PREFIX" ]]; then
  12. H2O_APP_PREFIX=/opt/h2o_app
  13. fi
  14. if [[ -z "$H2O_PREFIX" ]]; then
  15. H2O_PREFIX=/usr
  16. fi
  17. if [[ -z "$MUSTACHE_C_PREFIX" ]]; then
  18. MUSTACHE_C_PREFIX=/opt/mustache-c
  19. fi
  20. if [[ "$BENCHMARK_ENV" = "Azure" ]]; then
  21. DB_CONN=5
  22. else
  23. DB_CONN=5
  24. fi
  25. build_h2o_app()
  26. {
  27. cmake -DCMAKE_INSTALL_PREFIX="$H2O_APP_PREFIX" -DCMAKE_BUILD_TYPE=Release \
  28. -DCMAKE_PREFIX_PATH="${H2O_PREFIX};${MUSTACHE_C_PREFIX}" \
  29. -DCMAKE_C_FLAGS="-march=native $1" -G Ninja "$H2O_APP_SRC_ROOT"
  30. cmake --build . --clean-first -j
  31. }
  32. run_curl()
  33. {
  34. for ((i = 0; i < 10; i++)); do
  35. curl "${H2O_APP_PROFILE_URL}/$1" > /dev/null 2>&1
  36. done
  37. }
  38. run_h2o_app()
  39. {
  40. LD_LIBRARY_PATH="${MUSTACHE_C_PREFIX}/lib:$LD_LIBRARY_PATH" \
  41. taskset -c "$1" "$2/h2o_app" -a20 -f "$3/template" -m "$DB_CONN" "$4" "$5" \
  42. -d "host=$DBHOST dbname=hello_world user=benchmarkdbuser sslmode=disable \
  43. password=benchmarkdbpass" &
  44. }
  45. generate_profile_data()
  46. {
  47. run_h2o_app 0 . "$H2O_APP_SRC_ROOT" "-p$H2O_APP_PROFILE_PORT" -t1
  48. local -r H2O_APP_PROFILE_PID=$!
  49. while ! curl "$H2O_APP_PROFILE_URL" > /dev/null 2>&1; do sleep 1; done
  50. run_curl json
  51. run_curl db
  52. run_curl queries?queries=20
  53. run_curl fortunes
  54. run_curl updates?queries=20
  55. run_curl plaintext
  56. run_curl cached-worlds?queries=20
  57. kill -s SIGTERM "$H2O_APP_PROFILE_PID"
  58. wait "$H2O_APP_PROFILE_PID"
  59. }
  60. install -d "$H2O_APP_BUILD_DIR"
  61. pushd "$H2O_APP_BUILD_DIR"
  62. build_h2o_app "-fprofile-generate"
  63. generate_profile_data
  64. rm -f CMakeCache.txt
  65. build_h2o_app "-fprofile-use"
  66. cmake --install .
  67. popd
  68. rm -rf "$H2O_APP_BUILD_DIR"
  69. echo "Running h2o_app in the $BENCHMARK_ENV environment."
  70. echo "Maximum database connections per thread: $DB_CONN"
  71. run_h2o_app 0 "${H2O_APP_PREFIX}/bin" "${H2O_APP_PREFIX}/share/h2o_app"
  72. wait