[PATCH 23/30] p5313: add size comparison test
- From
Derrick Stolee via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Sep 10, 2024, 02:28 UTC
- Message-ID
- <54bd80701fb9b55910d6d8453f235872fe549fdd.1725935335.git.gitgitgadget@gmail.com>
- In-Reply-To
- <pull.1786.git.1725935335.gitgitgadget@gmail.com>
From: Derrick Stolee <stolee@gmail.com>
To test the benefits of the new --path-walk option in 'git pack-objects', create a performance test that times the process but also compares the size of the output.
Against the microsoft/fluentui repo [1] against a particular commit [2], this has reproducible results of a similar scale:
Test this tree --------------------------------------------------------------- 5313.2: thin pack 0.39(0.48+0.03) 5313.3: thin pack size 1.2M 5313.4: thin pack with --path-walk 0.09(0.07+0.01) 5313.5: thin pack size with --path-walk 20.8K 5313.6: big recent pack 2.13(8.29+0.26) 5313.7: big recent pack size 17.7M 5313.8: big recent pack with --path-walk 3.18(4.21+0.22) 5313.9: big recent pack size with --path-walk 15.0M
[1] https://github.com/microsoft/reactui [2] e70848ebac1cd720875bccaa3026f4a9ed700e08
RFC TODO: Note that the path-walk version is slower for the big case, but the delta calculation is single-threaded with the current implementation! It's still faster for the small case that mimics a typical push.
Signed-off-by: Derrick Stolee <stolee@gmail.com> --- t/perf/p5313-pack-objects.sh | 55 ++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100755 t/perf/p5313-pack-objects.sh
diff --git a/t/perf/p5313-pack-objects.sh b/t/perf/p5313-pack-objects.sh new file mode 100755 index 00000000000..fdcdf188f95 --- /dev/null +++ b/t/perf/p5313-pack-objects.sh @@ -0,0 +1,55 @@ +#!/bin/sh + +test_description='Tests pack performance using bitmaps' +. ./perf-lib.sh + +GIT_TEST_PASSING_SANITIZE_LEAK=0 +export GIT_TEST_PASSING_SANITIZE_LEAK + +test_perf_large_repo + +test_expect_success 'create rev input' ' + cat >in-thin <<-EOF && + $(git rev-parse HEAD) + ^$(git rev-parse HEAD~1) + EOF + + cat >in-big-recent <<-EOF + $(git rev-parse HEAD) + ^$(git rev-parse HEAD~1000) + EOF +' + +test_perf 'thin pack' ' + git pack-objects --thin --stdout --revs --sparse <in-thin >out +' + +test_size 'thin pack size' ' + wc -c <out +' + +test_perf 'thin pack with --path-walk' ' + git pack-objects --thin --stdout --revs --sparse --path-walk <in-thin >out +' + +test_size 'thin pack size with --path-walk' ' + wc -c <out +' + +test_perf 'big recent pack' ' + git pack-objects --stdout --revs <in-big-recent >out +' + +test_size 'big recent pack size' ' + wc -c <out +' + +test_perf 'big recent pack with --path-walk' ' + git pack-objects --stdout --revs --path-walk <in-big-recent >out +' + +test_size 'big recent pack size with --path-walk' ' + wc -c <out +' + +test_done
-- gitgitgadget