Skip to content
Snippets Groups Projects
Commit 0b2cfade authored by Christian Wulf's avatar Christian Wulf
Browse files

refactored test09;

removed test14
parent f97a6040
No related branches found
No related tags found
No related merge requests found
Showing
with 66 additions and 283 deletions
......@@ -23,6 +23,9 @@ public abstract class AbstractInterThreadPipe extends AbstractPipe {
this.signalQueue.offer(signal);
Thread owningThread = cachedTargetStage.getOwningThread();
if (owningThread == null) {
System.err.println("cachedTargetStage: " + cachedTargetStage);
}
if (null != owningThread && isThreadWaiting(owningThread)) { // FIXME remove the null check for performance
owningThread.interrupt();
}
......
......@@ -63,9 +63,12 @@ public class ChwHomeComparisonMethodcallWithPorts extends AbstractProfiledPerfor
// assertEquals(78, value17, 4.1); // +3
// since 13.12.2014 (incl.)
assertEquals(40, value15, 4.1); // -28
// assertEquals(40, value15, 4.1); // -28
// assertEquals(43, value17, 4.1); // -35
// since 28.12.2014 (incl.)
assertEquals(30, value15, 4.1); // -10
// check speedup
assertEquals(2, (double) test19a.overallDurationInNs / test19b.overallDurationInNs, 0.3);
assertEquals(2.5, (double) test19a.overallDurationInNs / test19c.overallDurationInNs, 0.3);
......
......@@ -9,7 +9,6 @@ import org.junit.runners.Suite.SuiteClasses;
import teetime.examples.experiment01.MethodCallThoughputTimestampAnalysis1Test;
import teetime.examples.experiment09pipeimpls.MethodCallThoughputTimestampAnalysis9Test;
import teetime.examples.experiment11.MethodCallThoughputTimestampAnalysis11Test;
import teetime.examples.experiment14.MethodCallThoughputTimestampAnalysis14Test;
import teetime.examples.experiment15.MethodCallThoughputTimestampAnalysis15Test;
import teetime.examples.experiment16.MethodCallThoughputTimestampAnalysis16Test;
import teetime.examples.experiment19.MethodCallThoughputTimestampAnalysis19Test;
......@@ -21,7 +20,6 @@ import util.test.PerformanceCheckProfileRepository;
MethodCallThoughputTimestampAnalysis1Test.class,
MethodCallThoughputTimestampAnalysis9Test.class,
MethodCallThoughputTimestampAnalysis11Test.class,
MethodCallThoughputTimestampAnalysis14Test.class,
MethodCallThoughputTimestampAnalysis15Test.class,
MethodCallThoughputTimestampAnalysis16Test.class,
MethodCallThoughputTimestampAnalysis19Test.class,
......
......@@ -11,6 +11,7 @@ abstract class AbstractPerformanceCheck extends AbstractProfiledPerformanceAsser
protected PerformanceResult test01;
protected PerformanceResult test09CommittablePipes;
protected PerformanceResult test09SingleElementPipes;
protected PerformanceResult test09OrderedGrowableArrayPipes;
@Override
public void check() {
......@@ -22,6 +23,9 @@ abstract class AbstractPerformanceCheck extends AbstractProfiledPerformanceAsser
testMethodIdentifier = MeasurementRepository.buildTestMethodIdentifier(MethodCallThoughputTimestampAnalysis9Test.class, "testSingleElementPipes");
test09SingleElementPipes = PerformanceTest.measurementRepository.performanceResults.get(testMethodIdentifier);
testMethodIdentifier = MeasurementRepository.buildTestMethodIdentifier(MethodCallThoughputTimestampAnalysis9Test.class, "testOrderedGrowableArrayPipes");
test09OrderedGrowableArrayPipes = PerformanceTest.measurementRepository.performanceResults.get(testMethodIdentifier);
}
}
......@@ -16,6 +16,7 @@ class ChwHomePerformanceCheck extends AbstractPerformanceCheck {
checkCommittablePipes();
checkSingleElementPipes();
checkOrderedGrowableArrayPipes();
}
private void checkCommittablePipes() {
......@@ -36,9 +37,7 @@ class ChwHomePerformanceCheck extends AbstractPerformanceCheck {
// since 04.11.2014 (incl.)
// assertEquals(71, medianSpeedup, 2.1); // +27
// since 05.12.2014 (incl.)
// assertEquals(45, medianSpeedup, 2.1); // -26
// since 28.12.2014 (incl.)
assertEquals(56, medianSpeedup, 2.1); // +11
assertEquals(45, medianSpeedup, 2.1); // -26 (45-56)
}
private void checkSingleElementPipes() {
......@@ -60,4 +59,29 @@ class ChwHomePerformanceCheck extends AbstractPerformanceCheck {
assertEquals(24, medianSpeedup, 3.2); // -16
}
private void checkOrderedGrowableArrayPipes() {
double medianSpeedup = (double) test09OrderedGrowableArrayPipes.quantiles.get(0.5) / test01.quantiles.get(0.5);
System.out.println("medianSpeedup (09 ordered growable array pipes): " + medianSpeedup);
// until 25.06.2014 (incl.)
// assertEquals(60, (double) test14.quantiles.get(0.5) / test1.quantiles.get(0.5), 5.1);
// since 26.06.2014 (incl.)
// assertEquals(76, medianSpeedup, 5.1); // +16
// since 04.07.2014 (incl.)
// assertEquals(86, medianSpeedup, 5.1); // +16
// since 11.08.2014 (incl.)
// assertEquals(103, medianSpeedup, 5.1); // +17
// since 31.08.2014 (incl.)
// assertEquals(62, medianSpeedup, 2.1); // -41
// since 04.11.2014 (incl.)
// assertEquals(84, medianSpeedup, 2.1); // +22
// since 05.12.2014 (incl.)
// assertEquals(75, medianSpeedup, 2.1); // -9
// since 13.12.2014 (incl.)
// assertEquals(44, medianSpeedup, 2.1); // -31
// since 28.12.2014 (incl.)
assertEquals(46, medianSpeedup, 2.1); // +2
}
}
......@@ -15,6 +15,7 @@ class ChwWorkPerformanceCheck extends AbstractPerformanceCheck {
checkCommittablePipes();
checkSingleElementPipes();
checkOrderedGrowableArrayPipes();
}
private void checkCommittablePipes() {
......@@ -52,4 +53,24 @@ class ChwWorkPerformanceCheck extends AbstractPerformanceCheck {
// since 14.10.2014 (incl.)
assertEquals(25, medianSpeedup, 3.1); // -31
}
private void checkOrderedGrowableArrayPipes() {
double medianSpeedup = (double) test09OrderedGrowableArrayPipes.quantiles.get(0.5) / test01.quantiles.get(0.5);
System.out.println("medianSpeedup (09 ordered growable array pipes): " + medianSpeedup);
// until 25.06.2014 (incl.)
// assertEquals(60, (double) test14.quantiles.get(0.5) / test1.quantiles.get(0.5), 5.1);
// since 26.06.2014 (incl.)
// assertEquals(76, medianSpeedup, 5.1); // +16
// since 04.07.2014 (incl.)
// assertEquals(86, medianSpeedup, 5.1); // +16
// since 27.08.2014 (incl.)
// assertEquals(102, medianSpeedup, 5.1); // +16
// since 14.10.2014 (incl.)
// assertEquals(81, medianSpeedup, 5.1); // -21
// since 19.12.2014 (incl.)
assertEquals(56, medianSpeedup, 5.1); // -25
}
}
......@@ -21,6 +21,7 @@ import org.junit.Test;
import teetime.framework.pipe.CommittablePipeFactory;
import teetime.framework.pipe.IPipeFactory;
import teetime.framework.pipe.OrderedGrowableArrayPipeFactory;
import teetime.framework.pipe.SingleElementPipeFactory;
import teetime.util.ConstructorClosure;
import teetime.util.TimestampObject;
......@@ -58,6 +59,12 @@ public class MethodCallThoughputTimestampAnalysis9Test extends PerformanceTest {
testWithManyObjects(pipeFactory);
}
@Test
public void testOrderedGrowableArrayPipes() throws Exception {
IPipeFactory pipeFactory = new OrderedGrowableArrayPipeFactory();
testWithManyObjects(pipeFactory);
}
private void testWithManyObjects(final IPipeFactory pipeFactory) {
System.out.println("Testing teetime (mc) with NUM_OBJECTS_TO_CREATE=" + NUM_OBJECTS_TO_CREATE + ", NUM_NOOP_FILTERS="
+ NUM_NOOP_FILTERS + "...");
......
package teetime.examples.experiment14;
import teetime.examples.experiment01.MethodCallThoughputTimestampAnalysis1Test;
import util.test.MeasurementRepository;
import util.test.PerformanceResult;
import util.test.PerformanceTest;
import util.test.AbstractProfiledPerformanceAssertion;
abstract class AbstractPerformanceCheck extends AbstractProfiledPerformanceAssertion {
protected PerformanceResult test01;
protected PerformanceResult test14;
@Override
public void check() {
String testMethodIdentifier = MeasurementRepository.buildTestMethodIdentifier(MethodCallThoughputTimestampAnalysis1Test.class, "testWithManyObjects");
test01 = PerformanceTest.measurementRepository.performanceResults.get(testMethodIdentifier);
testMethodIdentifier = MeasurementRepository.buildTestMethodIdentifier(MethodCallThoughputTimestampAnalysis14Test.class, "testWithManyObjects");
test14 = PerformanceTest.measurementRepository.performanceResults.get(testMethodIdentifier);
}
}
package teetime.examples.experiment14;
import static org.junit.Assert.assertEquals;
import teetime.examples.HostName;
class ChwHomePerformanceCheck extends AbstractPerformanceCheck {
@Override
public String getCorrespondingPerformanceProfile() {
return HostName.CHW_HOME.toString();
}
@Override
public void check() {
super.check();
double medianSpeedup = (double) test14.quantiles.get(0.5) / test01.quantiles.get(0.5);
System.out.println("medianSpeedup (14): " + medianSpeedup);
// until 25.06.2014 (incl.)
// assertEquals(60, (double) test14.quantiles.get(0.5) / test1.quantiles.get(0.5), 5.1);
// since 26.06.2014 (incl.)
// assertEquals(76, medianSpeedup, 5.1); // +16
// since 04.07.2014 (incl.)
// assertEquals(86, medianSpeedup, 5.1); // +16
// since 11.08.2014 (incl.)
// assertEquals(103, medianSpeedup, 5.1); // +17
// since 31.08.2014 (incl.)
// assertEquals(62, medianSpeedup, 2.1); // -41
// since 04.11.2014 (incl.)
// assertEquals(84, medianSpeedup, 2.1); // +22
// since 05.12.2014 (incl.)
// assertEquals(75, medianSpeedup, 2.1); // -9
// since 13.12.2014 (incl.)
// assertEquals(44, medianSpeedup, 2.1); // -31
// since 28.12.2014 (incl.)
assertEquals(46, medianSpeedup, 2.1); // +2
}
}
package teetime.examples.experiment14;
import static org.junit.Assert.assertEquals;
class ChwWorkPerformanceCheck extends AbstractPerformanceCheck {
@Override
public String getCorrespondingPerformanceProfile() {
return "ChwWork";
}
@Override
public void check() {
super.check();
double medianSpeedup = (double) test14.quantiles.get(0.5) / test01.quantiles.get(0.5);
System.out.println("medianSpeedup (14): " + medianSpeedup);
// until 25.06.2014 (incl.)
// assertEquals(60, (double) test14.quantiles.get(0.5) / test1.quantiles.get(0.5), 5.1);
// since 26.06.2014 (incl.)
// assertEquals(76, medianSpeedup, 5.1); // +16
// since 04.07.2014 (incl.)
// assertEquals(86, medianSpeedup, 5.1); // +16
// since 27.08.2014 (incl.)
// assertEquals(102, medianSpeedup, 5.1); // +16
// since 14.10.2014 (incl.)
// assertEquals(81, medianSpeedup, 5.1); // -21
// since 19.12.2014 (incl.)
assertEquals(56, medianSpeedup, 5.1); // -25
}
}
/***************************************************************************
* Copyright 2014 Kieker Project (http://kieker-monitoring.net)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
***************************************************************************/
package teetime.examples.experiment14;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import teetime.util.ConstructorClosure;
import teetime.util.TimestampObject;
import util.test.PerformanceTest;
import util.test.AbstractProfiledPerformanceAssertion;
/**
* @author Christian Wulf
*
* @since 1.10
*/
public class MethodCallThoughputTimestampAnalysis14Test extends PerformanceTest {
@BeforeClass
public static void beforeClass() {
PERFORMANCE_CHECK_PROFILE_REPOSITORY.register(MethodCallThoughputTimestampAnalysis14Test.class, new ChwWorkPerformanceCheck());
PERFORMANCE_CHECK_PROFILE_REPOSITORY.register(MethodCallThoughputTimestampAnalysis14Test.class, new ChwHomePerformanceCheck());
};
@AfterClass
public static void afterClass() {
AbstractProfiledPerformanceAssertion performanceCheckProfile = PERFORMANCE_CHECK_PROFILE_REPOSITORY.get(MethodCallThoughputTimestampAnalysis14Test.class);
performanceCheckProfile.check();
};
@Test
public void testWithManyObjects() {
System.out.println("Testing teetime (mc) with NUM_OBJECTS_TO_CREATE=" + NUM_OBJECTS_TO_CREATE + ", NUM_NOOP_FILTERS="
+ NUM_NOOP_FILTERS + "...");
final MethodCallThroughputAnalysis14 analysis = new MethodCallThroughputAnalysis14();
analysis.setNumNoopFilters(NUM_NOOP_FILTERS);
analysis.setTimestampObjects(this.timestampObjects);
analysis.setInput(NUM_OBJECTS_TO_CREATE, new ConstructorClosure<TimestampObject>() {
@Override
public TimestampObject create() {
return new TimestampObject();
}
});
analysis.init();
this.stopWatch.start();
try {
analysis.start();
} finally {
this.stopWatch.end();
}
}
}
/***************************************************************************
* Copyright 2014 Kieker Project (http://kieker-monitoring.net)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
***************************************************************************/
package teetime.examples.experiment14;
import java.util.List;
import teetime.framework.Stage;
import teetime.framework.OldHeadPipeline;
import teetime.framework.RunnableProducerStage;
import teetime.framework.pipe.IPipeFactory;
import teetime.framework.pipe.PipeFactoryRegistry;
import teetime.framework.pipe.PipeFactoryRegistry.PipeOrdering;
import teetime.framework.pipe.PipeFactoryRegistry.ThreadCommunication;
import teetime.stage.CollectorSink;
import teetime.stage.NoopFilter;
import teetime.stage.ObjectProducer;
import teetime.stage.StartTimestampFilter;
import teetime.stage.StopTimestampFilter;
import teetime.util.ConstructorClosure;
import teetime.util.TimestampObject;
/**
* @author Christian Wulf
*
* @since 1.10
*/
public class MethodCallThroughputAnalysis14 {
private long numInputObjects;
private ConstructorClosure<TimestampObject> inputObjectCreator;
private int numNoopFilters;
private List<TimestampObject> timestampObjects;
private Runnable runnable;
private final PipeFactoryRegistry pipeFactory = PipeFactoryRegistry.INSTANCE;
public void init() {
Stage pipeline = this.buildPipeline();
this.runnable = new RunnableProducerStage(pipeline);
}
/**
* @param numNoopFilters
* @return
* @since 1.10
*/
private OldHeadPipeline<ObjectProducer<TimestampObject>, CollectorSink<TimestampObject>> buildPipeline() {
@SuppressWarnings("unchecked")
final NoopFilter<TimestampObject>[] noopFilters = new NoopFilter[this.numNoopFilters];
// create stages
final ObjectProducer<TimestampObject> objectProducer = new ObjectProducer<TimestampObject>(this.numInputObjects, this.inputObjectCreator);
final StartTimestampFilter startTimestampFilter = new StartTimestampFilter();
for (int i = 0; i < noopFilters.length; i++) {
noopFilters[i] = new NoopFilter<TimestampObject>();
}
final StopTimestampFilter stopTimestampFilter = new StopTimestampFilter();
final CollectorSink<TimestampObject> collectorSink = new CollectorSink<TimestampObject>(this.timestampObjects);
final OldHeadPipeline<ObjectProducer<TimestampObject>, CollectorSink<TimestampObject>> pipeline = new OldHeadPipeline<ObjectProducer<TimestampObject>, CollectorSink<TimestampObject>>();
pipeline.setFirstStage(objectProducer);
pipeline.setLastStage(collectorSink);
IPipeFactory factory = this.pipeFactory.getPipeFactory(ThreadCommunication.INTRA, PipeOrdering.QUEUE_BASED, true);
factory.create(objectProducer.getOutputPort(), startTimestampFilter.getInputPort());
factory.create(startTimestampFilter.getOutputPort(), noopFilters[0].getInputPort());
for (int i = 0; i < noopFilters.length - 1; i++) {
factory.create(noopFilters[i].getOutputPort(), noopFilters[i + 1].getInputPort());
}
factory.create(noopFilters[noopFilters.length - 1].getOutputPort(), stopTimestampFilter.getInputPort());
factory.create(stopTimestampFilter.getOutputPort(), collectorSink.getInputPort());
return pipeline;
}
public void start() {
this.runnable.run();
}
public void setInput(final int numInputObjects, final ConstructorClosure<TimestampObject> inputObjectCreator) {
this.numInputObjects = numInputObjects;
this.inputObjectCreator = inputObjectCreator;
}
public int getNumNoopFilters() {
return this.numNoopFilters;
}
public void setNumNoopFilters(final int numNoopFilters) {
this.numNoopFilters = numNoopFilters;
}
public List<TimestampObject> getTimestampObjects() {
return this.timestampObjects;
}
public void setTimestampObjects(final List<TimestampObject> timestampObjects) {
this.timestampObjects = timestampObjects;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment