|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Distributed Version Control Systems (DVCS)
|
|
|
|
Version
|
|
|
|
|
|
|
|
|
|
|
Git
|
|
|
|
1.6.3.3
|
|
|
|
|
|
|
|
|
|
|
Hg
|
|
|
|
1.3.1
|
|
|
|
|
|
|
|
|
|
|
Bzr
|
|
|
|
1.17
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Benchmark test
|
2009-08-16
|
|
|
|
test script:
|
|
|
|
|
|
|
|
|
|
Debian/Ext3
|
|
|
|
|
DVCS PDF
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Conclusions
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Git
|
Numbers speak for themselves
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Hg
|
In average 10x slower than Git. The biggest problems are:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- commit performance
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- SSH Network clone performance (very slow)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Bzr
|
In average 1.4x..2x slower than Hg; The biggest problems are:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- "pure clone" and commit performance
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- cloning speed; extra "hoops" are needed to get efficient branching performance
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Notes
|
The tests are *artificial* by nature; Nobody commits over 7000 files in one pack
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
It would be interesting to import multiple kernels and see how the repos perform with more commits (log, branch, clone)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Branching in Bzr is speedy only if shared repositories are used: 'branch & switch' (1)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The times should not be considered *absolute*, but relative indication of speeds between different DCVS
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
For the purpose of relative testing, the used OS, CPU, Memory, HD or network information is ignored (absolute values aren't compared head-to-head)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Results (raw data)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Version
|
Size MiB
|
|
|
|
|
|
|
|
|
|
|
|
|
Kernel sources
|
2.6.30
|
326.6
|
|
Note: Kernel sources were from Debian source package (*.deb)
|
|
|
|
|
|
|
|
|
|
|
Times measured in seconds (real time)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TODO
|
= the test script currently lacks the test
|
|
|
|
|
(1) = Case of Bzr 'Shared repo': using command "switch"
|
|
|
|
|
|
|
|
|
|
will be implemented later
|
|
|
|
|
(2) = git --depth 1; bzr co --lightweight
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(3) Native protocol was used where available: like bzr+ssh:// Hg took staggering 23 minutes
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(4) Case of Bzr 'Shared repo': top-level shared repo size was not counted with
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Default setup / No special options
|
|
|
Additional repo init options
|
|
|
|
PERCENTAGE SUMMARY
|
|
|
|
|
|
|
Kernel import
|
|
|
--pack-0.92
|
--2a
|
--rich-root-pack
|
init-repo --2a
|
|
Difference in percentages (%); lower = better
|
|
|
|
|
|
|
|
|
|
(default)
|
(new)
|
(old)
|
Shared repo
|
|
|
(defaults)
|
--2a
|
Shared repo
|
|
|
|
|
Git 1.6.3.3
|
Hg 1.3.1
|
Bzr 1.17
|
Bzr 1.17
|
Bzr 1.17
|
Bzr 1.17
|
|
Hg vs. Git
|
Bzr vs. Git
|
Bzr vs. Hg
|
Bzr vs. Hg
|
|
|
|
init
|
0.03
|
0.05
|
0.90
|
0.90
|
0,75
|
1.50
|
|
67
|
2900
|
1700
|
2900
|
|
|
|
add
|
26.00
|
1.80
|
5.50
|
5.50
|
5,50
|
6.20
|
|
-93
|
-79
|
206
|
244
|
|
|
|
commit
|
0.60
|
45.00
|
48.00
|
51.00
|
47.00
|
62.00
|
|
7400
|
7900
|
13
|
38
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Patch Kernel sources to previous version (2.6.NN – 1); 7552 files in one commit
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Git
|
Hg
|
Bzr
|
|
|
|
|
|
|
|
|
|
|
|
add
|
6.30
|
0.50
|
2.80
|
3.20
|
3.00
|
3.50
|
|
-92
|
-56
|
540
|
600
|
|
|
|
commit
|
0.50
|
20.00
|
37.00
|
24.00
|
39.00
|
25.00
|
|
3900
|
7300
|
20
|
25
|
25
|
|
|
log
|
0.01
|
0.15
|
0.19
|
0.19
|
0.19
|
0.20
|
|
1400
|
1800
|
27
|
33
|
33
|
|
|
diff (one file: head/tip - 1)
|
TODO
|
0.50
|
3.20
|
1.11
|
3.50
|
|
|
|
|
122
|
|
|
|
|
branch
|
0.01
|
0.10
|
71.00
|
71.00
|
71.00
|
0.30
|
(1)
|
900
|
|
|
200
|
|
|
|
clone local full
|
20.00
|
30.00
|
71.00
|
71.00
|
71.00
|
71.00
|
|
50
|
255
|
137
|
137
|
137
|
|
|
clone local lightweight (git, bzr only)
|
26.00
|
N/A
|
42.00
|
55.00
|
45.00
|
|
(2)
|
|
|
|
|
|
|
|
clone local --stacked (bzr only)
|
|
N/A
|
41.00
|
50.00
|
38.00
|
|
|
|
|
|
|
|
|
|
clone over network: ssh push
|
TODO
|
1390.00
|
240.00
|
280.00
|
240.00
|
|
(3)
|
|
|
-80
|
|
|
|
|
clone over network: ssh pull
|
320.00
|
|
750.00
|
675.00
|
750.00
|
|
(3)
|
|
134
|
|
|
|
|
|
Clone over network: http pull
|
TODO
|
TODO
|
TODO
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1232
|
2325
|
169
|
99
|
65
|
<= colored average
|
|
Repository size
|
326.60
|
<= original source
|
|
|
|
|
|
|
|
|
199
|
|
<= Group all average
|
|
|
Git
|
Hg
|
Bzr
|
|
|
|
|
Hg vs. Git
|
Bzr vs. Git
|
Bzr vs. Hg
|
|
|
|
|
init and commit
|
460.10
|
466.63
|
451.63
|
447.20
|
451.60
|
400.30
|
(4)
|
1
|
-2
|
-4
|
|
|
|
|
patch and commit
|
507.70
|
469.89
|
457.52
|
488.69
|
457.50
|
400.30
|
|
-7
|
-10
|
4
|
|
|
|
|
clone local full
|
506.80
|
466.95
|
453.90
|
485.64
|
454.00
|
400.30
|
|
-8
|
-10
|
4
|
|
|
|
|
clone local lightweight
|
506.80
|
N/A
|
353.61
|
353.61
|
|
|
|
|
|
|
|
|
|
|
clone --stacked (bzr only)
|
|
|
353.69
|
353.69
|
|
|
|
|
|
|
|
|
|
|
clone local full % bigger
|
55.17
|
42.97
|
38.98
|
48.70
|
39.01
|
22.57
|
|
-5
|
-7
|
1
|
|
|
<= Percentage difference; average
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Graphics from the values above
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kernel import (seconds): init (blue; mostly not visible),add (lime), commit (red)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Patch Kernel Sources (seconds): git (blue), Hg, Bzr
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Repository sizes compared to original sources (MiB): Git (blue), Hg, Bzr
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|