Skip to content

Commit 112a9fe

Browse files
neerajsi-msftgitster
authored andcommitted
core.fsyncmethod: performance tests for batch mode
Add basic performance tests for git commands that can add data to the object database. We cover: * git add * git stash * git update-index (via git stash) * git unpack-objects * git commit --all We cover all currently available fsync methods as well. Signed-off-by: Neeraj Singh <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 5dccd91 commit 112a9fe

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed

t/perf/p0008-odb-fsync.sh

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
#!/bin/sh
2+
#
3+
# This test measures the performance of adding new files to the object
4+
# database. The test was originally added to measure the effect of the
5+
# core.fsyncMethod=batch mode, which is why we are testing different values of
6+
# that setting explicitly and creating a lot of unique objects.
7+
8+
test_description="Tests performance of adding things to the object database"
9+
10+
. ./perf-lib.sh
11+
12+
. $TEST_DIRECTORY/lib-unique-files.sh
13+
14+
test_perf_fresh_repo
15+
test_checkout_worktree
16+
17+
dir_count=10
18+
files_per_dir=50
19+
total_files=$((dir_count * files_per_dir))
20+
21+
populate_files () {
22+
test_create_unique_files $dir_count $files_per_dir files
23+
}
24+
25+
setup_repo () {
26+
(rm -rf .git || 1) &&
27+
git init &&
28+
test_commit first &&
29+
populate_files
30+
}
31+
32+
test_perf_fsync_cfgs () {
33+
local method &&
34+
local cfg &&
35+
for method in none fsync batch writeout-only
36+
do
37+
case $method in
38+
none)
39+
cfg="-c core.fsync=none"
40+
;;
41+
*)
42+
cfg="-c core.fsync=loose-object -c core.fsyncMethod=$method"
43+
esac &&
44+
45+
# Set GIT_TEST_FSYNC=1 explicitly since fsync is normally
46+
# disabled by t/test-lib.sh.
47+
if ! test_perf "$1 (fsyncMethod=$method)" \
48+
--setup "$2" \
49+
"GIT_TEST_FSYNC=1 git $cfg $3"
50+
then
51+
break
52+
fi
53+
done
54+
}
55+
56+
test_perf_fsync_cfgs "add $total_files files" \
57+
"setup_repo" \
58+
"add -- files"
59+
60+
test_perf_fsync_cfgs "stash $total_files files" \
61+
"setup_repo" \
62+
"stash push -u -- files"
63+
64+
test_perf_fsync_cfgs "unpack $total_files files" \
65+
"
66+
setup_repo &&
67+
git -c core.fsync=none add -- files &&
68+
git -c core.fsync=none commit -q -m second &&
69+
echo HEAD | git pack-objects -q --stdout --revs >test_pack.pack &&
70+
setup_repo
71+
" \
72+
"unpack-objects -q <test_pack.pack"
73+
74+
test_perf_fsync_cfgs "commit $total_files files" \
75+
"
76+
setup_repo &&
77+
git -c core.fsync=none add -- files &&
78+
populate_files
79+
" \
80+
"commit -q -a -m test"
81+
82+
test_done

0 commit comments

Comments
 (0)