From 1c002d0a9eb52f8e9cbecb8dce4edd86062df3b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Scharfe?= Date: Sat, 13 May 2017 17:59:46 +0200 Subject: [PATCH 1/5] p0004: simplify calls of test-lazy-init-name-hash The test library puts helpers into $PATH, so we can simply call them without specifying their location. The suffix $X is also not necessary because .exe files on Windows can be started without specifying their extension, and on other platforms it's empty anyway. Signed-off-by: Rene Scharfe Acked-by: Jeff Hostetler Signed-off-by: Junio C Hamano --- t/perf/p0004-lazy-init-name-hash.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/t/perf/p0004-lazy-init-name-hash.sh b/t/perf/p0004-lazy-init-name-hash.sh index 5afa8c8df3..716c951553 100755 --- a/t/perf/p0004-lazy-init-name-hash.sh +++ b/t/perf/p0004-lazy-init-name-hash.sh @@ -7,13 +7,13 @@ test_perf_large_repo test_checkout_worktree test_expect_success 'verify both methods build the same hashmaps' ' - $GIT_BUILD_DIR/t/helper/test-lazy-init-name-hash$X --dump --single | sort >out.single && - $GIT_BUILD_DIR/t/helper/test-lazy-init-name-hash$X --dump --multi | sort >out.multi && + test-lazy-init-name-hash --dump --single | sort >out.single && + test-lazy-init-name-hash --dump --multi | sort >out.multi && test_cmp out.single out.multi ' test_expect_success 'multithreaded should be faster' ' - $GIT_BUILD_DIR/t/helper/test-lazy-init-name-hash$X --perf >out.perf + test-lazy-init-name-hash --perf >out.perf ' test_done From e1ebb569c61d17e2f721f32084fcc7b7394b1692 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Scharfe?= Date: Sat, 13 May 2017 18:00:15 +0200 Subject: [PATCH 2/5] p0004: avoid using pipes The return code of commands on the producing end of a pipe is ignored. Evaluate the outcome of test-lazy-init-name-hash by calling sort separately. Signed-off-by: Rene Scharfe Acked-by: Jeff Hostetler Signed-off-by: Junio C Hamano --- t/perf/p0004-lazy-init-name-hash.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/t/perf/p0004-lazy-init-name-hash.sh b/t/perf/p0004-lazy-init-name-hash.sh index 716c951553..576bdc3c4e 100755 --- a/t/perf/p0004-lazy-init-name-hash.sh +++ b/t/perf/p0004-lazy-init-name-hash.sh @@ -7,9 +7,11 @@ test_perf_large_repo test_checkout_worktree test_expect_success 'verify both methods build the same hashmaps' ' - test-lazy-init-name-hash --dump --single | sort >out.single && - test-lazy-init-name-hash --dump --multi | sort >out.multi && - test_cmp out.single out.multi + test-lazy-init-name-hash --dump --single >out.single && + test-lazy-init-name-hash --dump --multi >out.multi && + sort sorted.single && + sort sorted.multi && + test_cmp sorted.single sorted.multi ' test_expect_success 'multithreaded should be faster' ' From 48a6ace8f5a504cea47d4058744982f2bfb81f2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Scharfe?= Date: Sat, 13 May 2017 18:02:32 +0200 Subject: [PATCH 3/5] p0004: use test_perf The perf test suite (more specifically: t/perf/aggregate.perl) requires each test script to write test results into a file, otherwise it aborts when aggregating. Add actual performance tests with test_perf to allow p0004 to be run together with other perf scripts. Calibrate the value for the parameter --count based on the size of the test repository, in order to get meaningful results with smaller repos yet still be able to finish the script against huge ones without having to wait for hours. Signed-off-by: Rene Scharfe Acked-by: Jeff Hostetler Signed-off-by: Junio C Hamano --- t/perf/p0004-lazy-init-name-hash.sh | 36 +++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/t/perf/p0004-lazy-init-name-hash.sh b/t/perf/p0004-lazy-init-name-hash.sh index 576bdc3c4e..d30c32f97b 100755 --- a/t/perf/p0004-lazy-init-name-hash.sh +++ b/t/perf/p0004-lazy-init-name-hash.sh @@ -18,4 +18,40 @@ test_expect_success 'multithreaded should be faster' ' test-lazy-init-name-hash --perf >out.perf ' +test_expect_success 'calibrate' ' + entries=$(wc -l Date: Sat, 13 May 2017 18:03:22 +0200 Subject: [PATCH 4/5] p0004: don't abort if multi-threaded is too slow If the single-threaded variant beats the multi-threaded one then we may have a performance bug, but that doesn't justify aborting the test. Drop that check; we can compare the results for --single and --multi using the actual performance tests. Signed-off-by: Rene Scharfe Acked-by: Jeff Hostetler Signed-off-by: Junio C Hamano --- t/perf/p0004-lazy-init-name-hash.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/t/perf/p0004-lazy-init-name-hash.sh b/t/perf/p0004-lazy-init-name-hash.sh index d30c32f97b..3c2135a185 100755 --- a/t/perf/p0004-lazy-init-name-hash.sh +++ b/t/perf/p0004-lazy-init-name-hash.sh @@ -14,10 +14,6 @@ test_expect_success 'verify both methods build the same hashmaps' ' test_cmp sorted.single sorted.multi ' -test_expect_success 'multithreaded should be faster' ' - test-lazy-init-name-hash --perf >out.perf -' - test_expect_success 'calibrate' ' entries=$(wc -l Date: Sat, 13 May 2017 18:03:50 +0200 Subject: [PATCH 5/5] p0004: don't error out if test repo is too small Repositories with less than 4000 entries are always handled using a single thread, causing test-lazy-init-name-hash --multi to error out. Don't abort the whole test script in that case, but simply skip the multi-threaded performance check. We can still use it to compare the single-threaded speed of different versions in that case. Signed-off-by: Rene Scharfe Acked-by: Jeff Hostetler Signed-off-by: Junio C Hamano --- t/perf/p0004-lazy-init-name-hash.sh | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/t/perf/p0004-lazy-init-name-hash.sh b/t/perf/p0004-lazy-init-name-hash.sh index 3c2135a185..8de5a98cfc 100755 --- a/t/perf/p0004-lazy-init-name-hash.sh +++ b/t/perf/p0004-lazy-init-name-hash.sh @@ -8,10 +8,13 @@ test_checkout_worktree test_expect_success 'verify both methods build the same hashmaps' ' test-lazy-init-name-hash --dump --single >out.single && - test-lazy-init-name-hash --dump --multi >out.multi && - sort sorted.single && - sort sorted.multi && - test_cmp sorted.single sorted.multi + if test-lazy-init-name-hash --dump --multi >out.multi + then + test_set_prereq REPO_BIG_ENOUGH_FOR_MULTI && + sort sorted.single && + sort sorted.multi && + test_cmp sorted.single sorted.multi + fi ' test_expect_success 'calibrate' ' @@ -46,7 +49,7 @@ test_perf "single-threaded, $desc" " test-lazy-init-name-hash --single --count=$count " -test_perf "multi-threaded, $desc" " +test_perf REPO_BIG_ENOUGH_FOR_MULTI "multi-threaded, $desc" " test-lazy-init-name-hash --multi --count=$count "