You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by th...@apache.org on 2012/08/15 14:40:47 UTC
svn commit: r1373371 - in /jackrabbit/oak/trunk/oak-bench: base/
base/src/main/java/org/apache/jackrabbit/oak/performance/
latest/src/test/java/org/apache/jackrabbit/oak/performance/
Author: thomasm
Date: Wed Aug 15 12:40:47 2012
New Revision: 1373371
URL: http://svn.apache.org/viewvc?rev=1373371&view=rev
Log:
OAK-122 Performance test suite - (avoid out of memory, make them reasonably fast to run by default but allow configuring longer running test using system properties)
Modified:
jackrabbit/oak/trunk/oak-bench/base/pom.xml
jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/AbstractPerformanceTest.java
jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/AbstractTest.java
jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/TransientManyChildNodesTest.java
jackrabbit/oak/trunk/oak-bench/latest/src/test/java/org/apache/jackrabbit/oak/performance/PerformanceBenchmark.java
Modified: jackrabbit/oak/trunk/oak-bench/base/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-bench/base/pom.xml?rev=1373371&r1=1373370&r2=1373371&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-bench/base/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-bench/base/pom.xml Wed Aug 15 12:40:47 2012
@@ -48,6 +48,11 @@
<scope>provided</scope>
</dependency>
<dependency>
+ <groupId>com.h2database</groupId>
+ <artifactId>h2</artifactId>
+ <version>1.3.158</version>
+ </dependency>
+ <dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>1.4</version>
Modified: jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/AbstractPerformanceTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/AbstractPerformanceTest.java?rev=1373371&r1=1373370&r2=1373371&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/AbstractPerformanceTest.java (original)
+++ jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/AbstractPerformanceTest.java Wed Aug 15 12:40:47 2012
@@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.perfor
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
+import java.util.Collections;
import java.util.regex.Pattern;
import javax.jcr.Credentials;
@@ -28,13 +29,31 @@ import javax.jcr.SimpleCredentials;
import org.apache.commons.io.output.FileWriterWithEncoding;
import org.apache.commons.math.stat.descriptive.DescriptiveStatistics;
+import org.apache.jackrabbit.mk.MicroKernelFactory;
+import org.apache.jackrabbit.mk.api.MicroKernel;
+import org.apache.jackrabbit.mk.core.MicroKernelImpl;
+import org.apache.jackrabbit.mk.index.IndexWrapper;
+import org.apache.jackrabbit.oak.api.ContentRepository;
+import org.apache.jackrabbit.oak.core.ContentRepositoryImpl;
import org.apache.jackrabbit.oak.jcr.RepositoryImpl;
-
+import org.apache.jackrabbit.oak.spi.commit.CompositeValidatorProvider;
+import org.apache.jackrabbit.oak.spi.commit.ValidatingEditor;
+import org.apache.jackrabbit.oak.spi.commit.ValidatorProvider;
+
+/**
+ * This class calls all known performance tests.
+ */
public abstract class AbstractPerformanceTest {
- private final int warmup = 1;
-
- private final int runtime = 10;
+ /**
+ * The warmup time, in ms.
+ */
+ private final int warmup = Integer.getInteger("oak.performanceTest.warmup", 0);
+
+ /**
+ * How long each test is repeated, in ms.
+ */
+ private final int runtime = Integer.getInteger("oak.performanceTest.runtime", 100);
private final Credentials credentials = new SimpleCredentials("admin",
"admin".toCharArray());
@@ -69,9 +88,12 @@ public abstract class AbstractPerformanc
if (microKernelPattern.matcher(microKernel).matches()
&& testPattern.matcher(test.toString()).matches()) {
+ MicroKernel mk = null;
RepositoryImpl repository;
try {
- repository = createRepository(microKernel);
+
+ mk = createMicroKernel(microKernel);
+ repository = createRepository(mk);
// Run the test
DescriptiveStatistics statistics = runTest(test, repository);
@@ -82,6 +104,10 @@ public abstract class AbstractPerformanc
re.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
+ } finally {
+ if (mk != null) {
+ MicroKernelFactory.disposeInstance(mk);
+ }
}
}
}
@@ -93,13 +119,15 @@ public abstract class AbstractPerformanc
test.setUp(repository, credentials);
try {
// Run a few iterations to warm up the system
- long warmupEnd = System.currentTimeMillis() + warmup * 1000;
- while (System.currentTimeMillis() < warmupEnd) {
- test.execute();
+ if (warmup > 0) {
+ long warmupEnd = System.currentTimeMillis() + warmup;
+ while (System.currentTimeMillis() < warmupEnd) {
+ test.execute();
+ }
}
// Run test iterations, and capture the execution times
- long runtimeEnd = System.currentTimeMillis() + runtime * 1000;
+ long runtimeEnd = System.currentTimeMillis() + runtime;
while (System.currentTimeMillis() < runtimeEnd) {
statistics.addValue(test.execute());
}
@@ -133,13 +161,25 @@ public abstract class AbstractPerformanc
}
}
- protected RepositoryImpl createRepository(String microKernel)
- throws RepositoryException {
+ protected MicroKernel createMicroKernel(String microKernel) {
// TODO: depending on the microKernel string a particular repository
// with that MK must be returned
- return new RepositoryImpl();
+ return new MicroKernelImpl("target/mk-tck-" + System.currentTimeMillis());
+
+ }
+
+ protected RepositoryImpl createRepository(MicroKernel mk) {
+
+ // return new RepositoryImpl();
+
+ mk = new IndexWrapper(mk);
+ ValidatingEditor ve = new ValidatingEditor(
+ new CompositeValidatorProvider(Collections.<ValidatorProvider>emptyList()));
+ ContentRepository contentRepository = new ContentRepositoryImpl(mk, null, ve);
+ return new RepositoryImpl(contentRepository, null);
+
}
}
Modified: jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/AbstractTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/AbstractTest.java?rev=1373371&r1=1373370&r2=1373371&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/AbstractTest.java (original)
+++ jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/AbstractTest.java Wed Aug 15 12:40:47 2012
@@ -76,6 +76,7 @@ public abstract class AbstractTest {
beforeTest();
try {
long start = System.currentTimeMillis();
+ // System.out.println("execute " + this);
runTest();
return System.currentTimeMillis() - start;
} finally {
@@ -193,14 +194,22 @@ public abstract class AbstractTest {
* @param job background job
*/
protected void addBackgroundJob(final Runnable job) {
- Thread thread = new Thread() {
+ Thread thread = new Thread("Background job " + job) {
@Override
public void run() {
while (running) {
+ try {
+ // rate-limit, to avoid 100% cpu usage
+ Thread.sleep(10);
+ } catch (InterruptedException e) {
+ // ignore
+ }
job.run();
}
}
};
+ thread.setDaemon(true);
+ thread.setPriority(Thread.MIN_PRIORITY);
thread.start();
threads.add(thread);
}
Modified: jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/TransientManyChildNodesTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/TransientManyChildNodesTest.java?rev=1373371&r1=1373370&r2=1373371&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/TransientManyChildNodesTest.java (original)
+++ jackrabbit/oak/trunk/oak-bench/base/src/main/java/org/apache/jackrabbit/oak/performance/TransientManyChildNodesTest.java Wed Aug 15 12:40:47 2012
@@ -29,7 +29,7 @@ public class TransientManyChildNodesTest
private static final int CHILD_COUNT = 10 * 1000;
- private static final int ITERATIONS = 1000;
+ private static final int ITERATIONS = 10;
private Session session;
Modified: jackrabbit/oak/trunk/oak-bench/latest/src/test/java/org/apache/jackrabbit/oak/performance/PerformanceBenchmark.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-bench/latest/src/test/java/org/apache/jackrabbit/oak/performance/PerformanceBenchmark.java?rev=1373371&r1=1373370&r2=1373371&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-bench/latest/src/test/java/org/apache/jackrabbit/oak/performance/PerformanceBenchmark.java (original)
+++ jackrabbit/oak/trunk/oak-bench/latest/src/test/java/org/apache/jackrabbit/oak/performance/PerformanceBenchmark.java Wed Aug 15 12:40:47 2012
@@ -23,6 +23,6 @@ public class PerformanceBenchmark extend
@Test
public void testPerformance() throws Exception {
testPerformance("0.3", "default");
- testPerformance("0.3", "other_mk");
+ // testPerformance("0.3", "other_mk");
}
}