Hi there,
as I promised, I'm going to conduct some in-depth
analysis and comprehensive SVN performance testing.
That is very time-consuming process.
However, it seems that many people have incorrect
or outdated ideas about the current state of affairs.
To add a bit more substance to the discussion, I like
to present some preliminary data and not to wait
until I collected all data I intend to.
Side note: Maybe, these numbers make it clearer why
my patches should be committed after review.
Bottom line:
* SVN servers tend to be CPU-limited
(we already observed that problem @ our company
with SVN 1.4)
* packed repositories are ~20% faster than non-packed,
non-sharded
* optimal file cache size is roughly /trunk size
(plus branch diffs, but that is yet to be quantified)
* "cold" I/O from a low-latency source takes 2 .. 3 times
as long as from cached data
* a fully patched 1.7 server is twice as fast as 1.6.9
"Export" has been chosen to eliminate problems
with client-side w/c performance.
Please note that all measurements were taken in
a true client/server setup. You can achieve similar
performance in low-latency broad-band networks.
-- Stefan^2.
Test system
-----------
2x XEON 5550 (8 cores total), 2.66GHz, hyper-threading disabled, turbo boost
disabled
24GB RAM
4x128GB cheapo ssd on RAID-0 controller w/ 256 MB cache
LINUX 2.6.28-18-generic SMP
64 bits
repositories on ext4
export to tempfs
Repository mirrors used
-----------------------
tsvn : mirror of tortoisesvn.tigris.org repository, non-sharded,
non-packed SVN 1.5 format
export of /tr...@head
tsvn_packed: mirror of tortoisesvn.tigris.org repository, packed SVN 1.6 format
export of /tr...@head
apache.org : mirror of apache.org repository, packed SVN 1.6 format
export of /subversion/tr...@head
kde.org : mirror of kde.org repository, packed SVN 1.6 format
export of /tr...@head
criterion tsvn tsvn_packed apache.org kde.org
repo size 5.3G 4.8G 30.4G 58.4G
revisions 18,937 18,937 943,322 1,125,690
export items 3,840 3,840 1,941 399,419
export size 81M 81M 38M 8.4G
Export using the old server
---------------------------
~/subversion-1.6.9/subversion/svnserve/svnserve -d -T -r /mnt/archive/svnroot/
time svn-1.6.9 export --ignore-externals -q svn://localhost/$TOEXPORT /dev/shm/t
1st run tsvn tsvn_packed apache.org kde.org
real 0m10.242s 0m9.774s 0m7.473s 20m4.354s
user 0m2.280s 0m2.372s 0m1.104s 2m39.870s
sys 0m0.428s 0m0.424s 0m0.236s 0m35.590s
2nd run tsvn tsvn_packed apache.org kde.org
real 0m5.494s 0m4.907s 0m3.045s 11m4.798s
user 0m2.416s 0m2.484s 0m1.136s 2m45.506s
sys 0m0.352s 0m0.328s 0m0.216s 0m37.718s
Export using the new server + patches, wire-compression off
-----------------------------------------------------------
~/subversion-1.7.patched/subversion/svnserve/svnserve -d -T -r
/mnt/archive/svnroot/
time svn-1.6.9 export --ignore-externals -q svn://localhost/$TOEXPORT /dev/shm/t
1st run tsvn tsvn_packed apache.org kde.org
real 0m6.453s 0m5.817s 0m6.119s 13m22.418s
user 0m1.572s 0m1.680s 0m0.784s 1m42.710s
sys 0m0.544s 0m0.572s 0m0.252s 0m40.351s
2nd run tsvn tsvn_packed apache.org kde.org
real 0m2.520s 0m2.092s 0m1.792s 5m45.944s
user 0m1.360s 0m1.228s 0m0.796s 1m38.662s
sys 0m0.400s 0m0.392s 0m0.224s 0m36.386s
Resource usage
--------------
These numbers are for the patched server
criterion tsvn tsvn_packed apache.org kde.org
cache usage 97M 106M 61M 10.0G
Typical CPU load during 1st KDE export (100% == 1 core)
~70 .. 100% CPU load (svnserve)
~20 .. 40% CPU load (svn)
~10 .. 20% sys
Typical CPU load during 2nd KDE export (100% == 1 core)
~100% CPU load (svnserve)
~20 .. 70% CPU load (svn)
~15 .. 30% sys