diff --git a/trainbenchmark/trainbenchmark-alternate-scripts/build.gradle b/trainbenchmark/trainbenchmark-alternate-scripts/build.gradle index 295ef68a23de21129255c45b90a54e2d1a1ad4a2..fc879099b2d9c4ca1b83fd0cc48db6657cce75ad 100644 --- a/trainbenchmark/trainbenchmark-alternate-scripts/build.gradle +++ b/trainbenchmark/trainbenchmark-alternate-scripts/build.gradle @@ -4,36 +4,22 @@ dependencies { compile project(':trainbenchmark-generator') compile project(':trainbenchmark-generator-emf') - compile project(':trainbenchmark-generator-graph-neo4j') compile project(':trainbenchmark-generator-graph-tinkerpop') - compile project(':trainbenchmark-generator-rdf') - compile project(':trainbenchmark-generator-sql') compile project(':trainbenchmark-generator-json4ag') - compile project(':trainbenchmark-generator-json4ag-ref') compile project(':trainbenchmark-generator-dot') compile project(':trainbenchmark-tool') -// compile project(':trainbenchmark-tool-blazegraph') - compile project(':trainbenchmark-tool-drools') - compile project(':trainbenchmark-tool-eclipseocl') - compile project(':trainbenchmark-tool-emfapi') -// compile project(':trainbenchmark-tool-epsilon') -// compile project(':trainbenchmark-tool-ingraph') compile project(':trainbenchmark-tool-jastadd-base') - compile project(':trainbenchmark-tool-jastadd-symbolic-references') - compile project(':trainbenchmark-tool-jastadd-symbolic-references-base') - compile project(':trainbenchmark-tool-jastadd-symbolic-references-incremental') - compile project(':trainbenchmark-tool-jastadd-java-references') - compile project(':trainbenchmark-tool-jastadd-java-references-base') - compile project(':trainbenchmark-tool-jastadd-java-references-incremental') - compile project(':trainbenchmark-tool-jena') - compile project(':trainbenchmark-tool-kiama') - compile project(':trainbenchmark-tool-mysql') - compile project(':trainbenchmark-tool-neo4j') - compile project(':trainbenchmark-tool-racr-python') - compile project(':trainbenchmark-tool-racr-scheme') - compile project(':trainbenchmark-tool-racr-cpp') - compile project(':trainbenchmark-tool-rdf4j') - compile project(':trainbenchmark-tool-sqlite') + compile project(':trainbenchmark-tool-jastadd-namelookup') + compile project(':trainbenchmark-tool-jastadd-namelookup-base') + compile project(':trainbenchmark-tool-jastadd-namelookup-incremental') + compile project(':trainbenchmark-tool-jastadd-optimized') + compile project(':trainbenchmark-tool-jastadd-optimized-base') + compile project(':trainbenchmark-tool-jastadd-optimized-incremental') +// compile project(':trainbenchmark-tool-jastadd-specialized') +// compile project(':trainbenchmark-tool-jastadd-specialized-base') +// compile project(':trainbenchmark-tool-jastadd-specialized-incremental') +// compile project(':trainbenchmark-tool-jastadd-relast') +// compile project(':trainbenchmark-tool-jastadd-relast-incremental') compile project(':trainbenchmark-tool-tinkergraph') compile project(':trainbenchmark-tool-viatra') } diff --git a/trainbenchmark/trainbenchmark-alternate-scripts/src/main/java/de/tudresden/inf/st/train/scripts/BenchmarkMain.java b/trainbenchmark/trainbenchmark-alternate-scripts/src/main/java/de/tudresden/inf/st/train/scripts/BenchmarkMain.java index 8659f031381411f57975f3b6dd3582d071a2c46e..c5dca00cfa62bd4fec9cd314ef0672b37949e1a8 100644 --- a/trainbenchmark/trainbenchmark-alternate-scripts/src/main/java/de/tudresden/inf/st/train/scripts/BenchmarkMain.java +++ b/trainbenchmark/trainbenchmark-alternate-scripts/src/main/java/de/tudresden/inf/st/train/scripts/BenchmarkMain.java @@ -64,9 +64,13 @@ public class BenchmarkMain { ObjectMapper mapper = Utils.getMapper(); BenchmarkSettingsBasics bbs = Utils.readFromResource(mapper, "basic-settings.json", BenchmarkSettingsBasics.class); + try { BenchmarkSettingsBasics loca_bbs = Utils.readFromResource(mapper, "local-basic-settings.json", BenchmarkSettingsBasics.class); - Utils.updateBasicsWithLocal(bbs, loca_bbs); + Utils.updateBasicsWithLocal(bbs, loca_bbs); + } catch (IOException e) { + System.out.println("No file 'local-basic-settings.json' found. Using default!"); + } // import tools to use List<BenchmarkConfigBuilder<? extends BenchmarkConfig, ? extends BenchmarkConfigBuilder<?, ?>>> builders = diff --git a/trainbenchmark/trainbenchmark-alternate-scripts/src/main/java/de/tudresden/inf/st/train/scripts/BenchmarkSettingsAvailableFormats.java b/trainbenchmark/trainbenchmark-alternate-scripts/src/main/java/de/tudresden/inf/st/train/scripts/BenchmarkSettingsAvailableFormats.java index 4b93da1e665b86ec704b109e288dc29c3029b75d..439a0801d10840f94907902fb355864c04a7d921 100644 --- a/trainbenchmark/trainbenchmark-alternate-scripts/src/main/java/de/tudresden/inf/st/train/scripts/BenchmarkSettingsAvailableFormats.java +++ b/trainbenchmark/trainbenchmark-alternate-scripts/src/main/java/de/tudresden/inf/st/train/scripts/BenchmarkSettingsAvailableFormats.java @@ -1,16 +1,10 @@ package de.tudresden.inf.st.train.scripts; import de.tudresden.inf.st.trainbenchmark.generator.json4ag.config.Json4AgGeneratorConfigBuilder; -import de.tudresden.inf.st.trainbenchmark.generator.json4agref.config.Json4AgRefGeneratorConfigBuilder; import hu.bme.mit.trainbenchmark.generator.config.*; import hu.bme.mit.trainbenchmark.generator.emf.config.EmfGeneratorConfigBuilder; -import hu.bme.mit.trainbenchmark.generator.graph.neo4j.config.Neo4jGraphGeneratorConfigBuilder; import hu.bme.mit.trainbenchmark.generator.graph.tinkerpop.config.TinkerGraphFormat; import hu.bme.mit.trainbenchmark.generator.graph.tinkerpop.config.TinkerGraphGeneratorConfigBuilder; -import hu.bme.mit.trainbenchmark.generator.rdf.config.RdfGeneratorConfigBuilder; -import hu.bme.mit.trainbenchmark.generator.sql.config.SqlGeneratorConfigBuilder; -import hu.bme.mit.trainbenchmark.neo4j.config.Neo4jGraphFormat; -import hu.bme.mit.trainbenchmark.rdf.RdfFormat; import java.util.*; import java.util.stream.Collectors; @@ -45,15 +39,9 @@ public class BenchmarkSettingsAvailableFormats { private static List<GeneratorConfigBuilder<? extends GeneratorConfig, ? extends GeneratorConfigBuilder<?, ?>>> getAllBuilders() { return Arrays.asList( - new Neo4jGraphGeneratorConfigBuilder().setGraphFormat(Neo4jGraphFormat.CSV), - new Neo4jGraphGeneratorConfigBuilder().setGraphFormat(Neo4jGraphFormat.GRAPHML), new EmfGeneratorConfigBuilder(), new TinkerGraphGeneratorConfigBuilder().setGraphFormat(TinkerGraphFormat.GRAPHML), - new Json4AgGeneratorConfigBuilder(), - new Json4AgRefGeneratorConfigBuilder(), - new RdfGeneratorConfigBuilder().setFormat(RdfFormat.TURTLE).setInferred(true), - new RdfGeneratorConfigBuilder().setFormat(RdfFormat.TURTLE).setInferred(false), - new SqlGeneratorConfigBuilder() + new Json4AgGeneratorConfigBuilder() ); } diff --git a/trainbenchmark/trainbenchmark-alternate-scripts/src/main/java/de/tudresden/inf/st/train/scripts/BenchmarkSettingsAvailableTools.java b/trainbenchmark/trainbenchmark-alternate-scripts/src/main/java/de/tudresden/inf/st/train/scripts/BenchmarkSettingsAvailableTools.java index 1dc230051a123af7a37705099d5e27f21254fc58..49dc323b78a5cbb8f5a12c2e9326b5b3c642f2ab 100644 --- a/trainbenchmark/trainbenchmark-alternate-scripts/src/main/java/de/tudresden/inf/st/train/scripts/BenchmarkSettingsAvailableTools.java +++ b/trainbenchmark/trainbenchmark-alternate-scripts/src/main/java/de/tudresden/inf/st/train/scripts/BenchmarkSettingsAvailableTools.java @@ -1,23 +1,14 @@ package de.tudresden.inf.st.train.scripts; -import de.tudresden.inf.st.train.kiama.config.KiamaBenchmarkConfigBuilder; -import de.tudresden.inf.st.train.racr.config.RacrBenchmarkConfigBuilder; +import de.tudresden.inf.st.train.jastadd.config.JastaddNameLookupBenchmarkConfigBuilder; +import de.tudresden.inf.st.train.jastadd.config.JastaddNameLookupIncrementalBenchmarkConfigBuilder; +import de.tudresden.inf.st.train.jastadd.config.JastaddOptimizedBenchmarkConfigBuilder; +import de.tudresden.inf.st.train.jastadd.config.JastaddOptimizedIncrementalBenchmarkConfigBuilder; import hu.bme.mit.trainbenchmark.benchmark.config.*; import hu.bme.mit.trainbenchmark.benchmark.tinkergraph.config.TinkerGraphBenchmarkConfigBuilder; import hu.bme.mit.trainbenchmark.benchmark.viatra.config.ViatraBackend; import hu.bme.mit.trainbenchmark.benchmark.viatra.config.ViatraBenchmarkConfigBuilder; -import hu.bme.mit.trainbenchmark.benchmark.drools.config.DroolsBenchmarkConfigBuilder; -import hu.bme.mit.trainbenchmark.benchmark.eclipseocl.config.EclipseOclBenchmarkConfigBuilder; -import hu.bme.mit.trainbenchmark.benchmark.emfapi.config.EmfApiBenchmarkConfigBuilder; -import hu.bme.mit.trainbenchmark.benchmark.jena.config.JenaBenchmarkConfigBuilder; -import hu.bme.mit.trainbenchmark.benchmark.mysql.config.MySqlBenchmarkConfigBuilder; -import hu.bme.mit.trainbenchmark.benchmark.sqlite.config.SQLiteBenchmarkConfigBuilder; -import hu.bme.mit.trainbenchmark.benchmark.neo4j.config.Neo4jBenchmarkConfigBuilder; -import hu.bme.mit.trainbenchmark.neo4j.config.Neo4jGraphFormat; -import hu.bme.mit.trainbenchmark.benchmark.neo4j.config.Neo4jEngine; -import hu.bme.mit.trainbenchmark.benchmark.rdf4j.config.Rdf4jBenchmarkConfigBuilder; - import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -50,24 +41,10 @@ public class BenchmarkSettingsAvailableTools { private static List<BenchmarkConfigBuilder<? extends BenchmarkConfig, ? extends BenchmarkConfigBuilder<?, ?>>> getAllBuilders() { return Arrays.asList( - new DroolsBenchmarkConfigBuilder(), - new EclipseOclBenchmarkConfigBuilder(), - new EmfApiBenchmarkConfigBuilder(), - getBuilderByName("de.tudresden.inf.st.train.jastadd.config.JastaddBenchmarkConfigBuilder"), - getBuilderByName("de.tudresden.inf.st.train.jastadd.config.JastaddIncrementalBenchmarkConfigBuilder"), - getBuilderByName("de.tudresden.inf.st.train.jastadd.config.JastaddSymbolicBenchmarkConfigBuilder"), - getBuilderByName("de.tudresden.inf.st.train.jastadd.config.JastaddSymbolicIncrementalBenchmarkConfigBuilder"), - new JenaBenchmarkConfigBuilder().setInferencing(false), - new JenaBenchmarkConfigBuilder().setInferencing(true), - new KiamaBenchmarkConfigBuilder(), - new MySqlBenchmarkConfigBuilder(), - new Neo4jBenchmarkConfigBuilder().setEngine(Neo4jEngine.COREAPI).setGraphFormat(Neo4jGraphFormat.CSV ), - new Neo4jBenchmarkConfigBuilder().setEngine(Neo4jEngine.CYPHER ).setGraphFormat(Neo4jGraphFormat.GRAPHML), - new RacrBenchmarkConfigBuilder().setVerbose(false).useCpp().useInternalServer(), - new RacrBenchmarkConfigBuilder().setVerbose(false).usePython(), - new RacrBenchmarkConfigBuilder().setVerbose(false).useScheme(), - new Rdf4jBenchmarkConfigBuilder().setInferencing(false), - new SQLiteBenchmarkConfigBuilder(), + new JastaddNameLookupBenchmarkConfigBuilder(), + new JastaddNameLookupIncrementalBenchmarkConfigBuilder(), + new JastaddOptimizedBenchmarkConfigBuilder(), + new JastaddOptimizedIncrementalBenchmarkConfigBuilder(), new TinkerGraphBenchmarkConfigBuilder(), new ViatraBenchmarkConfigBuilder().setBackend(ViatraBackend.INCREMENTAL), new ViatraBenchmarkConfigBuilder().setBackend(ViatraBackend.LOCAL_SEARCH) diff --git a/trainbenchmark/trainbenchmark-alternate-scripts/src/main/java/de/tudresden/inf/st/train/scripts/GenerateMain.java b/trainbenchmark/trainbenchmark-alternate-scripts/src/main/java/de/tudresden/inf/st/train/scripts/GenerateMain.java index 052019c495c03eb6b2ee198989f003f32e2151e9..367c5f5f0e3b73014640f242af5df01c4cbd6496 100644 --- a/trainbenchmark/trainbenchmark-alternate-scripts/src/main/java/de/tudresden/inf/st/train/scripts/GenerateMain.java +++ b/trainbenchmark/trainbenchmark-alternate-scripts/src/main/java/de/tudresden/inf/st/train/scripts/GenerateMain.java @@ -5,6 +5,7 @@ import hu.bme.mit.trainbenchmark.config.ExecutionConfig; import hu.bme.mit.trainbenchmark.generator.config.*; import hu.bme.mit.trainbenchmark.generator.runner.GeneratorRunner; +import java.io.IOException; import java.util.List; /** @@ -17,9 +18,13 @@ public class GenerateMain { ObjectMapper mapper = Utils.getMapper(); BenchmarkSettingsBasics bbs = Utils.readFromResource(mapper, "basic-settings.json", BenchmarkSettingsBasics.class); - BenchmarkSettingsBasics loca_bbs = Utils.readFromResource(mapper, "local-basic-settings.json", - BenchmarkSettingsBasics.class); - Utils.updateBasicsWithLocal(bbs, loca_bbs); + try { + BenchmarkSettingsBasics loca_bbs = Utils.readFromResource(mapper, "local-basic-settings.json", + BenchmarkSettingsBasics.class); + Utils.updateBasicsWithLocal(bbs, loca_bbs); + } catch (IOException e) { + System.out.println("No file 'local-basic-settings.json' found. Using default!"); + } // import formats to use List<GeneratorConfigBuilder<? extends GeneratorConfig, ? extends GeneratorConfigBuilder<?, ?>>> builders = diff --git a/trainbenchmark/trainbenchmark-alternate-scripts/src/main/resources/basic-settings.json b/trainbenchmark/trainbenchmark-alternate-scripts/src/main/resources/basic-settings.json index 6d6b000cafc4e090b2ed76e1729522066f9654b1..501ab8fc36d9f4507c97454d9dbc36e37b7637b7 100644 --- a/trainbenchmark/trainbenchmark-alternate-scripts/src/main/resources/basic-settings.json +++ b/trainbenchmark/trainbenchmark-alternate-scripts/src/main/resources/basic-settings.json @@ -5,24 +5,10 @@ "runs": 1, "dry-run": true, "tools": [ - "Drools", - "Eclipse OCL", - "EMF API", - "Jena (Inferencing)", - "Jena (No Inferencing)", - "MySQL", - "Neo4j (Core API-CSV)", - "Neo4j (Cypher-GraphML)", - "Racr (Scheme)", - "Racr (Python)", - "Racr (CPP)", - "RDF4J (No Inferencing)", - "SQLite", - "Jastadd (Symbolic References)", - "Jastadd (Incremental + Symbolic References)", - "Jastadd (Java References)", - "Jastadd (Incremental + Java References)", - "Kiama", + "Jastadd (Name Lookup)", + "Jastadd (Incremental Name Lookup)", + "Jastadd (Optimized)", + "Jastadd (Optimized Incremental)", "TinkerGraph", "VIATRA (Incremental)", "VIATRA (Local Search)" @@ -30,10 +16,7 @@ "formats": [ "emf", "json4ag", - "json4ag-ref", - "graph-tinkerpop", - "rdf", - "sql" + "graph-tinkerpop" ], "jvmSettings": [ { diff --git a/trainbenchmark/trainbenchmark-config/src/main/java/hu/bme/mit/trainbenchmark/config/ExecutionConfig.java b/trainbenchmark/trainbenchmark-config/src/main/java/hu/bme/mit/trainbenchmark/config/ExecutionConfig.java index fa0ba9c21b13c1a7e1f5341ecd2a9e23f87f242c..a828d68d792bd8bdea8e49016ac93cea45740d05 100644 --- a/trainbenchmark/trainbenchmark-config/src/main/java/hu/bme/mit/trainbenchmark/config/ExecutionConfig.java +++ b/trainbenchmark/trainbenchmark-config/src/main/java/hu/bme/mit/trainbenchmark/config/ExecutionConfig.java @@ -4,14 +4,20 @@ public class ExecutionConfig { protected Integer initialMemory; protected Integer maxMemory; + protected Boolean dryRun; - public ExecutionConfig(final Integer initialMemory, final Integer maxMemory) { + public ExecutionConfig(final Integer initialMemory, final Integer maxMemory, final boolean dryRun) { this.initialMemory = initialMemory; this.maxMemory = maxMemory; + this.dryRun = dryRun; + } + + public ExecutionConfig(final Integer initialMemory, final Integer maxMemory) { + this(initialMemory, maxMemory, true); } /** - * + * * @return The initial memory for the benchmark JVM in MBs. */ public Integer getInitialMemory() { @@ -41,7 +47,15 @@ public class ExecutionConfig { public String getXmx() { return maxMemory + "M"; } - + + /** + * + * @return whether this benchmark run must not start any Java processes + */ + public Boolean getDryRun() { + return dryRun; + } + public static ExecutionConfig defaultExecutionConfig() { return new ExecutionConfig(1000, 1000); } diff --git a/trainbenchmark/trainbenchmark-tool/src/main/java/hu/bme/mit/trainbenchmark/benchmark/config/BenchmarkConfigBase.java b/trainbenchmark/trainbenchmark-tool/src/main/java/hu/bme/mit/trainbenchmark/benchmark/config/BenchmarkConfigBase.java index 8467833190a8872e79dacdf59a40b8923cbeebb8..8ac9f8c43332d12e21fd930026cc3248119238d4 100644 --- a/trainbenchmark/trainbenchmark-tool/src/main/java/hu/bme/mit/trainbenchmark/benchmark/config/BenchmarkConfigBase.java +++ b/trainbenchmark/trainbenchmark-tool/src/main/java/hu/bme/mit/trainbenchmark/benchmark/config/BenchmarkConfigBase.java @@ -24,7 +24,7 @@ public final class BenchmarkConfigBase extends AbstractConfigBase { /** * The id for the benchmark, used for determining the result directory. */ - protected final int benchmarkId; + protected final String benchmarkId; /** * The timeout for each measurement run in seconds. @@ -68,7 +68,7 @@ public final class BenchmarkConfigBase extends AbstractConfigBase { */ protected final Optional<Integer> transformationConstant; - protected BenchmarkConfigBase(final int benchmarkId, final long timeout, final int runs, final String modelFilename, + protected BenchmarkConfigBase(final String benchmarkId, final long timeout, final int runs, final String modelFilename, final List<RailwayOperation> operations, final String workload, final TransformationChangeSetStrategy transformationChangeSetStrategy, final Optional<Integer> queryTransformationCount, final Optional<Integer> transformationConstant) { @@ -84,7 +84,7 @@ public final class BenchmarkConfigBase extends AbstractConfigBase { this.transformationConstant = transformationConstant; } - public int getBenchmarkId() { + public String getBenchmarkId() { return benchmarkId; } diff --git a/trainbenchmark/trainbenchmark-tool/src/main/java/hu/bme/mit/trainbenchmark/benchmark/config/BenchmarkConfigBaseBuilder.java b/trainbenchmark/trainbenchmark-tool/src/main/java/hu/bme/mit/trainbenchmark/benchmark/config/BenchmarkConfigBaseBuilder.java index 03fb69424a80bf657b84135f5034dba2f00c5194..6e5b1d23253344b852bdf14d7ed017b183182adc 100644 --- a/trainbenchmark/trainbenchmark-tool/src/main/java/hu/bme/mit/trainbenchmark/benchmark/config/BenchmarkConfigBaseBuilder.java +++ b/trainbenchmark/trainbenchmark-tool/src/main/java/hu/bme/mit/trainbenchmark/benchmark/config/BenchmarkConfigBaseBuilder.java @@ -8,7 +8,7 @@ import com.google.common.base.Preconditions; import hu.bme.mit.trainbenchmark.constants.RailwayOperation; public final class BenchmarkConfigBaseBuilder { - private Integer benchmarkId; + private String benchmarkId; private Long timeout; private Integer runs; private String modelFilename; @@ -65,7 +65,7 @@ public final class BenchmarkConfigBaseBuilder { return this; } - public BenchmarkConfigBaseBuilder setBenchmarkId(final Integer benchmarkId) { + public BenchmarkConfigBaseBuilder setBenchmarkId(final String benchmarkId) { this.benchmarkId = benchmarkId; return this; } diff --git a/trainbenchmark/trainbenchmark-tool/src/main/java/hu/bme/mit/trainbenchmark/benchmark/result/AbstractResult.java b/trainbenchmark/trainbenchmark-tool/src/main/java/hu/bme/mit/trainbenchmark/benchmark/result/AbstractResult.java index a8143f187ebb36a11ba38191840fdff32191b03d..f2a13294252520192b52c0b2a544adca7c009310 100644 --- a/trainbenchmark/trainbenchmark-tool/src/main/java/hu/bme/mit/trainbenchmark/benchmark/result/AbstractResult.java +++ b/trainbenchmark/trainbenchmark-tool/src/main/java/hu/bme/mit/trainbenchmark/benchmark/result/AbstractResult.java @@ -2,6 +2,7 @@ package hu.bme.mit.trainbenchmark.benchmark.result; import java.io.File; import java.io.IOException; +import java.nio.charset.Charset; import org.apache.commons.io.FileUtils; @@ -24,8 +25,9 @@ public abstract class AbstractResult { protected final String MODEL = "Model"; protected final String RUN = "Run"; - protected final int benchmarkId; + protected final String benchmarkId; protected final String toolName; + protected final String projectName; protected final String workload; protected final String workspaceDir; protected final String model; @@ -34,6 +36,7 @@ public abstract class AbstractResult { public AbstractResult(final BenchmarkConfig bc) { this.benchmarkId = bc.getConfigBase().getBenchmarkId(); this.toolName = bc.getToolName(); + this.projectName = bc.getProjectName(); this.workload = bc.getConfigBase().getWorkload(); this.workspaceDir = bc.getConfigBase().getWorkspaceDir(); this.model = bc.getConfigBase().getModelFilename(); @@ -41,13 +44,15 @@ public abstract class AbstractResult { } public void serializeCsv(final String csv, final String filePrefix) throws IOException { - final String matchesCsvPath = String.format("%s/%s-%s-%s-%s-%s.csv", getResultDir(), filePrefix, toolName, - workload, model, description); - FileUtils.write(new File(matchesCsvPath), csv); + File targetDir = ResultHelper.getResultDirectory(projectName, benchmarkId); + String fileName = String.format("%s-%s-%s-%s-%s.csv", filePrefix, toolName, workload, model, description); +// final String matchesCsvPath = String.format("%s/%s-%s-%s-%s-%s.csv", getResultDir(), filePrefix, toolName, +// workload, model, description); + FileUtils.write(FileUtils.getFile(targetDir, fileName), csv, Charset.defaultCharset()); } - public String getResultDir() { - return workspaceDir + ResultHelper.getResultDirForId(benchmarkId); - } +// public String getResultDir() { +// return workspaceDir + ResultHelper.getResultDirForId(benchmarkId); +// } } diff --git a/trainbenchmark/trainbenchmark-tool/src/main/java/hu/bme/mit/trainbenchmark/benchmark/result/ResultHelper.java b/trainbenchmark/trainbenchmark-tool/src/main/java/hu/bme/mit/trainbenchmark/benchmark/result/ResultHelper.java index 56ca0bbedf4cbe7ffd982a478514efb1aec758d2..737335677b1848f11ccc2e48259ffbeca4e9a694 100644 --- a/trainbenchmark/trainbenchmark-tool/src/main/java/hu/bme/mit/trainbenchmark/benchmark/result/ResultHelper.java +++ b/trainbenchmark/trainbenchmark-tool/src/main/java/hu/bme/mit/trainbenchmark/benchmark/result/ResultHelper.java @@ -3,8 +3,15 @@ package hu.bme.mit.trainbenchmark.benchmark.result; import java.io.File; import java.io.IOException; import java.nio.file.*; +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.Arrays; +import java.util.Collection; +import java.util.Date; +import hu.bme.mit.trainbenchmark.benchmark.config.BenchmarkConfig; +import hu.bme.mit.trainbenchmark.benchmark.config.BenchmarkConfigBuilder; +import hu.bme.mit.trainbenchmark.config.ExecutionConfig; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.StringUtils; @@ -12,6 +19,7 @@ public final class ResultHelper { public static final String WORKSPACE_DIR = "../"; public static final String RESULT_DIR = "results/"; + public static final String TOOLS_DIR = "tools/"; public static final String DIAGRAM_DIR = "diagrams/"; public static final String SCRIPT_PATH = WORKSPACE_DIR + "trainbenchmark-scripts/src/"; public static final String BENCHMARK_SCRIPT = "BenchmarkScript.groovy"; @@ -94,4 +102,38 @@ public final class ResultHelper { FileUtils.copyFile(srcFile, destFile); } + public static void createNewResultDirs(Collection<BenchmarkConfigBuilder<? extends BenchmarkConfig, ? extends BenchmarkConfigBuilder<?, ?>>> tools) { + } + + /** + * Prepare a benchmark run, i.e., creates necessary directories. This operation is idempotent. + * @param config the benchmark configuration + * @param ec the execution configuration + */ + public static void prepare(BenchmarkConfig config, ExecutionConfig ec) { + // ensure directory for the tool + File toolDir = getToolDirectory(config.getProjectName()); + toolDir.mkdir(); + // ensure directory for the run inside toolDir + File runDir = getResultDirectory(toolDir, config.getConfigBase().getBenchmarkId()); + runDir.mkdir(); + } + + public static String getNow() { + DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); + return dateFormat.format(new Date()); + } + + public static File getToolDirectory(String projectName) { + return FileUtils.getFile(WORKSPACE_DIR, RESULT_DIR, TOOLS_DIR, projectName); + } + + public static File getResultDirectory(File toolDirectory, String benchmarkId) { + return FileUtils.getFile(toolDirectory, "run-" + benchmarkId); + } + + public static File getResultDirectory(String projectName, String benchmarkId) { + return getResultDirectory(getToolDirectory(projectName), benchmarkId); + } + } diff --git a/trainbenchmark/trainbenchmark-tool/src/main/java/hu/bme/mit/trainbenchmark/benchmark/runcomponents/BenchmarkRunner.java b/trainbenchmark/trainbenchmark-tool/src/main/java/hu/bme/mit/trainbenchmark/benchmark/runcomponents/BenchmarkRunner.java index 9136edcca823a519a228c863d31ec4b1aaada6c4..06d8bb80862e12e22e66e9c30b3742560367c0b4 100644 --- a/trainbenchmark/trainbenchmark-tool/src/main/java/hu/bme/mit/trainbenchmark/benchmark/runcomponents/BenchmarkRunner.java +++ b/trainbenchmark/trainbenchmark-tool/src/main/java/hu/bme/mit/trainbenchmark/benchmark/runcomponents/BenchmarkRunner.java @@ -11,14 +11,38 @@ import org.apache.commons.exec.Executor; import org.apache.commons.exec.PumpStreamHandler; import com.google.common.base.Joiner; - +import com.google.common.collect.ImmutableMap; import hu.bme.mit.trainbenchmark.benchmark.config.BenchmarkConfig; import hu.bme.mit.trainbenchmark.benchmark.memory.MemoryResult; import hu.bme.mit.trainbenchmark.config.ExecutionConfig; +import org.apache.commons.exec.*; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Map; public class BenchmarkRunner { - public static int runPerformanceBenchmark(final BenchmarkConfig bc, final ExecutionConfig ec) + public static String dictFormat(String format, Map<String, Object> values) { + StringBuilder convFormat = new StringBuilder(format); + ArrayList<Object> valueList = new ArrayList<>(); + int currentPos = 1; + for (String key : values.keySet()) { + String formatKey = "%(" + key + ")", + formatPos = "%" + Integer.toString(currentPos) + "$1s"; + int index = -1; + while ((index = convFormat.indexOf(formatKey, index)) != -1) { + convFormat.replace(index, index + formatKey.length(), formatPos); + index += formatPos.length(); + } + valueList.add(values.get(key)); + ++currentPos; + } + return String.format(convFormat.toString(), valueList.toArray()); + } + + public static int runPerformanceBenchmark(final BenchmarkConfig bc, final ExecutionConfig ec, String jvmSetting) throws IOException, InterruptedException { final Joiner joiner = Joiner.on(", "); System.out.println("Running benchmark."); @@ -38,9 +62,17 @@ public class BenchmarkRunner { final String jarPath = String.format("../%s/build/libs/%s-1.0.0-SNAPSHOT-fat.jar %s", projectName, projectName, configPath); - final String javaCommand = String.format("java -Xms%s -Xmx%s -server -Xverify:none -jar %s %s", ec.getXms(), ec.getXmx(), jarPath, configPath); + final String javaCommand = dictFormat("java " + jvmSetting + " -jar %(jarPath) %(configPath)", + ImmutableMap.of("Xms", ec.getXms(), "Xmx", ec.getXmx(), + "jarPath", jarPath, "configPath", configPath)); + +// final String javaCommand = String.format("java -Xms%s -Xmx%s -server -Xverify:none -jar %s %s", ec.getXms(), ec.getXmx(), jarPath, configPath); // final String javaCommand = String.format("java -Xms%s -Xmx%s -server -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:StartFlightRecording=dumponexit=true -Xverify:none -jar %s %s", ec.getXms(), ec.getXmx(), jarPath, configPath); final CommandLine cmdLine = CommandLine.parse(javaCommand); + if (ec.getDryRun()) { + System.out.println("Would have executed: "+ cmdLine.toString()); + return 0; + } final long timeoutInSeconds = bc.getConfigBase().getTimeout(); final long timeoutInMilliseconds = timeoutInSeconds * 1000; @@ -63,7 +95,7 @@ public class BenchmarkRunner { } public static int runMemoryBenchmark(final BenchmarkConfig bc, final ExecutionConfig defaultEc, - final int numberOfSteps) throws IOException, InterruptedException { + final int numberOfSteps, String jvmSetting) throws IOException, InterruptedException { // e.g. initialMaxMemory = 12800, we save this (as a final variable), so // that we will not exceed it // @@ -79,7 +111,7 @@ public class BenchmarkRunner { memoryQuantum /= 2; final ExecutionConfig ec = new ExecutionConfig(currentMaxMemory, currentMaxMemory); - if (runPerformanceBenchmark(bc, ec) == 0) { + if (runPerformanceBenchmark(bc, ec, jvmSetting) == 0) { System.out.println("Execution finished, testing with less memory."); System.out.println(); currentMaxMemory -= memoryQuantum; diff --git a/trainbenchmark/trainbenchmark-tool/src/main/java/hu/bme/mit/trainbenchmark/benchmark/test/TrainBenchmarkTest.java b/trainbenchmark/trainbenchmark-tool/src/main/java/hu/bme/mit/trainbenchmark/benchmark/test/TrainBenchmarkTest.java index da4721781f6fffb5136e7780d2cd41f6da93c6da..d8ac00dd5b0e3464cae1cc1d919e46ad59bca0eb 100644 --- a/trainbenchmark/trainbenchmark-tool/src/main/java/hu/bme/mit/trainbenchmark/benchmark/test/TrainBenchmarkTest.java +++ b/trainbenchmark/trainbenchmark-tool/src/main/java/hu/bme/mit/trainbenchmark/benchmark/test/TrainBenchmarkTest.java @@ -23,7 +23,7 @@ public abstract class TrainBenchmarkTest { @Rule public ErrorCollector collector = new ErrorCollector(); - protected final int benchmarkId = 0; + protected final String benchmarkId = ""; protected ExecutionConfig executionConfig = ExecutionConfig.defaultExecutionConfig(); protected final long timeout = 120; protected final int runs = 1; diff --git a/trainbenchmark/trainbenchmark-tool/src/main/java/hu/bme/mit/trainbenchmark/benchmark/test/queryspecific/QueryTest.java b/trainbenchmark/trainbenchmark-tool/src/main/java/hu/bme/mit/trainbenchmark/benchmark/test/queryspecific/QueryTest.java index 4046712c480f14d106115bbea029fe14539d997b..f616b63636e4b2c5cd8a827177fb43b092a29da7 100644 --- a/trainbenchmark/trainbenchmark-tool/src/main/java/hu/bme/mit/trainbenchmark/benchmark/test/queryspecific/QueryTest.java +++ b/trainbenchmark/trainbenchmark-tool/src/main/java/hu/bme/mit/trainbenchmark/benchmark/test/queryspecific/QueryTest.java @@ -11,7 +11,7 @@ import hu.bme.mit.trainbenchmark.config.ExecutionConfig; public abstract class QueryTest { - protected final int benchmarkId = 0; + protected final String benchmarkId = ""; protected ExecutionConfig executionConfig = ExecutionConfig.defaultExecutionConfig(); protected final long timeout = 120; protected final int runs = 1;