[Svnmerge] [PATCH] Bidirectional patch take 2

Blair Zajac blair at orcaware.com
Fri Feb 24 11:59:10 PST 2006


Giovanni Bajo wrote:
> Blair Zajac <blair at orcaware.com> wrote:
> 
> 
>>>Please run timing tests with and without the --bidirectional flags,
>>>especially if you are using a repository that does not do
>>>bidirectional merges.
>>>The optimization in the patched svnmerge.py should show
>>>almost no speed loss.
>>>
>>>If people cannot show a speed hit for enabling this feature by
>>>default, I'll
>>>plan on doing so.
> 
> 
> $ echo $GCCREPO
> svn+ssh://giovannibajo@gcc.gnu.org/svn/gcc
> 
> $ time svn log --quiet -r100000:110000 $GCCREPO/trunk 2>&1 >/dev/null
> real    0m21.590s
> user    0m0.188s
> sys     0m0.044s
> 
> $ time svn log --quiet -r100000:110000 $GCCREPO/trunk 2>&1 >/dev/null
> real    0m22.816s
> user    0m0.192s
> sys     0m0.040s
> 
> $ time svn log --quiet -r100000:110000 $GCCREPO/trunk 2>&1 >/dev/null
> real    0m21.248s
> user    0m0.180s
> sys     0m0.092s
> 
> 
> 
> $ time svn log --verbose --quiet -r100000:110000 $GCCREPO/trunk 2>&1 >/dev/null
> real    0m42.020s
> user    0m0.688s
> sys     0m0.108s
> 
> $ time svn log --verbose --quiet -r100000:110000 $GCCREPO/trunk 2>&1 >/dev/null
> real    0m44.731s
> user    0m0.652s
> sys     0m0.088s
> 
> $ time svn log --verbose --quiet -r100000:110000 $GCCREPO/trunk 2>&1 >/dev/null
> real    0m52.781s
> user    0m0.668s
> sys     0m0.108s
> 
> 
> So, logging is basically twice as slower. Even if the merge time dominates, I'm
> unsure whether we want to add this gratuitous overhead for users not doing
> bidirectional merges.

I was able to reproduce the doubling of time against the gcc repository.  Also, 
the amount of data sent by the server to the client is significant, if you send 
the output of those commands to wc.  Adding the -v flag increases the amount of 
data by a factor of four.

$ svn log -q -r 100000:110000 svn://gcc.gnu.org/svn/gcc/trunk|wc
    9283   55693  635490
$ svn log -v -q -r 100000:110000 svn://gcc.gnu.org/svn/gcc/trunk|wc
   61021  160407 3107837

I did some tests against our internal Subversion server using a similar 10,000 
revision range, but from the top of the repository, not from a trunk, since we 
have 50+ projects in the repository, each with their own trunk.  This is over a LAN:

$ /usr/bin/time svn log -q -r90000:100000 http://svn/svn/repos | wc
0.38user 0.10system 0:18.02elapsed 2%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+922minor)pagefaults 0swaps
   20003  120120 1358764
$ /usr/bin/time svn log -q -r90000:100000 http://svn/svn/repos | wc
0.40user 0.09system 0:18.26elapsed 2%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+918minor)pagefaults 0swaps
   20003  120120 1358764
$ /usr/bin/time svn log -q -r90000:100000 http://svn/svn/repos | wc
0.41user 0.10system 0:18.06elapsed 2%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+919minor)pagefaults 0swaps
   20003  120120 1358764


$ /usr/bin/time svn log -v -q -r90000:100000 http://svn/svn/repos | wc
0.87user 0.17system 0:18.39elapsed 5%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+1243minor)pagefaults 0swaps
   63417  218167 3706655
$ /usr/bin/time svn log -v -q -r90000:100000 http://svn/svn/repos | wc
0.91user 0.13system 0:18.38elapsed 5%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+1244minor)pagefaults 0swaps
   63417  218167 3706655
$ /usr/bin/time svn log -v -q -r90000:100000 http://svn/svn/repos | wc
1.02user 0.16system 0:20.49elapsed 5%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (0major+1243minor)pagefaults 0swaps
   63417  218167 3706655

There's almost no difference in clock time and more than a doubling of the data 
printed by svn log.

So this tells me that svn log is being bandwidth limited, not server limited, at 
least in the gcc repository case.

So the two times performance impact doesn't happen everywhere, which is a good 
thing.  So people working in an enterprise environment won't be affected.

Given this, can we get some standard svnmerge.py commands that the gcc people 
will be running?  Give us some sample commands that we can run ourselves.

I would like to find out a common revision range that svnmerge.py will look over.

Also, even if svn log -v is two times slower for gcc, then if the svnmerge.py 
run takes several seconds, than that's different than doubling from a minute to 
two minutes.

So the more data we have to make a decision, the better.

We need those svnmerge.py commands the gcc people are running :)

Regards,
Blair



More information about the Svnmerge mailing list