Hi everyone,

in research for an article about svn 1.7, I setup my own benchmarks
comparing trunk against branches/1.6.x.

It's a pseudo-randomized test aimed at wc-ng. It does a "complete" tree
creation, edit, copy, edit more, merge, resolve... cycle. Svn operations are
timed by name. ra_local only. Each run is identical (same random seed).

The whole runtime was measured, including I/O wait and whatnot. There was no
other load on the machine and no swapping of memory to/fro disk.


Results:

Even though some operations are now a lot slower compared to 1.6.x, a few do
get faster. *Overall*, in a working copy with "balanced" dir/file tree,
trunk takes about 1.6 times the time 1.6.x takes (no pun).

wc-ng already WINS in an insanely deep WC that's 100 dirs deep x 1 dir wide:
1.6.x's memory usage blows up like crazy for simple operations like 'svn
update' etc.. Trunk no longer exhibits that problem, it stays as thin from
start to end! Nice. In the same WC, trunk is about twice as fast as 1.6.x.

wc-ng still fails run time wise at most other WC setups. The worst factor I
saw was about 6 times slower. Overall, it's more a factor range of 1 to 2,
and doing real actual work takes about 1.6 times as long as 1.6.x did.

Tables...


VARIATION TO EXPECT:

There were multiple runs for each client version, and to determine
variation, I compared runs of the same client version against each other. If
they had taken identical amounts of time, all these numbers would be 1.0:

1x100_1.7_2.runs / 1x100_1.7_1.runs
  min     max     avg    operation  (unit is factor between runs)
  0.997   1.006   0.972  status
  0.970   1.346   1.119  resolved
  1.026   1.005   1.019  resolve
  0.994   0.854   0.976  propset
  0.993   1.518   1.172  delete
  1.010   0.986   0.995  update
  1.045   0.760   0.888  --version
  1.012   1.087   1.017  merge
  0.995   1.036   1.025  switch
  0.977   1.056   0.995  add
  1.006   0.743   1.017  propdel
  1.000   0.559   0.964  proplist
  1.118   0.695   0.968  commit
  1.015   0.760   0.979  prop mod
  1.200   0.808   0.947  checkout
  1.051   1.191   1.109  copy
  1.001   0.969   0.982  TOTAL RUN

So this is the variation to expect: up to about 20% variation from
environmental factors. For the rest of the calculations, the various runs
were averaged to reduce noise a little.

I'm omitting most of the actual time numbers and am skipping straight to the
factors between 1.6.x and trunk. If you want more numbers, or the script
itself, just ask.


FACTORS:

legend:

min: the shortest run with 1.7 took <x> times as long as the shortest
run with 1.6.

max: the longest run with 1.7 took <x> times as long as the longest run with
1.6.

avg: the average of all the runs with 1.7 is <x> times as long as the
average of all the runs with 1.6.


-----

4x4: WC is 4 dir-levels deep and each subdir 4 dirs wide, plus each subdir
has 4 files:

4x4_1.7_all.runs / 4x4_1.6_all.runs
  min     max     avg    operation  (unit is factor between runs)
  5.686   6.093   5.203  status
  4.739  20.004   6.958  resolved
  1.088   0.348   0.896  resolve
  1.163   0.279   1.113  propset
  1.132   1.066   1.108  mkdir
  2.369   1.237   1.523  update
  0.914   0.246   0.477  --version
  2.238   2.025   2.258  merge
  1.463   1.389   1.409  switch
  1.223   1.168   1.273  add
  1.131   1.816   1.170  propdel
  1.140   1.000   1.112  proplist
  1.464   1.637   1.684  commit
  1.174   1.797   1.173  prop mod
  1.610   1.884   1.948  checkout
  0.891   0.725   0.819  copy
  1.992   2.114   2.019  delete
  1.663   1.532   1.625  TOTAL RUN

-> svn status, resolved, merge and checkout suck hard, with multiples of the
1.6.x run time.
-> is that an improvement there for svn copy? (it's a wc->wc copy)
-> everything else has the tendency to suck, getting up to 50% slower.
(-> svn resolve and propset (initial creation of a prop) have very low
factors for the 'max' column -- seems to suggest that 1.6.x had much higher
variation on resolve and propset run times than trunk. -- milkin' it.)


-----

1x100: WC is 1 dir level deep and has 100 subdirs and 100 files per subdir.

1x100_1.7_all.runs / 1x100_1.6_all.runs
  min     max     avg    operation  (unit is factor between runs)
  3.144   3.017   3.241  status
  3.658   3.792   3.456  resolved
  1.065   0.837   1.065  resolve
  1.031   0.938   1.015  propset
  1.645   1.116   1.662  update
  0.991   1.253   1.080  --version
  1.385   1.575   1.467  merge
  1.480   1.512   1.483  switch
  1.009   0.999   1.018  add
  1.001   1.413   1.024  propdel
  1.070   1.593   1.071  proplist
  1.235   1.637   1.270  commit
  1.032   1.740   1.047  prop mod
  1.432   3.704   2.867  checkout
  0.968   1.148   1.068  copy
  0.699   1.060   0.762  delete
  1.324   1.344   1.329  TOTAL RUN

-> compared to an evenly spread WC, checkout got worse but everything else
seems to suck less.

-----

100x1: WC is 100 dirs deep and has 1 subdir and 1 file per subdir (like a
thin snake of subdirs)

100x1_1.7_all.runs / 100x1_1.6_all.runs
  min     max     avg    operation  (unit is factor between runs)
  2.736   2.832   3.803  status
  2.397   0.849   2.098  resolved
  1.085   0.446   0.936  resolve
  1.213   0.699   1.359  propset
  1.165   1.891   1.102  mkdir
  1.655   0.211   0.228  update
  0.970   3.071   2.085  --version
  1.454   1.162   1.482  merge
  0.149   0.117   0.130  switch
  1.241   0.883   1.011  add
  1.240   1.639   1.516  propdel
  1.151   1.716   1.301  proplist
  1.188   1.242   1.512  commit
  1.180   1.290   1.257  prop mod
  1.409   0.133   0.148  checkout
  0.961   1.371   1.053  copy
  1.718   5.051   2.285  delete
  0.632   0.598   0.617  TOTAL RUN

-> with insane dir depth, svn switch, checkout and update TTLY WIN!!
-> svn status, resolved still suck, slightly less hard.
-> svn delete sucks the same.
-> propdel, commit, merge suck moderately (50% worse than 1.6.x)
-> everything else is basically the same as 1.6.x

-----

So this is the current status from my machine (ThinkPad T41p, Pentium M
processor 1700MHz, ubuntu linux, and custom svn builds of course). I'll
probably wait a little and run this thing again.

I probably won't release the article before trunk's speed matches up.

~Neels

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to