You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2011/05/07 16:41:28 UTC

svn commit: r1100553 - in /subversion/trunk/tools/dev/benchmarks/large_dirs: ./ create_bigdir.sh

Author: stefan2
Date: Sat May  7 14:41:28 2011
New Revision: 1100553

URL: http://svn.apache.org/viewvc?rev=1100553&view=rev
Log:
Add a simple test shell script that will execute and gauge basic
operations on increasingly large directories in working copies. 
It supports ra_local and svn protocols as well as valgrind usage.

Users may need to adapt the paths at the beginning of the script.

* tools/dev/benchmarks/large_dirs/*
  new benchmark

Added:
    subversion/trunk/tools/dev/benchmarks/large_dirs/
    subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh   (with props)

Added: subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh
URL: http://svn.apache.org/viewvc/subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh?rev=1100553&view=auto
==============================================================================
--- subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh (added)
+++ subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh Sat May  7 14:41:28 2011
@@ -0,0 +1,180 @@
+#!/bin/bash
+
+#  set SVNPATH to the root of your SVN code working copy
+
+SVNPATH="$('pwd')/subversion"
+
+# if using the installed svn, you may need to adapt the following.
+# Uncomment the VALGRIND line to use that tool instead of "time".
+# Comment the SVNSERVE line to use file:// instead of svn://.
+
+SVN=${SVNPATH}/svn/svn
+SVNADMIN=${SVNPATH}/svnadmin/svnadmin   
+SVNSERVE=${SVNPATH}/svnserve/svnserve
+# VALGRIND="valgrind --tool=callgrind"
+
+# set your data paths here
+
+WC=/dev/shm/wc
+REPOROOT=/dev/shm
+
+# number of items per folder on the first run. It will be doubled
+# after every iteration. The test will stop if MAXCOUNT has been
+# reached or exceeded (and will not be executed for MAXCOUNT).
+
+FILECOUNT=1
+MAXCOUNT=20000
+
+# only 1.7 supports server-side caching and uncompressed data transfer 
+
+SERVEROPTS="-c 0 -M 400"
+
+# from here on, we should be good
+
+TIMEFORMAT=$'%3R  %3U  %3S'
+REPONAME=dirs
+PORT=54321
+if [ "${SVNSERVE}" != "" ] ; then
+  URL=svn://localhost:$PORT/$REPONAME
+else
+  URL=file://${REPOROOT}/$REPONAME
+fi
+
+# create repository
+
+rm -rf $WC $REPOROOT/$REPONAME
+mkdir $REPOROOT/$REPONAME
+${SVNADMIN} create $REPOROOT/$REPONAME
+echo -e "[general]\nanon-access = write\n" > $REPOROOT/$REPONAME/conf/svnserve.conf
+
+# fire up svnserve
+
+if [ "${SVNSERVE}" != "" ] ; then
+  VERSION=$( ${SVN} --version | grep " version" | sed 's/.*\ 1\.\([0-9]\).*/\1/' )
+  if [ "$VERSION" -lt "7" ]; then
+    SERVEROPTS=""
+  fi
+
+  ${SVNSERVE} -Tdr ${REPOROOT} ${SERVEROPTS} --listen-port ${PORT} --foreground &
+  PID=$!
+  sleep 1
+fi
+
+# construct valgrind parameters
+
+if [ "${VALGRIND}" != "" ] ; then
+  VG_TOOL=$( echo ${VALGRIND} | sed 's/.*\ --tool=\([a-z]*\).*/\1/' )
+  VG_OUTFILE="--${VG_TOOL}-out-file"
+fi
+
+# print header
+
+echo -n "using "
+${SVN} --version | grep " version"
+echo
+
+# init working copy
+
+rm -rf $WC
+${SVN} co $URL $WC > /dev/null
+
+# functions that execute an SVN command
+
+run_svn() {
+  if [ "${VALGRIND}" == "" ] ; then
+    time ${SVN} $1 $WC/$2 $3 > /dev/null
+  else
+    ${VALGRIND} ${VG_OUTFILE}="${VG_TOOL}.out.$1.$2" ${SVN} $1 $WC/$2 $3 > /dev/null
+  fi
+}
+
+run_svn_ci() {
+  if [ "${VALGRIND}" == "" ] ; then
+    time ${SVN} ci $WC/$1 -m "" -q > /dev/null
+  else
+    ${VALGRIND} ${VG_OUTFILE}="${VG_TOOL}.out.ci_$2.$1" ${SVN} ci $WC/$1 -m "" -q > /dev/null
+  fi
+}
+
+run_svn_cp() {
+  if [ "${VALGRIND}" == "" ] ; then
+    time ${SVN} cp $WC/$1 $WC/$2 > /dev/null
+  else
+    ${VALGRIND} ${VG_OUTFILE}="${VG_TOOL}.out.cp.$1" ${SVN} cp $WC/$1 $WC/$2 > /dev/null
+  fi
+}
+
+run_svn_get() {
+  if [ "${VALGRIND}" == "" ] ; then
+    time ${SVN} $1 $URL $WC -q > /dev/null
+  else
+    ${VALGRIND} ${VG_OUTFILE}="${VG_TOOL}.out.$1.$2" ${SVN} $1 $URL $WC -q > /dev/null
+  fi
+}
+
+# main loop 
+
+while [ $FILECOUNT -lt $MAXCOUNT ]; do
+  echo "Processing $FILECOUNT files in the same folder"
+
+  echo -ne "\tCreating files ... \t real   user    sys\n"
+  mkdir $WC/$FILECOUNT
+  for i in `seq 1 ${FILECOUNT}`; do
+    echo "File number $i" > $WC/$FILECOUNT/$i
+  done    
+
+  echo -ne "\tAdding files ...   \t"
+  run_svn add $FILECOUNT -q
+
+  echo -ne "\tRunning status ... \t"
+  run_svn st $FILECOUNT -q
+
+  echo -ne "\tCommit files ...   \t"
+  run_svn_ci $FILECOUNT add
+  
+  echo -ne "\tListing files ...  \t"
+  run_svn ls $FILECOUNT
+
+  echo -ne "\tUpdating files ... \t"
+  run_svn up $FILECOUNT -q
+
+  echo -ne "\tLocal copy ...     \t"
+  run_svn_cp $FILECOUNT ${FILECOUNT}_c
+
+  echo -ne "\tCommit copy ...    \t"
+  run_svn_ci ${FILECOUNT}_c copy
+
+  echo -ne "\tDelete 1 file ...  \t"
+  run_svn del ${FILECOUNT}_c -q
+
+  echo -ne "\tDeleting files ... \t"
+  time (
+  for i in `seq 2 ${FILECOUNT}`; do
+    ${SVN} del $WC/${FILECOUNT}_c/$i -q
+  done )
+
+  echo -ne "\tCommit deletions ...\t"
+  run_svn_ci ${FILECOUNT}_c del
+
+  rm -rf $WC
+
+  echo -ne "\tExport all ...  \t"
+  run_svn_get export $FILECOUNT
+
+  rm -rf $WC
+  mkdir $WC
+
+  echo -ne "\tCheck out all ...  \t"
+  run_svn_get co $FILECOUNT
+
+  let FILECOUNT=2*FILECOUNT
+  echo ""
+done
+
+# tear down
+
+if [ "${SVNSERVE}" != "" ] ; then
+  echo "killing svnserve ... "
+  kill $PID
+fi
+

Propchange: subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh
------------------------------------------------------------------------------
    svn:executable = *



Re: svn commit: r1100553 - in /subversion/trunk/tools/dev/benchmarks/large_dirs: ./ create_bigdir.sh

Posted by Hyrum K Wright <hy...@hyrumwright.org>.
On Sat, May 7, 2011 at 9:41 AM,  <st...@apache.org> wrote:
> Author: stefan2
> Date: Sat May  7 14:41:28 2011
> New Revision: 1100553
>
> URL: http://svn.apache.org/viewvc?rev=1100553&view=rev
> Log:
> Add a simple test shell script that will execute and gauge basic
> operations on increasingly large directories in working copies.
> It supports ra_local and svn protocols as well as valgrind usage.
>
> Users may need to adapt the paths at the beginning of the script.
>
> * tools/dev/benchmarks/large_dirs/*
>  new benchmark
>
> Added:
>    subversion/trunk/tools/dev/benchmarks/large_dirs/
>    subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh   (with props)
>
> Added: subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh
> URL: http://svn.apache.org/viewvc/subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh?rev=1100553&view=auto
> ==============================================================================
> --- subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh (added)
> +++ subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh Sat May  7 14:41:28 2011
> @@ -0,0 +1,180 @@
> +#!/bin/bash

License block?

-Hyrum

> +
> +#  set SVNPATH to the root of your SVN code working copy
> +
> +SVNPATH="$('pwd')/subversion"
> +
> +# if using the installed svn, you may need to adapt the following.
> +# Uncomment the VALGRIND line to use that tool instead of "time".
> +# Comment the SVNSERVE line to use file:// instead of svn://.
> +
> +SVN=${SVNPATH}/svn/svn
> +SVNADMIN=${SVNPATH}/svnadmin/svnadmin
> +SVNSERVE=${SVNPATH}/svnserve/svnserve
> +# VALGRIND="valgrind --tool=callgrind"
> +
> +# set your data paths here
> +
> +WC=/dev/shm/wc
> +REPOROOT=/dev/shm
> +
> +# number of items per folder on the first run. It will be doubled
> +# after every iteration. The test will stop if MAXCOUNT has been
> +# reached or exceeded (and will not be executed for MAXCOUNT).
> +
> +FILECOUNT=1
> +MAXCOUNT=20000
> +
> +# only 1.7 supports server-side caching and uncompressed data transfer
> +
> +SERVEROPTS="-c 0 -M 400"
> +
> +# from here on, we should be good
> +
> +TIMEFORMAT=$'%3R  %3U  %3S'
> +REPONAME=dirs
> +PORT=54321
> +if [ "${SVNSERVE}" != "" ] ; then
> +  URL=svn://localhost:$PORT/$REPONAME
> +else
> +  URL=file://${REPOROOT}/$REPONAME
> +fi
> +
> +# create repository
> +
> +rm -rf $WC $REPOROOT/$REPONAME
> +mkdir $REPOROOT/$REPONAME
> +${SVNADMIN} create $REPOROOT/$REPONAME
> +echo -e "[general]\nanon-access = write\n" > $REPOROOT/$REPONAME/conf/svnserve.conf
> +
> +# fire up svnserve
> +
> +if [ "${SVNSERVE}" != "" ] ; then
> +  VERSION=$( ${SVN} --version | grep " version" | sed 's/.*\ 1\.\([0-9]\).*/\1/' )
> +  if [ "$VERSION" -lt "7" ]; then
> +    SERVEROPTS=""
> +  fi
> +
> +  ${SVNSERVE} -Tdr ${REPOROOT} ${SERVEROPTS} --listen-port ${PORT} --foreground &
> +  PID=$!
> +  sleep 1
> +fi
> +
> +# construct valgrind parameters
> +
> +if [ "${VALGRIND}" != "" ] ; then
> +  VG_TOOL=$( echo ${VALGRIND} | sed 's/.*\ --tool=\([a-z]*\).*/\1/' )
> +  VG_OUTFILE="--${VG_TOOL}-out-file"
> +fi
> +
> +# print header
> +
> +echo -n "using "
> +${SVN} --version | grep " version"
> +echo
> +
> +# init working copy
> +
> +rm -rf $WC
> +${SVN} co $URL $WC > /dev/null
> +
> +# functions that execute an SVN command
> +
> +run_svn() {
> +  if [ "${VALGRIND}" == "" ] ; then
> +    time ${SVN} $1 $WC/$2 $3 > /dev/null
> +  else
> +    ${VALGRIND} ${VG_OUTFILE}="${VG_TOOL}.out.$1.$2" ${SVN} $1 $WC/$2 $3 > /dev/null
> +  fi
> +}
> +
> +run_svn_ci() {
> +  if [ "${VALGRIND}" == "" ] ; then
> +    time ${SVN} ci $WC/$1 -m "" -q > /dev/null
> +  else
> +    ${VALGRIND} ${VG_OUTFILE}="${VG_TOOL}.out.ci_$2.$1" ${SVN} ci $WC/$1 -m "" -q > /dev/null
> +  fi
> +}
> +
> +run_svn_cp() {
> +  if [ "${VALGRIND}" == "" ] ; then
> +    time ${SVN} cp $WC/$1 $WC/$2 > /dev/null
> +  else
> +    ${VALGRIND} ${VG_OUTFILE}="${VG_TOOL}.out.cp.$1" ${SVN} cp $WC/$1 $WC/$2 > /dev/null
> +  fi
> +}
> +
> +run_svn_get() {
> +  if [ "${VALGRIND}" == "" ] ; then
> +    time ${SVN} $1 $URL $WC -q > /dev/null
> +  else
> +    ${VALGRIND} ${VG_OUTFILE}="${VG_TOOL}.out.$1.$2" ${SVN} $1 $URL $WC -q > /dev/null
> +  fi
> +}
> +
> +# main loop
> +
> +while [ $FILECOUNT -lt $MAXCOUNT ]; do
> +  echo "Processing $FILECOUNT files in the same folder"
> +
> +  echo -ne "\tCreating files ... \t real   user    sys\n"
> +  mkdir $WC/$FILECOUNT
> +  for i in `seq 1 ${FILECOUNT}`; do
> +    echo "File number $i" > $WC/$FILECOUNT/$i
> +  done
> +
> +  echo -ne "\tAdding files ...   \t"
> +  run_svn add $FILECOUNT -q
> +
> +  echo -ne "\tRunning status ... \t"
> +  run_svn st $FILECOUNT -q
> +
> +  echo -ne "\tCommit files ...   \t"
> +  run_svn_ci $FILECOUNT add
> +
> +  echo -ne "\tListing files ...  \t"
> +  run_svn ls $FILECOUNT
> +
> +  echo -ne "\tUpdating files ... \t"
> +  run_svn up $FILECOUNT -q
> +
> +  echo -ne "\tLocal copy ...     \t"
> +  run_svn_cp $FILECOUNT ${FILECOUNT}_c
> +
> +  echo -ne "\tCommit copy ...    \t"
> +  run_svn_ci ${FILECOUNT}_c copy
> +
> +  echo -ne "\tDelete 1 file ...  \t"
> +  run_svn del ${FILECOUNT}_c -q
> +
> +  echo -ne "\tDeleting files ... \t"
> +  time (
> +  for i in `seq 2 ${FILECOUNT}`; do
> +    ${SVN} del $WC/${FILECOUNT}_c/$i -q
> +  done )
> +
> +  echo -ne "\tCommit deletions ...\t"
> +  run_svn_ci ${FILECOUNT}_c del
> +
> +  rm -rf $WC
> +
> +  echo -ne "\tExport all ...  \t"
> +  run_svn_get export $FILECOUNT
> +
> +  rm -rf $WC
> +  mkdir $WC
> +
> +  echo -ne "\tCheck out all ...  \t"
> +  run_svn_get co $FILECOUNT
> +
> +  let FILECOUNT=2*FILECOUNT
> +  echo ""
> +done
> +
> +# tear down
> +
> +if [ "${SVNSERVE}" != "" ] ; then
> +  echo "killing svnserve ... "
> +  kill $PID
> +fi
> +
>
> Propchange: subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh
> ------------------------------------------------------------------------------
>    svn:executable = *
>
>
>

Re: svn commit: r1100553 - in /subversion/trunk/tools/dev/benchmarks/large_dirs: ./ create_bigdir.sh

Posted by Daniel Shahaf <d....@daniel.shahaf.name>.
stefan2@apache.org wrote on Sat, May 07, 2011 at 14:41:28 -0000:
> +  ${SVNSERVE} -Tdr ${REPOROOT} ${SERVEROPTS} --listen-port ${PORT} --foreground &
> +  PID=$!

'svnserve --pid-file' exists too.  (Not proposing to change the code;
just pointing it out)

Re: svn commit: r1100553 - in /subversion/trunk/tools/dev/benchmarks/large_dirs: ./ create_bigdir.sh

Posted by Hyrum K Wright <hy...@hyrumwright.org>.
On Sat, May 7, 2011 at 9:41 AM,  <st...@apache.org> wrote:
> Author: stefan2
> Date: Sat May  7 14:41:28 2011
> New Revision: 1100553
>
> URL: http://svn.apache.org/viewvc?rev=1100553&view=rev
> Log:
> Add a simple test shell script that will execute and gauge basic
> operations on increasingly large directories in working copies.
> It supports ra_local and svn protocols as well as valgrind usage.
>
> Users may need to adapt the paths at the beginning of the script.
>
> * tools/dev/benchmarks/large_dirs/*
>  new benchmark
>
> Added:
>    subversion/trunk/tools/dev/benchmarks/large_dirs/
>    subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh   (with props)
>
> Added: subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh
> URL: http://svn.apache.org/viewvc/subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh?rev=1100553&view=auto
> ==============================================================================
> --- subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh (added)
> +++ subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh Sat May  7 14:41:28 2011
> @@ -0,0 +1,180 @@
> +#!/bin/bash

License block?

-Hyrum

> +
> +#  set SVNPATH to the root of your SVN code working copy
> +
> +SVNPATH="$('pwd')/subversion"
> +
> +# if using the installed svn, you may need to adapt the following.
> +# Uncomment the VALGRIND line to use that tool instead of "time".
> +# Comment the SVNSERVE line to use file:// instead of svn://.
> +
> +SVN=${SVNPATH}/svn/svn
> +SVNADMIN=${SVNPATH}/svnadmin/svnadmin
> +SVNSERVE=${SVNPATH}/svnserve/svnserve
> +# VALGRIND="valgrind --tool=callgrind"
> +
> +# set your data paths here
> +
> +WC=/dev/shm/wc
> +REPOROOT=/dev/shm
> +
> +# number of items per folder on the first run. It will be doubled
> +# after every iteration. The test will stop if MAXCOUNT has been
> +# reached or exceeded (and will not be executed for MAXCOUNT).
> +
> +FILECOUNT=1
> +MAXCOUNT=20000
> +
> +# only 1.7 supports server-side caching and uncompressed data transfer
> +
> +SERVEROPTS="-c 0 -M 400"
> +
> +# from here on, we should be good
> +
> +TIMEFORMAT=$'%3R  %3U  %3S'
> +REPONAME=dirs
> +PORT=54321
> +if [ "${SVNSERVE}" != "" ] ; then
> +  URL=svn://localhost:$PORT/$REPONAME
> +else
> +  URL=file://${REPOROOT}/$REPONAME
> +fi
> +
> +# create repository
> +
> +rm -rf $WC $REPOROOT/$REPONAME
> +mkdir $REPOROOT/$REPONAME
> +${SVNADMIN} create $REPOROOT/$REPONAME
> +echo -e "[general]\nanon-access = write\n" > $REPOROOT/$REPONAME/conf/svnserve.conf
> +
> +# fire up svnserve
> +
> +if [ "${SVNSERVE}" != "" ] ; then
> +  VERSION=$( ${SVN} --version | grep " version" | sed 's/.*\ 1\.\([0-9]\).*/\1/' )
> +  if [ "$VERSION" -lt "7" ]; then
> +    SERVEROPTS=""
> +  fi
> +
> +  ${SVNSERVE} -Tdr ${REPOROOT} ${SERVEROPTS} --listen-port ${PORT} --foreground &
> +  PID=$!
> +  sleep 1
> +fi
> +
> +# construct valgrind parameters
> +
> +if [ "${VALGRIND}" != "" ] ; then
> +  VG_TOOL=$( echo ${VALGRIND} | sed 's/.*\ --tool=\([a-z]*\).*/\1/' )
> +  VG_OUTFILE="--${VG_TOOL}-out-file"
> +fi
> +
> +# print header
> +
> +echo -n "using "
> +${SVN} --version | grep " version"
> +echo
> +
> +# init working copy
> +
> +rm -rf $WC
> +${SVN} co $URL $WC > /dev/null
> +
> +# functions that execute an SVN command
> +
> +run_svn() {
> +  if [ "${VALGRIND}" == "" ] ; then
> +    time ${SVN} $1 $WC/$2 $3 > /dev/null
> +  else
> +    ${VALGRIND} ${VG_OUTFILE}="${VG_TOOL}.out.$1.$2" ${SVN} $1 $WC/$2 $3 > /dev/null
> +  fi
> +}
> +
> +run_svn_ci() {
> +  if [ "${VALGRIND}" == "" ] ; then
> +    time ${SVN} ci $WC/$1 -m "" -q > /dev/null
> +  else
> +    ${VALGRIND} ${VG_OUTFILE}="${VG_TOOL}.out.ci_$2.$1" ${SVN} ci $WC/$1 -m "" -q > /dev/null
> +  fi
> +}
> +
> +run_svn_cp() {
> +  if [ "${VALGRIND}" == "" ] ; then
> +    time ${SVN} cp $WC/$1 $WC/$2 > /dev/null
> +  else
> +    ${VALGRIND} ${VG_OUTFILE}="${VG_TOOL}.out.cp.$1" ${SVN} cp $WC/$1 $WC/$2 > /dev/null
> +  fi
> +}
> +
> +run_svn_get() {
> +  if [ "${VALGRIND}" == "" ] ; then
> +    time ${SVN} $1 $URL $WC -q > /dev/null
> +  else
> +    ${VALGRIND} ${VG_OUTFILE}="${VG_TOOL}.out.$1.$2" ${SVN} $1 $URL $WC -q > /dev/null
> +  fi
> +}
> +
> +# main loop
> +
> +while [ $FILECOUNT -lt $MAXCOUNT ]; do
> +  echo "Processing $FILECOUNT files in the same folder"
> +
> +  echo -ne "\tCreating files ... \t real   user    sys\n"
> +  mkdir $WC/$FILECOUNT
> +  for i in `seq 1 ${FILECOUNT}`; do
> +    echo "File number $i" > $WC/$FILECOUNT/$i
> +  done
> +
> +  echo -ne "\tAdding files ...   \t"
> +  run_svn add $FILECOUNT -q
> +
> +  echo -ne "\tRunning status ... \t"
> +  run_svn st $FILECOUNT -q
> +
> +  echo -ne "\tCommit files ...   \t"
> +  run_svn_ci $FILECOUNT add
> +
> +  echo -ne "\tListing files ...  \t"
> +  run_svn ls $FILECOUNT
> +
> +  echo -ne "\tUpdating files ... \t"
> +  run_svn up $FILECOUNT -q
> +
> +  echo -ne "\tLocal copy ...     \t"
> +  run_svn_cp $FILECOUNT ${FILECOUNT}_c
> +
> +  echo -ne "\tCommit copy ...    \t"
> +  run_svn_ci ${FILECOUNT}_c copy
> +
> +  echo -ne "\tDelete 1 file ...  \t"
> +  run_svn del ${FILECOUNT}_c -q
> +
> +  echo -ne "\tDeleting files ... \t"
> +  time (
> +  for i in `seq 2 ${FILECOUNT}`; do
> +    ${SVN} del $WC/${FILECOUNT}_c/$i -q
> +  done )
> +
> +  echo -ne "\tCommit deletions ...\t"
> +  run_svn_ci ${FILECOUNT}_c del
> +
> +  rm -rf $WC
> +
> +  echo -ne "\tExport all ...  \t"
> +  run_svn_get export $FILECOUNT
> +
> +  rm -rf $WC
> +  mkdir $WC
> +
> +  echo -ne "\tCheck out all ...  \t"
> +  run_svn_get co $FILECOUNT
> +
> +  let FILECOUNT=2*FILECOUNT
> +  echo ""
> +done
> +
> +# tear down
> +
> +if [ "${SVNSERVE}" != "" ] ; then
> +  echo "killing svnserve ... "
> +  kill $PID
> +fi
> +
>
> Propchange: subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh
> ------------------------------------------------------------------------------
>    svn:executable = *
>
>
>

Re: svn commit: r1100553 - in /subversion/trunk/tools/dev/benchmarks/large_dirs: ./ create_bigdir.sh

Posted by Daniel Shahaf <d....@daniel.shahaf.name>.
stefan2@apache.org wrote on Sat, May 07, 2011 at 14:41:28 -0000:
> Author: stefan2
> Date: Sat May  7 14:41:28 2011
> New Revision: 1100553
> 
> URL: http://svn.apache.org/viewvc?rev=1100553&view=rev
> Log:
> Add a simple test shell script that will execute and gauge basic
> operations on increasingly large directories in working copies. 
> It supports ra_local and svn protocols as well as valgrind usage.
> 
> Users may need to adapt the paths at the beginning of the script.
> 
> * tools/dev/benchmarks/large_dirs/*
>   new benchmark
> 
> Added:
>     subversion/trunk/tools/dev/benchmarks/large_dirs/
>     subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh   (with props)
> 
> Added: subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh
> URL: http://svn.apache.org/viewvc/subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh?rev=1100553&view=auto
> ==============================================================================
> --- subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh (added)
> +++ subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh Sat May  7 14:41:28 2011
> @@ -0,0 +1,180 @@
> +#!/bin/bash
> +

Could you make this a #!/bin/sh script?

Looking below, there are no sigifnicant bash-specific usages ---
only s/echo/print/ and similar minor tweaks.

Thanks,

Daniel


> +#  set SVNPATH to the root of your SVN code working copy
> +
> +SVNPATH="$('pwd')/subversion"
> +
> +# if using the installed svn, you may need to adapt the following.
> +# Uncomment the VALGRIND line to use that tool instead of "time".
> +# Comment the SVNSERVE line to use file:// instead of svn://.
> +
> +SVN=${SVNPATH}/svn/svn
> +SVNADMIN=${SVNPATH}/svnadmin/svnadmin   
> +SVNSERVE=${SVNPATH}/svnserve/svnserve
> +# VALGRIND="valgrind --tool=callgrind"
> +
> +# set your data paths here
> +
> +WC=/dev/shm/wc
> +REPOROOT=/dev/shm
> +
> +# number of items per folder on the first run. It will be doubled
> +# after every iteration. The test will stop if MAXCOUNT has been
> +# reached or exceeded (and will not be executed for MAXCOUNT).
> +
> +FILECOUNT=1
> +MAXCOUNT=20000
> +
> +# only 1.7 supports server-side caching and uncompressed data transfer 
> +
> +SERVEROPTS="-c 0 -M 400"
> +
> +# from here on, we should be good
> +
> +TIMEFORMAT=$'%3R  %3U  %3S'
> +REPONAME=dirs
> +PORT=54321
> +if [ "${SVNSERVE}" != "" ] ; then
> +  URL=svn://localhost:$PORT/$REPONAME
> +else
> +  URL=file://${REPOROOT}/$REPONAME
> +fi
> +
> +# create repository
> +
> +rm -rf $WC $REPOROOT/$REPONAME
> +mkdir $REPOROOT/$REPONAME
> +${SVNADMIN} create $REPOROOT/$REPONAME
> +echo -e "[general]\nanon-access = write\n" > $REPOROOT/$REPONAME/conf/svnserve.conf
> +
> +# fire up svnserve
> +
> +if [ "${SVNSERVE}" != "" ] ; then
> +  VERSION=$( ${SVN} --version | grep " version" | sed 's/.*\ 1\.\([0-9]\).*/\1/' )
> +  if [ "$VERSION" -lt "7" ]; then
> +    SERVEROPTS=""
> +  fi
> +
> +  ${SVNSERVE} -Tdr ${REPOROOT} ${SERVEROPTS} --listen-port ${PORT} --foreground &
> +  PID=$!
> +  sleep 1
> +fi
> +
> +# construct valgrind parameters
> +
> +if [ "${VALGRIND}" != "" ] ; then
> +  VG_TOOL=$( echo ${VALGRIND} | sed 's/.*\ --tool=\([a-z]*\).*/\1/' )
> +  VG_OUTFILE="--${VG_TOOL}-out-file"
> +fi
> +
> +# print header
> +
> +echo -n "using "
> +${SVN} --version | grep " version"
> +echo
> +
> +# init working copy
> +
> +rm -rf $WC
> +${SVN} co $URL $WC > /dev/null
> +
> +# functions that execute an SVN command
> +
> +run_svn() {
> +  if [ "${VALGRIND}" == "" ] ; then
> +    time ${SVN} $1 $WC/$2 $3 > /dev/null
> +  else
> +    ${VALGRIND} ${VG_OUTFILE}="${VG_TOOL}.out.$1.$2" ${SVN} $1 $WC/$2 $3 > /dev/null
> +  fi
> +}
> +
> +run_svn_ci() {
> +  if [ "${VALGRIND}" == "" ] ; then
> +    time ${SVN} ci $WC/$1 -m "" -q > /dev/null
> +  else
> +    ${VALGRIND} ${VG_OUTFILE}="${VG_TOOL}.out.ci_$2.$1" ${SVN} ci $WC/$1 -m "" -q > /dev/null
> +  fi
> +}
> +
> +run_svn_cp() {
> +  if [ "${VALGRIND}" == "" ] ; then
> +    time ${SVN} cp $WC/$1 $WC/$2 > /dev/null
> +  else
> +    ${VALGRIND} ${VG_OUTFILE}="${VG_TOOL}.out.cp.$1" ${SVN} cp $WC/$1 $WC/$2 > /dev/null
> +  fi
> +}
> +
> +run_svn_get() {
> +  if [ "${VALGRIND}" == "" ] ; then
> +    time ${SVN} $1 $URL $WC -q > /dev/null
> +  else
> +    ${VALGRIND} ${VG_OUTFILE}="${VG_TOOL}.out.$1.$2" ${SVN} $1 $URL $WC -q > /dev/null
> +  fi
> +}
> +
> +# main loop 
> +
> +while [ $FILECOUNT -lt $MAXCOUNT ]; do
> +  echo "Processing $FILECOUNT files in the same folder"
> +
> +  echo -ne "\tCreating files ... \t real   user    sys\n"
> +  mkdir $WC/$FILECOUNT
> +  for i in `seq 1 ${FILECOUNT}`; do
> +    echo "File number $i" > $WC/$FILECOUNT/$i
> +  done    
> +
> +  echo -ne "\tAdding files ...   \t"
> +  run_svn add $FILECOUNT -q
> +
> +  echo -ne "\tRunning status ... \t"
> +  run_svn st $FILECOUNT -q
> +
> +  echo -ne "\tCommit files ...   \t"
> +  run_svn_ci $FILECOUNT add
> +  
> +  echo -ne "\tListing files ...  \t"
> +  run_svn ls $FILECOUNT
> +
> +  echo -ne "\tUpdating files ... \t"
> +  run_svn up $FILECOUNT -q
> +
> +  echo -ne "\tLocal copy ...     \t"
> +  run_svn_cp $FILECOUNT ${FILECOUNT}_c
> +
> +  echo -ne "\tCommit copy ...    \t"
> +  run_svn_ci ${FILECOUNT}_c copy
> +
> +  echo -ne "\tDelete 1 file ...  \t"
> +  run_svn del ${FILECOUNT}_c -q
> +
> +  echo -ne "\tDeleting files ... \t"
> +  time (
> +  for i in `seq 2 ${FILECOUNT}`; do
> +    ${SVN} del $WC/${FILECOUNT}_c/$i -q
> +  done )
> +
> +  echo -ne "\tCommit deletions ...\t"
> +  run_svn_ci ${FILECOUNT}_c del
> +
> +  rm -rf $WC
> +
> +  echo -ne "\tExport all ...  \t"
> +  run_svn_get export $FILECOUNT
> +
> +  rm -rf $WC
> +  mkdir $WC
> +
> +  echo -ne "\tCheck out all ...  \t"
> +  run_svn_get co $FILECOUNT
> +
> +  let FILECOUNT=2*FILECOUNT
> +  echo ""
> +done
> +
> +# tear down
> +
> +if [ "${SVNSERVE}" != "" ] ; then
> +  echo "killing svnserve ... "
> +  kill $PID
> +fi
> +
> 
> Propchange: subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh
> ------------------------------------------------------------------------------
>     svn:executable = *
> 
> 

Re: svn commit: r1100553 - in /subversion/trunk/tools/dev/benchmarks/large_dirs: ./ create_bigdir.sh

Posted by Daniel Shahaf <d....@daniel.shahaf.name>.
stefan2@apache.org wrote on Sat, May 07, 2011 at 14:41:28 -0000:
> Author: stefan2
> Date: Sat May  7 14:41:28 2011
> New Revision: 1100553
> 
> URL: http://svn.apache.org/viewvc?rev=1100553&view=rev
> Log:
> Add a simple test shell script that will execute and gauge basic
> operations on increasingly large directories in working copies. 
> It supports ra_local and svn protocols as well as valgrind usage.
> 
> Users may need to adapt the paths at the beginning of the script.
> 
> * tools/dev/benchmarks/large_dirs/*
>   new benchmark
> 
> Added:
>     subversion/trunk/tools/dev/benchmarks/large_dirs/
>     subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh   (with props)
> 
> Added: subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh
> URL: http://svn.apache.org/viewvc/subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh?rev=1100553&view=auto
> ==============================================================================
> --- subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh (added)
> +++ subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh Sat May  7 14:41:28 2011
> @@ -0,0 +1,180 @@
> +#!/bin/bash
> +

Could you make this a #!/bin/sh script?

Looking below, there are no sigifnicant bash-specific usages ---
only s/echo/print/ and similar minor tweaks.

Thanks,

Daniel


> +#  set SVNPATH to the root of your SVN code working copy
> +
> +SVNPATH="$('pwd')/subversion"
> +
> +# if using the installed svn, you may need to adapt the following.
> +# Uncomment the VALGRIND line to use that tool instead of "time".
> +# Comment the SVNSERVE line to use file:// instead of svn://.
> +
> +SVN=${SVNPATH}/svn/svn
> +SVNADMIN=${SVNPATH}/svnadmin/svnadmin   
> +SVNSERVE=${SVNPATH}/svnserve/svnserve
> +# VALGRIND="valgrind --tool=callgrind"
> +
> +# set your data paths here
> +
> +WC=/dev/shm/wc
> +REPOROOT=/dev/shm
> +
> +# number of items per folder on the first run. It will be doubled
> +# after every iteration. The test will stop if MAXCOUNT has been
> +# reached or exceeded (and will not be executed for MAXCOUNT).
> +
> +FILECOUNT=1
> +MAXCOUNT=20000
> +
> +# only 1.7 supports server-side caching and uncompressed data transfer 
> +
> +SERVEROPTS="-c 0 -M 400"
> +
> +# from here on, we should be good
> +
> +TIMEFORMAT=$'%3R  %3U  %3S'
> +REPONAME=dirs
> +PORT=54321
> +if [ "${SVNSERVE}" != "" ] ; then
> +  URL=svn://localhost:$PORT/$REPONAME
> +else
> +  URL=file://${REPOROOT}/$REPONAME
> +fi
> +
> +# create repository
> +
> +rm -rf $WC $REPOROOT/$REPONAME
> +mkdir $REPOROOT/$REPONAME
> +${SVNADMIN} create $REPOROOT/$REPONAME
> +echo -e "[general]\nanon-access = write\n" > $REPOROOT/$REPONAME/conf/svnserve.conf
> +
> +# fire up svnserve
> +
> +if [ "${SVNSERVE}" != "" ] ; then
> +  VERSION=$( ${SVN} --version | grep " version" | sed 's/.*\ 1\.\([0-9]\).*/\1/' )
> +  if [ "$VERSION" -lt "7" ]; then
> +    SERVEROPTS=""
> +  fi
> +
> +  ${SVNSERVE} -Tdr ${REPOROOT} ${SERVEROPTS} --listen-port ${PORT} --foreground &
> +  PID=$!
> +  sleep 1
> +fi
> +
> +# construct valgrind parameters
> +
> +if [ "${VALGRIND}" != "" ] ; then
> +  VG_TOOL=$( echo ${VALGRIND} | sed 's/.*\ --tool=\([a-z]*\).*/\1/' )
> +  VG_OUTFILE="--${VG_TOOL}-out-file"
> +fi
> +
> +# print header
> +
> +echo -n "using "
> +${SVN} --version | grep " version"
> +echo
> +
> +# init working copy
> +
> +rm -rf $WC
> +${SVN} co $URL $WC > /dev/null
> +
> +# functions that execute an SVN command
> +
> +run_svn() {
> +  if [ "${VALGRIND}" == "" ] ; then
> +    time ${SVN} $1 $WC/$2 $3 > /dev/null
> +  else
> +    ${VALGRIND} ${VG_OUTFILE}="${VG_TOOL}.out.$1.$2" ${SVN} $1 $WC/$2 $3 > /dev/null
> +  fi
> +}
> +
> +run_svn_ci() {
> +  if [ "${VALGRIND}" == "" ] ; then
> +    time ${SVN} ci $WC/$1 -m "" -q > /dev/null
> +  else
> +    ${VALGRIND} ${VG_OUTFILE}="${VG_TOOL}.out.ci_$2.$1" ${SVN} ci $WC/$1 -m "" -q > /dev/null
> +  fi
> +}
> +
> +run_svn_cp() {
> +  if [ "${VALGRIND}" == "" ] ; then
> +    time ${SVN} cp $WC/$1 $WC/$2 > /dev/null
> +  else
> +    ${VALGRIND} ${VG_OUTFILE}="${VG_TOOL}.out.cp.$1" ${SVN} cp $WC/$1 $WC/$2 > /dev/null
> +  fi
> +}
> +
> +run_svn_get() {
> +  if [ "${VALGRIND}" == "" ] ; then
> +    time ${SVN} $1 $URL $WC -q > /dev/null
> +  else
> +    ${VALGRIND} ${VG_OUTFILE}="${VG_TOOL}.out.$1.$2" ${SVN} $1 $URL $WC -q > /dev/null
> +  fi
> +}
> +
> +# main loop 
> +
> +while [ $FILECOUNT -lt $MAXCOUNT ]; do
> +  echo "Processing $FILECOUNT files in the same folder"
> +
> +  echo -ne "\tCreating files ... \t real   user    sys\n"
> +  mkdir $WC/$FILECOUNT
> +  for i in `seq 1 ${FILECOUNT}`; do
> +    echo "File number $i" > $WC/$FILECOUNT/$i
> +  done    
> +
> +  echo -ne "\tAdding files ...   \t"
> +  run_svn add $FILECOUNT -q
> +
> +  echo -ne "\tRunning status ... \t"
> +  run_svn st $FILECOUNT -q
> +
> +  echo -ne "\tCommit files ...   \t"
> +  run_svn_ci $FILECOUNT add
> +  
> +  echo -ne "\tListing files ...  \t"
> +  run_svn ls $FILECOUNT
> +
> +  echo -ne "\tUpdating files ... \t"
> +  run_svn up $FILECOUNT -q
> +
> +  echo -ne "\tLocal copy ...     \t"
> +  run_svn_cp $FILECOUNT ${FILECOUNT}_c
> +
> +  echo -ne "\tCommit copy ...    \t"
> +  run_svn_ci ${FILECOUNT}_c copy
> +
> +  echo -ne "\tDelete 1 file ...  \t"
> +  run_svn del ${FILECOUNT}_c -q
> +
> +  echo -ne "\tDeleting files ... \t"
> +  time (
> +  for i in `seq 2 ${FILECOUNT}`; do
> +    ${SVN} del $WC/${FILECOUNT}_c/$i -q
> +  done )
> +
> +  echo -ne "\tCommit deletions ...\t"
> +  run_svn_ci ${FILECOUNT}_c del
> +
> +  rm -rf $WC
> +
> +  echo -ne "\tExport all ...  \t"
> +  run_svn_get export $FILECOUNT
> +
> +  rm -rf $WC
> +  mkdir $WC
> +
> +  echo -ne "\tCheck out all ...  \t"
> +  run_svn_get co $FILECOUNT
> +
> +  let FILECOUNT=2*FILECOUNT
> +  echo ""
> +done
> +
> +# tear down
> +
> +if [ "${SVNSERVE}" != "" ] ; then
> +  echo "killing svnserve ... "
> +  kill $PID
> +fi
> +
> 
> Propchange: subversion/trunk/tools/dev/benchmarks/large_dirs/create_bigdir.sh
> ------------------------------------------------------------------------------
>     svn:executable = *
> 
> 

Re: svn commit: r1100553 - in /subversion/trunk/tools/dev/benchmarks/large_dirs: ./ create_bigdir.sh

Posted by Daniel Shahaf <d....@daniel.shahaf.name>.
stefan2@apache.org wrote on Sat, May 07, 2011 at 14:41:28 -0000:
> +  ${SVNSERVE} -Tdr ${REPOROOT} ${SERVEROPTS} --listen-port ${PORT} --foreground &
> +  PID=$!

'svnserve --pid-file' exists too.  (Not proposing to change the code;
just pointing it out)