Johan Corveleyn <jcor...@gmail.com> writes:

> As I said in my previous response here, I think the reason for Paul to
> go for curl+autoversioning is speed, because it eliminates client-side
> deltification. It was suggested and demonstrated by Philip here:

Using a trunk build, I'm uploading 500MB urandom files:

  dd if=/dev/urandom bs=1M count=500 > u1.dat
  dd if=/dev/urandom bs=1M count=500 > u2.dat
  dd if=/dev/urandom bs=1M count=500 > u3.dat

using

  curl -T u1.dat http://localhost/repo/curl.dat
  curl -T u2.dat http://localhost/repo/curl.dat
  curl -T u3.dat http://localhost/repo/curl.dat

and

  svnmucc -mm put u1.dat http://localhost/repo/svn.dat
  svnmucc -mm put u2.dat http://localhost/repo/svn.dat
  svnmucc -mm put u3.dat http://localhost/repo/svn.dat

to a repository with compression-level=0 and enable-rep-sharing=false.

The upload that creates the file is faster than the upload that updates
the file:

           curl create time: 4.2s
           curl update time: 6.7s
     curl CPU in both cases: 0.2s

        svnmucc create time: 5.2s
        svnmucc update time: 7.7s
  svnmucc CPU in both cases: 1.2s

The difference between curl and svnmucc matches the extra CPU used by
svnmucc.

The difference between create and replace is due to the extra server CPU 

      httpd CPU create: 3.0s
     httpd CPU replace: 5.5s

The fact that the create is faster than the update means that if
uploading the data is the only thing that matters then breaking the
history and changing the update into a delete+recreate is faster, i.e.

  svnmucc -mm -U http://localhost/repo put u1.dat svn.dat
  svnmucc -mm -U http://localhost/repo rm svn.dat put u2.dat svn.dat
  svnmucc -mm -U http://localhost/repo rm svn.dat put u3.dat svn.dat

The delete+recreate takes the same 5.2s as the original create and is
faster than curl's 6.7s update.

-- 
Philip

Reply via email to