[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: Performance regression with reverse merge

From: Paul Burba <ptburba_at_gmail.com>
Date: Mon, 2 Mar 2009 11:16:38 -0500

On Sun, Mar 1, 2009 at 3:34 PM, Mark Phippard <markphip_at_gmail.com> wrote:
> On Sun, Mar 1, 2009 at 2:52 PM, Stefan Fuhrmann
> <stefanfuhrmann_at_alice-dsl.de> wrote:
>> On Sunday 01 March 2009 18:33:48 Mark Phippard wrote:
>>
>>> > $ uname -a
>>> > Linux opti 2.6.24-23-generic #1 SMP Mon Jan 26 00:13:11 UTC 2009 i686
>>> > GNU/Linux $ svn --version
>>> > svn, version 1.4.6 (r28521)
>>>
>>> Since you are calling this a 1.6 regression, why are you not comparing
>>> against 1.5.6?
>>
>> Sorry! My bad; I wanted the post out quickly and had no
>> 1.5 on my machine.
>>
>> 1.5.6 numbers:
>>
>> $ time ./svn merge -r 15456:15455
>> http://tortoisesvn.tigris.org/svn/tortoisesvn/trunk ~/TSVN3
>> --- Reverse-merging r15456 into
>> '/home/stefan/TSVN3/src/TortoiseProc/RevisionGraph/RevisionGraphDlg.cpp':
>> U    /home/stefan/TSVN3/src/TortoiseProc/RevisionGraph/RevisionGraphDlg.cpp
>> --- Reverse-merging r15456 into
>> '/home/stefan/TSVN3/src/TortoiseProc/RevisionGraph/RevisionGraphDlg.h':
>> U    /home/stefan/TSVN3/src/TortoiseProc/RevisionGraph/RevisionGraphDlg.h
>>
>> real    6m52.263s
>> user    0m2.220s
>> sys     0m0.564s
>>
>> So, this is basically the same as for 1.6.
>> Obviously, I never needed to undo revisions
>> for quite a long time.
>
> So then there is no release blocking 1.6 regression here.  Agree?
> Mainly we need to look into why this is slow and see if it can be
> improved.
>
> pburba made an optimization so that if your WC is at a single uniform
> revision that it does some performance stuff that made a big
> difference.  I wonder if it is not implemented for reverse merge?

Mark,

You are referring to r33112 yes? That change improved the performance
of libsvn_client/merge.c:filter_self_referential_mergeinfo(), but that
function isn't even called during reverse merges since r33026, so that
is not the cause of the poor performance in this case.

> Can
> you try merging a single revision from a branch to see if the
> performance is similar or better?
>
>>> > $ svn co http://tortoisesvn.tigris.org/svn/tortoisesvn/trunk -r15533
>>> > ~/TSVN > /dev/null
>>>
>>> You might have mentioned how long it takes this checkout to run?  I am
>>> running checkout from a box in the CollabNet network and it is still
>>> taking forever.
>>
>> Hm. Around 4 minutes here, including externals.
>> I didn't want to clutter my post with numbers
>> that I didn't consider relevant for merge performance.
>
> That is strange.  I was basically LAN-connected to tigris and I think
> checkout took between 15 and 20 minutes.  It was long enough that I
> decided it was taking a long time and that I'd also run the tests on a
> different system (Windows).  Managed to connect to that box, run the
> diff tests, find and install the timethis.exe software and get most of
> the "src" checkout done.

FWIW here is my timing:

=========
1.6.0.RC3
=========

1.6.0.RC3>timethis svn merge -r 15456:15455
http://tortoisesvn.tigris.org/svn/tortoisesvn/trunk

TimeThis : Command Line : svn merge -r 15456:15455
http://tortoisesvn.tigris.org/svn/tortoisesvn/trunk
TimeThis : Start Time : Mon Mar 02 09:47:28 2009

--- Reverse-merging r15456 into
'src\TortoiseProc\RevisionGraph\RevisionGraphDlg.cpp':
U src\TortoiseProc\RevisionGraph\RevisionGraphDlg.cpp
--- Reverse-merging r15456 into
'src\TortoiseProc\RevisionGraph\RevisionGraphDlg.h':
U src\TortoiseProc\RevisionGraph\RevisionGraphDlg.h

TimeThis : Command Line : svn merge -r 15456:15455
http://tortoisesvn.tigris.org/svn/tortoisesvn/trunk
TimeThis : Start Time : Mon Mar 02 09:47:28 2009
TimeThis : End Time : Mon Mar 02 09:56:25 2009
TimeThis : Elapsed Time : 00:08:57.296

What is interesting, if we do this merge with --ignore-ancestry, which
effectively disables all merge tracking, the merge is much quicker
(appx 3 minutes vs 9 minutes) but is still much slower in 1.6.0/1.5.6
when compared to 1.4.6 (i.e. appx 3 minutes vs 8 seconds). So there
is something else slowing us down too:

===========================
1.6.0.RC3 --ignore-ancestry
===========================

1.6.0.RC3>C:\SVN\TSVN>timethis svn merge -r 15456:15455
http://tortoisesvn.tigris.org/svn/tortoisesvn/trunk --ignore-ancestry

TimeThis : Command Line : svn merge -r 15456:15455
http://tortoisesvn.tigris.org/svn/tortoisesvn/trunk --ignore-ancestry
TimeThis : Start Time : Mon Mar 02 10:04:29 2009

--- Reverse-merging r15456 into
'src\TortoiseProc\RevisionGraph\RevisionGraphDlg.cpp':
U src\TortoiseProc\RevisionGraph\RevisionGraphDlg.cpp
--- Reverse-merging r15456 into
'src\TortoiseProc\RevisionGraph\RevisionGraphDlg.h':
U src\TortoiseProc\RevisionGraph\RevisionGraphDlg.h

TimeThis : Command Line : svn merge -r 15456:15455
http://tortoisesvn.tigris.org/svn/tortoisesvn/trunk --ignore-ancestry
TimeThis : Start Time : Mon Mar 02 10:04:29 2009
TimeThis : End Time : Mon Mar 02 10:07:27 2009
TimeThis : Elapsed Time : 00:02:58.562

=======================
1.5.6 --ignore-ancestry
=======================

1.5.6>C:\SVN\TSVN.1.5.6>timethis svn merge -r 15456:15455
http://tortoisesvn.tigris.org/svn/tortoisesvn/trunk --ignore-ancestry

TimeThis : Command Line : svn merge -r 15456:15455
http://tortoisesvn.tigris.org/svn/tortoisesvn/trunk --ignore-ancestry
TimeThis : Start Time : Mon Mar 02 10:23:01 2009

--- Reverse-merging r15456 into
'src\TortoiseProc\RevisionGraph\RevisionGraphDlg.cpp':
U src\TortoiseProc\RevisionGraph\RevisionGraphDlg.cpp
--- Reverse-merging r15456 into
'src\TortoiseProc\RevisionGraph\RevisionGraphDlg.h':
U src\TortoiseProc\RevisionGraph\RevisionGraphDlg.h

TimeThis : Command Line : svn merge -r 15456:15455
http://tortoisesvn.tigris.org/svn/tortoisesvn/trunk --ignore-ancestry
TimeThis : Start Time : Mon Mar 02 10:23:01 2009
TimeThis : End Time : Mon Mar 02 10:26:02 2009
TimeThis : Elapsed Time : 00:03:00.937

=====
1.4.6
=====

1.4.6>C:\SVN\TSVN.1.4.6>timethis svn merge -r 15456:15455
http://tortoisesvn.tigris.org/svn/tortoisesvn/trunk

TimeThis : Command Line : svn merge -r 15456:15455
http://tortoisesvn.tigris.org/svn/tortoisesvn/trunk
TimeThis : Start Time : Mon Mar 02 10:34:32 2009

U src\TortoiseProc\RevisionGraph\RevisionGraphDlg.cpp
U src\TortoiseProc\RevisionGraph\RevisionGraphDlg.h

TimeThis : Command Line : svn merge -r 15456:15455
http://tortoisesvn.tigris.org/svn/tortoisesvn/trunk
TimeThis : Start Time : Mon Mar 02 10:34:32 2009
TimeThis : End Time : Mon Mar 02 10:34:41 2009
TimeThis : Elapsed Time : 00:00:08.171

Paul

------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=1256875
Received on 2009-03-02 17:17:07 CET

This is an archived mail posted to the Subversion Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.