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.
BenchFoundry currently supports relational database systems and right now only comes with a connector for MariaDB. At the moment, we're working on adding support for column stores and key-values stores but will also add connectors for other RDBMS. The analysis module currently only calculates performance metrics. Right now, we're working on adding consistency metrics. BenchFoundry already comes with a trace generator which aims to provoke the maximum staleness observable in a storage system and another trace generator based on TPC-C.
- 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
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.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.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
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.