Skip to content

Commit 0b7500d

Browse files
ttaylorrgitster
authored andcommitted
t/perf: implement performance tests for pseudo-merge bitmaps
Implement a straightforward performance test demonstrating the benefit of pseudo-merge bitmaps by measuring how long it takes to count reachable objects in a few different scenarios: - without bitmaps, to demonstrate a reasonable baseline - with bitmaps, but without pseudo-merges - with bitmaps and pseudo-merges Results from running this test on git.git are as follows: Test this tree ----------------------------------------------------------------------------------- 5333.2: git rev-list --count --all --objects (no bitmaps) 3.54(3.45+0.08) 5333.3: git rev-list --count --all --objects (no pseudo-merges) 0.43(0.40+0.03) 5333.4: git rev-list --count --all --objects (with pseudo-merges) 0.12(0.11+0.01) On a private repository which is much larger, and has many spikey parts of history that aren't merged into the 'master' branch, the results are as follows: Test this tree --------------------------------------------------------------------------------------- 5333.1: git rev-list --count --all --objects (no bitmaps) 122.29(121.31+0.97) 5333.2: git rev-list --count --all --objects (no pseudo-merges) 21.88(21.30+0.58) 5333.3: git rev-list --count --all --objects (with pseudo-merges) 5.05(4.77+0.28) Signed-off-by: Taylor Blau <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 7252d9a commit 0b7500d

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

t/perf/p5333-pseudo-merge-bitmaps.sh

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#!/bin/sh
2+
3+
test_description='pseudo-merge bitmaps'
4+
. ./perf-lib.sh
5+
6+
test_perf_large_repo
7+
8+
test_expect_success 'setup' '
9+
git \
10+
-c bitmapPseudoMerge.all.pattern="refs/" \
11+
-c bitmapPseudoMerge.all.threshold=now \
12+
-c bitmapPseudoMerge.all.stableThreshold=never \
13+
-c bitmapPseudoMerge.all.maxMerges=64 \
14+
-c pack.writeBitmapLookupTable=true \
15+
repack -adb
16+
'
17+
18+
test_perf 'git rev-list --count --all --objects (no bitmaps)' '
19+
git rev-list --objects --all
20+
'
21+
22+
test_perf 'git rev-list --count --all --objects (no pseudo-merges)' '
23+
GIT_TEST_USE_PSEUDO_MERGES=0 \
24+
git rev-list --objects --all --use-bitmap-index
25+
'
26+
27+
test_perf 'git rev-list --count --all --objects (with pseudo-merges)' '
28+
GIT_TEST_USE_PSEUDO_MERGES=1 \
29+
git rev-list --objects --all --use-bitmap-index
30+
'
31+
32+
test_done

0 commit comments

Comments
 (0)