From 8f04173e7fcd8e82f60bea0da0c54c30998b7da9 Mon Sep 17 00:00:00 2001 From: Edward Thomson Date: Tue, 14 Jan 2025 23:43:54 +0000 Subject: [PATCH 1/8] benchmarks: rename cache benchmarks The default in the world is to have a disk cache; it's exceptional to _not_. Flip our naming, so that the (exceptional) `nocache` tests are called out explicitly. --- tests/benchmarks/{blame__git_cached => blame__git} | 0 tests/benchmarks/{blame__linux_cached => blame__linux} | 0 tests/benchmarks/{blame__simple_cached => blame__simple} | 0 tests/benchmarks/hash-object__text_100kb | 4 ++-- tests/benchmarks/hash-object__text_10mb | 4 ++-- tests/benchmarks/hash-object__text_1kb | 4 ++-- tests/benchmarks/hash-object__text_cached_100kb | 7 ------- tests/benchmarks/hash-object__text_cached_10mb | 7 ------- tests/benchmarks/hash-object__text_cached_1kb | 7 ------- tests/benchmarks/hash-object__text_nocache_100kb | 7 +++++++ tests/benchmarks/hash-object__text_nocache_10mb | 7 +++++++ tests/benchmarks/hash-object__text_nocache_1kb | 7 +++++++ tests/benchmarks/hash-object__write_text_100kb | 6 +++--- tests/benchmarks/hash-object__write_text_10mb | 4 ++-- tests/benchmarks/hash-object__write_text_1kb | 4 ++-- ..._cached_100kb => hash-object__write_text_nocache_100kb} | 6 +++--- ...xt_cached_10mb => hash-object__write_text_nocache_10mb} | 4 ++-- ...text_cached_1kb => hash-object__write_text_nocache_1kb} | 4 ++-- 18 files changed, 41 insertions(+), 41 deletions(-) rename tests/benchmarks/{blame__git_cached => blame__git} (100%) rename tests/benchmarks/{blame__linux_cached => blame__linux} (100%) rename tests/benchmarks/{blame__simple_cached => blame__simple} (100%) delete mode 100755 tests/benchmarks/hash-object__text_cached_100kb delete mode 100755 tests/benchmarks/hash-object__text_cached_10mb delete mode 100755 tests/benchmarks/hash-object__text_cached_1kb create mode 100755 tests/benchmarks/hash-object__text_nocache_100kb create mode 100755 tests/benchmarks/hash-object__text_nocache_10mb create mode 100755 tests/benchmarks/hash-object__text_nocache_1kb rename tests/benchmarks/{hash-object__write_text_cached_100kb => hash-object__write_text_nocache_100kb} (52%) rename tests/benchmarks/{hash-object__write_text_cached_10mb => hash-object__write_text_nocache_10mb} (65%) rename tests/benchmarks/{hash-object__write_text_cached_1kb => hash-object__write_text_nocache_1kb} (66%) diff --git a/tests/benchmarks/blame__git_cached b/tests/benchmarks/blame__git similarity index 100% rename from tests/benchmarks/blame__git_cached rename to tests/benchmarks/blame__git diff --git a/tests/benchmarks/blame__linux_cached b/tests/benchmarks/blame__linux similarity index 100% rename from tests/benchmarks/blame__linux_cached rename to tests/benchmarks/blame__linux diff --git a/tests/benchmarks/blame__simple_cached b/tests/benchmarks/blame__simple similarity index 100% rename from tests/benchmarks/blame__simple_cached rename to tests/benchmarks/blame__simple diff --git a/tests/benchmarks/hash-object__text_100kb b/tests/benchmarks/hash-object__text_100kb index d77f224b996..7c2a84125ae 100755 --- a/tests/benchmarks/hash-object__text_100kb +++ b/tests/benchmarks/hash-object__text_100kb @@ -2,6 +2,6 @@ . "$(dirname "$0")/benchmark_helpers.sh" -gitbench --prepare "create_text_file text_100kb 102400 && - flush_disk_cache" \ +gitbench --prepare "create_text_file text_100kb 102400" \ + --warmup 5 \ hash-object "text_100kb" diff --git a/tests/benchmarks/hash-object__text_10mb b/tests/benchmarks/hash-object__text_10mb index 215afc6c3ab..311ddca4c27 100755 --- a/tests/benchmarks/hash-object__text_10mb +++ b/tests/benchmarks/hash-object__text_10mb @@ -2,6 +2,6 @@ . "$(dirname "$0")/benchmark_helpers.sh" -gitbench --prepare "create_text_file text_10mb 10485760 && - flush_disk_cache" \ +gitbench --prepare "create_text_file text_10mb 10485760" \ + --warmup 5 \ hash-object "text_10mb" diff --git a/tests/benchmarks/hash-object__text_1kb b/tests/benchmarks/hash-object__text_1kb index 1348b2fea66..44c06ead7a3 100755 --- a/tests/benchmarks/hash-object__text_1kb +++ b/tests/benchmarks/hash-object__text_1kb @@ -2,6 +2,6 @@ . "$(dirname "$0")/benchmark_helpers.sh" -gitbench --prepare "create_text_file text_1kb 1024 && - flush_disk_cache" \ +gitbench --prepare "create_text_file text_1kb 1024" \ + --warmup 5 \ hash-object "text_1kb" diff --git a/tests/benchmarks/hash-object__text_cached_100kb b/tests/benchmarks/hash-object__text_cached_100kb deleted file mode 100755 index 7c2a84125ae..00000000000 --- a/tests/benchmarks/hash-object__text_cached_100kb +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -e - -. "$(dirname "$0")/benchmark_helpers.sh" - -gitbench --prepare "create_text_file text_100kb 102400" \ - --warmup 5 \ - hash-object "text_100kb" diff --git a/tests/benchmarks/hash-object__text_cached_10mb b/tests/benchmarks/hash-object__text_cached_10mb deleted file mode 100755 index 311ddca4c27..00000000000 --- a/tests/benchmarks/hash-object__text_cached_10mb +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -e - -. "$(dirname "$0")/benchmark_helpers.sh" - -gitbench --prepare "create_text_file text_10mb 10485760" \ - --warmup 5 \ - hash-object "text_10mb" diff --git a/tests/benchmarks/hash-object__text_cached_1kb b/tests/benchmarks/hash-object__text_cached_1kb deleted file mode 100755 index 44c06ead7a3..00000000000 --- a/tests/benchmarks/hash-object__text_cached_1kb +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -e - -. "$(dirname "$0")/benchmark_helpers.sh" - -gitbench --prepare "create_text_file text_1kb 1024" \ - --warmup 5 \ - hash-object "text_1kb" diff --git a/tests/benchmarks/hash-object__text_nocache_100kb b/tests/benchmarks/hash-object__text_nocache_100kb new file mode 100755 index 00000000000..d77f224b996 --- /dev/null +++ b/tests/benchmarks/hash-object__text_nocache_100kb @@ -0,0 +1,7 @@ +#!/bin/bash -e + +. "$(dirname "$0")/benchmark_helpers.sh" + +gitbench --prepare "create_text_file text_100kb 102400 && + flush_disk_cache" \ + hash-object "text_100kb" diff --git a/tests/benchmarks/hash-object__text_nocache_10mb b/tests/benchmarks/hash-object__text_nocache_10mb new file mode 100755 index 00000000000..215afc6c3ab --- /dev/null +++ b/tests/benchmarks/hash-object__text_nocache_10mb @@ -0,0 +1,7 @@ +#!/bin/bash -e + +. "$(dirname "$0")/benchmark_helpers.sh" + +gitbench --prepare "create_text_file text_10mb 10485760 && + flush_disk_cache" \ + hash-object "text_10mb" diff --git a/tests/benchmarks/hash-object__text_nocache_1kb b/tests/benchmarks/hash-object__text_nocache_1kb new file mode 100755 index 00000000000..1348b2fea66 --- /dev/null +++ b/tests/benchmarks/hash-object__text_nocache_1kb @@ -0,0 +1,7 @@ +#!/bin/bash -e + +. "$(dirname "$0")/benchmark_helpers.sh" + +gitbench --prepare "create_text_file text_1kb 1024 && + flush_disk_cache" \ + hash-object "text_1kb" diff --git a/tests/benchmarks/hash-object__write_text_100kb b/tests/benchmarks/hash-object__write_text_100kb index fb72c092745..6803eeeaef7 100755 --- a/tests/benchmarks/hash-object__write_text_100kb +++ b/tests/benchmarks/hash-object__write_text_100kb @@ -3,7 +3,7 @@ . "$(dirname "$0")/benchmark_helpers.sh" gitbench --prepare "sandbox_repo empty_standard_repo && - create_text_file text_100kb 102400 && - flush_disk_cache" \ + create_text_file text_100kb 102400" \ + --warmup 5 \ --chdir "empty_standard_repo" \ - hash-object -w "../text_100kb" + hash-object "../text_100kb" diff --git a/tests/benchmarks/hash-object__write_text_10mb b/tests/benchmarks/hash-object__write_text_10mb index 9da091986fd..4335cc86e41 100755 --- a/tests/benchmarks/hash-object__write_text_10mb +++ b/tests/benchmarks/hash-object__write_text_10mb @@ -3,7 +3,7 @@ . "$(dirname "$0")/benchmark_helpers.sh" gitbench --prepare "sandbox_repo empty_standard_repo && - create_text_file text_10mb 10485760 && - flush_disk_cache" \ + create_text_file text_10mb 10485760" \ + --warmup 5 \ --chdir "empty_standard_repo" \ hash-object "../text_10mb" diff --git a/tests/benchmarks/hash-object__write_text_1kb b/tests/benchmarks/hash-object__write_text_1kb index ca34393adc6..8a4c5c97b3f 100755 --- a/tests/benchmarks/hash-object__write_text_1kb +++ b/tests/benchmarks/hash-object__write_text_1kb @@ -3,7 +3,7 @@ . "$(dirname "$0")/benchmark_helpers.sh" gitbench --prepare "sandbox_repo empty_standard_repo && - create_text_file text_1kb 1024 && - flush_disk_cache" \ + create_text_file text_1kb 1024" \ + --warmup 5 \ --chdir "empty_standard_repo" \ hash-object "../text_1kb" diff --git a/tests/benchmarks/hash-object__write_text_cached_100kb b/tests/benchmarks/hash-object__write_text_nocache_100kb similarity index 52% rename from tests/benchmarks/hash-object__write_text_cached_100kb rename to tests/benchmarks/hash-object__write_text_nocache_100kb index 6803eeeaef7..fb72c092745 100755 --- a/tests/benchmarks/hash-object__write_text_cached_100kb +++ b/tests/benchmarks/hash-object__write_text_nocache_100kb @@ -3,7 +3,7 @@ . "$(dirname "$0")/benchmark_helpers.sh" gitbench --prepare "sandbox_repo empty_standard_repo && - create_text_file text_100kb 102400" \ - --warmup 5 \ + create_text_file text_100kb 102400 && + flush_disk_cache" \ --chdir "empty_standard_repo" \ - hash-object "../text_100kb" + hash-object -w "../text_100kb" diff --git a/tests/benchmarks/hash-object__write_text_cached_10mb b/tests/benchmarks/hash-object__write_text_nocache_10mb similarity index 65% rename from tests/benchmarks/hash-object__write_text_cached_10mb rename to tests/benchmarks/hash-object__write_text_nocache_10mb index 4335cc86e41..9da091986fd 100755 --- a/tests/benchmarks/hash-object__write_text_cached_10mb +++ b/tests/benchmarks/hash-object__write_text_nocache_10mb @@ -3,7 +3,7 @@ . "$(dirname "$0")/benchmark_helpers.sh" gitbench --prepare "sandbox_repo empty_standard_repo && - create_text_file text_10mb 10485760" \ - --warmup 5 \ + create_text_file text_10mb 10485760 && + flush_disk_cache" \ --chdir "empty_standard_repo" \ hash-object "../text_10mb" diff --git a/tests/benchmarks/hash-object__write_text_cached_1kb b/tests/benchmarks/hash-object__write_text_nocache_1kb similarity index 66% rename from tests/benchmarks/hash-object__write_text_cached_1kb rename to tests/benchmarks/hash-object__write_text_nocache_1kb index 8a4c5c97b3f..ca34393adc6 100755 --- a/tests/benchmarks/hash-object__write_text_cached_1kb +++ b/tests/benchmarks/hash-object__write_text_nocache_1kb @@ -3,7 +3,7 @@ . "$(dirname "$0")/benchmark_helpers.sh" gitbench --prepare "sandbox_repo empty_standard_repo && - create_text_file text_1kb 1024" \ - --warmup 5 \ + create_text_file text_1kb 1024 && + flush_disk_cache" \ --chdir "empty_standard_repo" \ hash-object "../text_1kb" From 1a514b32c5af227184c35c872d36978c749dbc32 Mon Sep 17 00:00:00 2001 From: Edward Thomson Date: Wed, 15 Jan 2025 00:02:14 +0000 Subject: [PATCH 2/8] benchmarks: introduce `--admin` flag for admin benchmarks Some benchmarks require administrative privileges, namely the ones that blow up the disk cache. Don't run them by default, to avoid obnoxious sudo password prompts, etc. Users can specify `--admin` to run them. --- tests/benchmarks/benchmark.sh | 13 +++++++-- tests/benchmarks/benchmark_helpers.sh | 27 ++++++++++++++++--- .../hash-object__text_nocache_100kb | 2 ++ .../benchmarks/hash-object__text_nocache_10mb | 2 ++ .../benchmarks/hash-object__text_nocache_1kb | 2 ++ .../hash-object__write_text_nocache_100kb | 2 ++ .../hash-object__write_text_nocache_10mb | 2 ++ .../hash-object__write_text_nocache_1kb | 2 ++ 8 files changed, 47 insertions(+), 5 deletions(-) diff --git a/tests/benchmarks/benchmark.sh b/tests/benchmarks/benchmark.sh index e82eaabfad1..80530929d1f 100755 --- a/tests/benchmarks/benchmark.sh +++ b/tests/benchmarks/benchmark.sh @@ -6,7 +6,7 @@ set -eo pipefail # parse the command line # -usage() { echo "usage: $(basename "$0") [--cli ] [--name ] [--baseline-cli ] [--suite ] [--json ] [--flamegraph] [--zip ] [--verbose] [--debug]"; } +usage() { echo "usage: $(basename "$0") [--cli ] [--name ] [--baseline-cli ] [--suite ] [--admin] [--json ] [--flamegraph] [--zip ] [--verbose] [--debug]"; } TEST_CLI="git" TEST_CLI_NAME= @@ -16,6 +16,7 @@ JSON_RESULT= FLAMEGRAPH= ZIP_RESULT= OUTPUT_DIR= +ADMIN= VERBOSE= DEBUG= NEXT= @@ -58,6 +59,8 @@ for a in "$@"; do NEXT="suite" elif [[ "${a}" == "-s"* ]]; then SUITE="${a/-s/}" + elif [ "${a}" == "--admin" ]; then + ADMIN=1 elif [ "${a}" = "-v" ] || [ "${a}" == "--verbose" ]; then VERBOSE=1 elif [ "${a}" == "--debug" ]; then @@ -223,6 +226,10 @@ for TEST_PATH in "${BENCHMARK_DIR}"/*; do SHOW_OUTPUT="--show-output" fi + if [ "${ADMIN}" = "1" ]; then + ALLOW_ADMIN="--admin" + fi + OUTPUT_FILE="${OUTPUT_DIR}/${TEST_FILE}.out" ERROR_FILE="${OUTPUT_DIR}/${TEST_FILE}.err" JSON_FILE="${OUTPUT_DIR}/${TEST_FILE}.json" @@ -230,7 +237,7 @@ for TEST_PATH in "${BENCHMARK_DIR}"/*; do FAILED= { - ${TEST_PATH} --cli "${TEST_CLI}" --baseline-cli "${BASELINE_CLI}" --json "${JSON_FILE}" ${SHOW_OUTPUT} >"${OUTPUT_FILE}" 2>"${ERROR_FILE}"; + ${TEST_PATH} --cli "${TEST_CLI}" --baseline-cli "${BASELINE_CLI}" --json "${JSON_FILE}" ${ALLOW_ADMIN} ${SHOW_OUTPUT} >"${OUTPUT_FILE}" 2>"${ERROR_FILE}"; FAILED=$? } || true @@ -311,6 +318,8 @@ for TEST_PATH in "${BENCHMARK_DIR}"/*; do ANY_FAILED=1 fi fi + else + echo "" fi done diff --git a/tests/benchmarks/benchmark_helpers.sh b/tests/benchmarks/benchmark_helpers.sh index e5babf9c819..cf0cd512129 100644 --- a/tests/benchmarks/benchmark_helpers.sh +++ b/tests/benchmarks/benchmark_helpers.sh @@ -7,11 +7,12 @@ set -eo pipefail # command-line parsing # -usage() { echo "usage: $(basename "$0") [--cli ] [--baseline-cli ] [--output-style