I timed 'svn export' of a 146MB subdirectory of a format-21 working
copy to a linux tmpfs.  Below, 't1' is pristine tr...@head and 't2' is
tr...@head plus the patch at the top of this thread:

% cd /tmp/ram
% mount | grep $PWD
tmpfs on /tmp/ram type tmpfs (rw,nosuid,nodev,noatime)
% rm -f /tmp/five-{t1,t2}
% for j in $(seq 5); do 
   for ii in t1 t2; do  
    .svn $ii;
    rm -rf ./$ii;
    (time $svn export -q ~/src/asf/infra/trunk/ ./$ii) 2>&1 | tee -a 
../five-$ii;
    rm -rf ./$ii;
   done;
  done
% cat /tmp/five-t1
$svn export -q ~/src/asf/infra/trunk/ ./$ii  3.26s user 2.36s system 37% cpu 
15.035 total
$svn export -q ~/src/asf/infra/trunk/ ./$ii  3.29s user 2.58s system 29% cpu 
20.046 total
$svn export -q ~/src/asf/infra/trunk/ ./$ii  3.41s user 2.36s system 29% cpu 
19.664 total
$svn export -q ~/src/asf/infra/trunk/ ./$ii  3.36s user 2.45s system 30% cpu 
19.222 total
$svn export -q ~/src/asf/infra/trunk/ ./$ii  3.32s user 2.39s system 29% cpu 
19.156 total
% cat /tmp/five-t2
$svn export -q ~/src/asf/infra/trunk/ ./$ii  3.40s user 2.35s system 32% cpu 
17.823 total
$svn export -q ~/src/asf/infra/trunk/ ./$ii  3.51s user 2.64s system 26% cpu 
22.859 total
$svn export -q ~/src/asf/infra/trunk/ ./$ii  3.26s user 2.49s system 29% cpu 
19.313 total
$svn export -q ~/src/asf/infra/trunk/ ./$ii  3.28s user 2.37s system 29% cpu 
19.312 total
$svn export -q ~/src/asf/infra/trunk/ ./$ii  3.24s user 2.30s system 28% cpu 
19.329 total
%

It seems that the second set of results is slightly slower?

Daniel


Danny Trebbien wrote on Sat, Nov 27, 2010 at 09:46:34 -0800:
> > To the point, I originally asked if your changes affected the performance
> > of checkout/export.  That is not a reason to stop the patch in its tracks;
> > it's a question that should be answered (either way) and the patch then
> > proceed.  So, firstly, do your changes have any noticeable performance
> > effect, or is the effect of the added per-line condition simply not
> > noticeable?
> 
> I don't have benchmarks, but it does not seem that the performance of
> my tests are noticeably degraded.  These tests aren't extensive,
> however, so I am not sure whether a much larger Subversion operation
> that uses the changes (such as running the patched `svnsync` to sync
> the GNU Nano repository) is impacted.
> 
> Note that when EOL_TRANSLATED is NULL, the overhead is a single NULL
> check for each line.
> 
> > If the latter, then I apologize (to Daniel) for your having spent time
> > writing patches (in various "creative" ways :)) that address what is
> > a non-problem.
> 
> It's not a big deal, and I think that it helped me to understand the
> code more fully.  Besides, I may have another option.
> 
> This other idea is based on knowledge that b->repair is usually FALSE.
>  Given this, I examined one of the if statements:
> 
> if ((! b->repair) && DIFFERENT_EOL_STRINGS(src_format,
> *src_format_len, newline_buf, newline_len))
> 
> The `DIFFERENT_EOL_STRINGS` check will run whenever b->repair is
> FALSE.  So, I check `DIFFERENT_EOL_STRINGS` first and if that check is
> TRUE, I then check !b->repair, else check to see whether
> *b->eol_translated needs to be set to TRUE:
> <https://github.com/dtrebbien/subversion/commit/d22329a54dcf58cddc2b618f913597c6defbcb2d>.
>  What do you all think?
> 
> The upside is that unnecessary NULL checks of TRANSLATED_EOL are
> dynamically elided under normal conditions.
> 
> The downsides are:
> 
> 1.)  Another assumption must be made (namely, that the EOL_STR string
> is not varied between calls to translate_newline() using the same
> translation baton).
> 
> 2.)  It complicates the logic.
> 
> 3.)  This penalizes repair translations.

Reply via email to