BenchFoundry is a natively distributed benchmarking framework for the execution of arbitrary application-driven cloud database benchmarks against OLTP databases. BenchFoundry logs detailed results which can be used to determine arbitrary measured qualities and to identify even minor instances of unusual behavior. For repeatability reasons, BenchFoundry executes workload traces instead of generating them on the fly.
- Install Apache Thrift from https://thrift.apache.org/download
- Copy teams.properties.example to teams.properties
- Edit
teams.properties
to setthrift.executable
to the Thrift executable path - Now build and test with
mvn clean generate-sources compile test assembly:single
Hint: currently, some unit tests may be broken - make sure to skip tests for builds :)
- Install Java on master and slave machines, put the log4j2.xml file and the benchfoundry.jar in the same folder on all machines.
- Put an updated version of benchfoundry.properties and slaves.properties on the master machine
- Use a trace generator or existing input files (traces, schema, oplist, param lists) and put them on the master machine
- Start BenchFoundry on the slave machines using
java -jar BenchFoundry-1.0-SNAPSHOT-jar-with-dependencies.jar <port>
where port is identical to the one specified in the slaves.properties file - Start BenchFoundry on the master machine using
java -jar BenchFoundry-1.0-SNAPSHOT-jar-with-dependencies.jar <config file>
where config file specifies the location of the benchfoundry.properties file. If you omit this parameter, the BenchFoundry master will default to benchfoundry.properties in the current folder. - Collect the result files from the specified result directory and run an analytics process.
Simply run the main class de.tuberlin.ise.benchfoundry.tracegeneration.consistencybenchmark.ConsistencyBenchmarkingTraceGenerator which will interactively query input parameters and create the output trace file. Additional parameters are (somewhat hidden) in class de.tuberlin.ise.benchfoundry.tracegeneration.consistencybenchmark.StaticContent
To create a very simple example trace, run the trace generator and (when prompted) enter 1m for the first prompt and 1 for all other ones afterwards. Next, create a folder named consbench in the project folder, move all files starting with consbench into that folder and simply run BenchFoundry with the existing benchfoundry.properties file which can be found in the project main folder.
de.tuberlin.ise.benchfoundry.tracegeneration.tpccinspiredbenchmark.TraceGenerator.java
- tpcc_props: Contains main properties for the execution of the benchmark.
- tpcc_schema: Contains schema definitions.
- tpcc_operation: Contains business operations used in PRELOAD, WARMUP, or EXPERIMENT phases.
- tpcc_param: Contains parameters used by business operations in PRELOAD, WARMUP, or EXPERIMENT phases.
- tpcc_cparam: Contains additional custom parameters used by business operations in PRELOAD, WARMUP, or EXPERIMENT phases.
- tpcc_load: Contains business processes for the phase PRELOAD.
- tpcc_warm: Contains business processes for the phase WARMUP.
- tpcc_run: Contains business processes for the phase EXPERIMENT.
- "--datasetScaler" [Integer i: i>0 (default: 1)] - Scales the inital dataset for the benchmark according to the TPC-C specification (#WAREHOUSES).
- "--runtime" [Integer i: i>0 (default: 120)] - Defines the runtime of the RUN phase in seconds.
- "--paymentProcessTarget" [Integer i: i>-1 (default: 1)] - Defines the target number of "PAYMENT" processes that are scheduled per second.
- "--orderstatusProcessTarget" [Integer i: i>-1 (default: 1)] - Defines the target number of "ORDERSTATUS" processes that are scheduled per second.
- "--neworderProcessTarget" [Integer i: i>-1 (default: 1)] - Defines the target number of "NEWORDER" processes that are scheduled per second.
- "--processTargetScaler" [Integer i: i>-1 (default: 10)] - Scales (multiplies) the target number of all processes that are scheduled per second.