Author: tripod
Date: Tue Oct 15 23:49:47 2013
New Revision: 1532600

URL: http://svn.apache.org/r1532600
Log:
OAK-641: Improved benchmark tooling

- added very simple csv export
- include concurrency in test results

Modified:
    jackrabbit/oak/trunk/oak-run/README.md
    jackrabbit/oak/trunk/oak-run/run_concurrent.sh
    
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/AbstractTest.java
    
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/Benchmark.java
    
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java
    
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ManyNodes.java

Modified: jackrabbit/oak/trunk/oak-run/README.md
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/README.md?rev=1532600&r1=1532599&r2=1532600&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/README.md (original)
+++ jackrabbit/oak/trunk/oak-run/README.md Tue Oct 15 23:49:47 2013
@@ -66,6 +66,7 @@ The following benchmark options (with de
     --itemsToRead 1000     - Number of items to read
     --bgReaders 20         - Number of background readers
     --report false         - Whether to output intermediate results
+    --csvFile <file>       - Optional csv file to report the benchmark results
 
 These options are passed to the test cases and repository fixtures
 that need them. For example the Wikipedia dump option is needed by the
@@ -123,6 +124,7 @@ reported:
 
 | Column      | Description                                           |
 |-------------|-------------------------------------------------------|
+| C           | concurrency level (only some tests)                   |
 | min         | minimum time (in ms) taken by a test run              |
 | 10%         | time (in ms) in which the fastest 10% of test runs    |
 | 50%         | time (in ms) taken by the median test run             |

Modified: jackrabbit/oak/trunk/oak-run/run_concurrent.sh
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/run_concurrent.sh?rev=1532600&r1=1532599&r2=1532600&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/run_concurrent.sh (original)
+++ jackrabbit/oak/trunk/oak-run/run_concurrent.sh Tue Oct 15 23:49:47 2013
@@ -15,17 +15,32 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-AS_ADMIN=false
+USERS="false true"
 RUNTIME=20
 BENCH=ConcurrentReadAccessControlledTreeTest
-for fix in Oak-Tar Jackrabbit 
+FIXS="Oak-Tar" # Jackrabbit"
+THREADS="1 2 4 8 10 12 14 16 18 20"
+
+
+LOG="bench_$(date +'%Y%m%d_%H%M%S').csv"
+echo "Benchmarks: $BENCH" > $LOG
+echo "Fixtures: $FIXS" >> $LOG
+echo "Users: $USERS" >> $LOG
+echo "Runtime: $RUNTIME" >> $LOG
+echo "Concurrency: $THREADS" >> $LOG
+echo "--------------------------------------" >> $LOG
+for user in $USERS
     do
-    for i in 1 2 4 8 10 12 14 16 18 20 
-    do
-       echo "Executing benchmark with $i threads on $fix"
-        rm -rf target/jackrabbit-*
-       cmd="java -Xmx2048m -Druntime=$RUNTIME -jar 
target/oak-run-0.10-SNAPSHOT.jar benchmark --bgReaders $i --runAsAdmin 
$AS_ADMIN --report false $BENCH $fix"
-       echo $cmd
-       $cmd
+    echo "Executing benchmarks as admin: $user" | tee -a $LOG
+    echo "-----------------------------------------------------------" | tee 
-a $LOG
+    for i in $THREADS
+        do
+        rm -rf target/Jackrabbit-* target/Oak-Tar-*
+        cmd="java -Xmx2048m -Druntime=$RUNTIME -jar 
target/oak-run-*-SNAPSHOT.jar benchmark --csvFile $LOG --bgReaders $i 
--runAsAdmin $user --report false $BENCH $FIXS"
+        echo $cmd
+        $cmd 
     done
 done
+echo "-----------------------------------------"
+echo "Benchmark completed. see $LOG for details:"
+cat $LOG

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/AbstractTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/AbstractTest.java?rev=1532600&r1=1532599&r2=1532600&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/AbstractTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/AbstractTest.java
 Tue Oct 15 23:49:47 2013
@@ -16,6 +16,7 @@
  */
 package org.apache.jackrabbit.oak.benchmark;
 
+import java.io.PrintStream;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Random;
@@ -66,6 +67,8 @@ abstract class AbstractTest extends Benc
     
     private Profiler profiler;
 
+    private int concurrency;
+
     protected static int getScale(int def) {
         int scale = Integer.getInteger("scale", 0);
         if (scale == 0) {
@@ -97,10 +100,15 @@ abstract class AbstractTest extends Benc
     }
 
     @Override
-    public void run(Iterable<RepositoryFixture> fixtures) {
+    public void run(Iterable<RepositoryFixture> fixtures, PrintStream out) {
         System.out.format(
-                "# %-26.26s     min     10%%     50%%     90%%     max       
N%n",
+                "# %-26.26s       C     min     10%%     50%%     90%%     max 
      N%n",
                 toString());
+        if (out != null) {
+            out.format(
+                    "# %-26.26s,      C,    min,    10%%,    50%%,    90%%,    
max,      N%n",
+                    toString());
+        }
         for (RepositoryFixture fixture : fixtures) {
             try {
                 Repository[] cluster = fixture.setUpCluster(1);
@@ -109,14 +117,27 @@ abstract class AbstractTest extends Benc
                     DescriptiveStatistics statistics = runTest(cluster[0]);
                     if (statistics.getN() > 0) {
                         System.out.format(
-                                "%-28.28s  %6.0f  %6.0f  %6.0f  %6.0f  %6.0f  
%6d%n",
+                                "%-28.28s  %6d  %6.0f  %6.0f  %6.0f  %6.0f  
%6.0f  %6d%n",
                                 fixture.toString(),
+                                concurrency,
                                 statistics.getMin(),
                                 statistics.getPercentile(10.0),
                                 statistics.getPercentile(50.0),
                                 statistics.getPercentile(90.0),
                                 statistics.getMax(),
                                 statistics.getN());
+                        if (out != null) {
+                            out.format(
+                                    "%-28.28s, %6d, %6.0f, %6.0f, %6.0f, 
%6.0f, %6.0f, %6d%n",
+                                    fixture.toString(),
+                                    concurrency,
+                                    statistics.getMin(),
+                                    statistics.getPercentile(10.0),
+                                    statistics.getPercentile(50.0),
+                                    statistics.getPercentile(90.0),
+                                    statistics.getMax(),
+                                    statistics.getN());
+                        }
                     }
                 } finally {
                     fixture.tearDownCluster();
@@ -193,6 +214,7 @@ abstract class AbstractTest extends Benc
             }
         }
 
+        concurrency = this.threads.size();
         this.threads = null;
         this.sessions = null;
         this.credentials = null;

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/Benchmark.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/Benchmark.java?rev=1532600&r1=1532599&r2=1532600&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/Benchmark.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/Benchmark.java
 Tue Oct 15 23:49:47 2013
@@ -16,6 +16,8 @@
  */
 package org.apache.jackrabbit.oak.benchmark;
 
+import java.io.PrintStream;
+
 import org.apache.jackrabbit.oak.fixture.RepositoryFixture;
 
 public abstract class Benchmark {
@@ -26,7 +28,7 @@ public abstract class Benchmark {
      *
      * @param fixtures repository fixtures
      */
-    public abstract void run(Iterable<RepositoryFixture> fixtures);
+    public abstract void run(Iterable<RepositoryFixture> fixtures, PrintStream 
out);
 
     public String toString() {
         String name = getClass().getName();

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java?rev=1532600&r1=1532599&r2=1532600&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/BenchmarkRunner.java
 Tue Oct 15 23:49:47 2013
@@ -17,6 +17,7 @@
 package org.apache.jackrabbit.oak.benchmark;
 
 import java.io.File;
+import java.io.PrintStream;
 import java.util.List;
 import java.util.Set;
 
@@ -25,6 +26,8 @@ import com.google.common.collect.Sets;
 import joptsimple.OptionParser;
 import joptsimple.OptionSet;
 import joptsimple.OptionSpec;
+
+import org.apache.commons.io.FileUtils;
 import org.apache.jackrabbit.oak.benchmark.wikipedia.WikipediaImport;
 import org.apache.jackrabbit.oak.fixture.JackrabbitRepositoryFixture;
 import org.apache.jackrabbit.oak.fixture.OakRepositoryFixture;
@@ -64,6 +67,8 @@ public class BenchmarkRunner {
         OptionSpec<Boolean> report = parser.accepts("report", "Whether to 
output intermediate results")
                 .withOptionalArg().ofType(Boolean.class)
                 .defaultsTo(Boolean.FALSE);
+        OptionSpec<File> csvFile = parser.accepts("csvFile", "File to write a 
CSV version of the benchmark data.")
+                .withOptionalArg().ofType(File.class);
 
         OptionSet options = parser.parse(args);
         int cacheSize = cache.value(options);
@@ -161,8 +166,15 @@ public class BenchmarkRunner {
         }
 
         if (argset.isEmpty()) {
+            PrintStream out = null;
+            if (options.has(csvFile)) {
+                out = new 
PrintStream(FileUtils.openOutputStream(csvFile.value(options), true));
+            }
             for (Benchmark benchmark : benchmarks) {
-                benchmark.run(fixtures);
+                benchmark.run(fixtures, out);
+            }
+            if (out != null) {
+                out.close();
             }
         } else {
             System.err.println("Unknown arguments: " + argset);

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ManyNodes.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ManyNodes.java?rev=1532600&r1=1532599&r2=1532600&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ManyNodes.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/benchmark/ManyNodes.java
 Tue Oct 15 23:49:47 2013
@@ -16,6 +16,8 @@
  */
 package org.apache.jackrabbit.oak.benchmark;
 
+import java.io.PrintStream;
+
 import javax.jcr.Node;
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
@@ -27,7 +29,7 @@ import org.apache.jackrabbit.oak.fixture
 public class ManyNodes extends Benchmark {
 
     @Override
-    public void run(Iterable<RepositoryFixture> fixtures) {
+    public void run(Iterable<RepositoryFixture> fixtures, PrintStream out) {
         for (RepositoryFixture fixture : fixtures) {
             System.out.println("ManyNodes test: " + fixture);
             if (fixture.isAvailable(1)) {


Reply via email to