Skip to content

Commit 2e85e4c

Browse files
derrickstoleegitster
authored andcommitted
p2000: add sparse-index repos
p2000-sparse-operations.sh compares different Git commands in repositories with many files at HEAD but using sparse-checkout to focus on a small portion of those files. Add extra copies of the repository that use the sparse-index format so we can track how that affects the performance of different commands. At this point in time, the sparse-index is 100% overhead from the CPU front, and this is measurable in these tests: Test --------------------------------------------------------------- 2000.2: git status (full-index-v3) 0.59(0.51+0.12) 2000.3: git status (full-index-v4) 0.59(0.52+0.11) 2000.4: git status (sparse-index-v3) 1.40(1.32+0.12) 2000.5: git status (sparse-index-v4) 1.41(1.36+0.08) 2000.6: git add -A (full-index-v3) 2.32(1.97+0.19) 2000.7: git add -A (full-index-v4) 2.17(1.92+0.14) 2000.8: git add -A (sparse-index-v3) 2.31(2.21+0.15) 2000.9: git add -A (sparse-index-v4) 2.30(2.20+0.13) 2000.10: git add . (full-index-v3) 2.39(2.02+0.20) 2000.11: git add . (full-index-v4) 2.20(1.94+0.16) 2000.12: git add . (sparse-index-v3) 2.36(2.27+0.12) 2000.13: git add . (sparse-index-v4) 2.33(2.21+0.16) 2000.14: git commit -a -m A (full-index-v3) 2.47(2.12+0.20) 2000.15: git commit -a -m A (full-index-v4) 2.26(2.00+0.17) 2000.16: git commit -a -m A (sparse-index-v3) 3.01(2.92+0.16) 2000.17: git commit -a -m A (sparse-index-v4) 3.01(2.94+0.15) Note that there is very little difference between the v3 and v4 index formats when the sparse-index is enabled. This is primarily due to the fact that the relative file sizes are the same, and the command time is mostly taken up by parsing tree objects to expand the sparse index into a full one. With the current file layout, the index file sizes are given by this table: | full index | sparse index | +-------------+--------------+ v3 | 108 MiB | 1.6 MiB | v4 | 80 MiB | 1.2 MiB | Future updates will improve the performance of Git commands when the index is sparse. Signed-off-by: Derrick Stolee <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 5f7dc33 commit 2e85e4c

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

t/perf/p2000-sparse-operations.sh

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,29 @@ test_expect_success 'setup repo and indexes' '
5959
git sparse-checkout set $SPARSE_CONE &&
6060
git config index.version 4 &&
6161
git update-index --index-version=4
62+
) &&
63+
git -c core.sparseCheckoutCone=true clone --branch=wide --sparse . sparse-index-v3 &&
64+
(
65+
cd sparse-index-v3 &&
66+
git sparse-checkout init --cone --sparse-index &&
67+
git sparse-checkout set $SPARSE_CONE &&
68+
git config index.version 3 &&
69+
git update-index --index-version=3
70+
) &&
71+
git -c core.sparseCheckoutCone=true clone --branch=wide --sparse . sparse-index-v4 &&
72+
(
73+
cd sparse-index-v4 &&
74+
git sparse-checkout init --cone --sparse-index &&
75+
git sparse-checkout set $SPARSE_CONE &&
76+
git config index.version 4 &&
77+
git update-index --index-version=4
6278
)
6379
'
6480

6581
test_perf_on_all () {
6682
command="$@"
67-
for repo in full-index-v3 full-index-v4
83+
for repo in full-index-v3 full-index-v4 \
84+
sparse-index-v3 sparse-index-v4
6885
do
6986
test_perf "$command ($repo)" "
7087
(

0 commit comments

Comments
 (0)