Repository files navigation

BenchFoundry

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.

Build process

  1. Install Apache Thrift from https://thrift.apache.org/download
  2. Copy teams.properties.example to teams.properties
  3. Edit teams.properties to set thrift.executable to the Thrift executable path
  4. 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 :)

Running BenchFoundry

  1. Install Java on master and slave machines, put the log4j2.xml file and the benchfoundry.jar in the same folder on all machines.
  2. Put an updated version of benchfoundry.properties and slaves.properties on the master machine
  3. Use a trace generator or existing input files (traces, schema, oplist, param lists) and put them on the master machine
  4. 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
  5. 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.
  6. Collect the result files from the specified result directory and run an analytics process.

Workload Generators

Consistency Benchmark

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.

TPC-C Inspired Benchmark

Main Class

de.tuberlin.ise.benchfoundry.tracegeneration.tpccinspiredbenchmark.TraceGenerator.java

Generator Outputs (8 files)

  1. tpcc_props: Contains main properties for the execution of the benchmark.
  2. tpcc_schema: Contains schema definitions.
  3. tpcc_operation: Contains business operations used in PRELOAD, WARMUP, or EXPERIMENT phases.
  4. tpcc_param: Contains parameters used by business operations in PRELOAD, WARMUP, or EXPERIMENT phases.
  5. tpcc_cparam: Contains additional custom parameters used by business operations in PRELOAD, WARMUP, or EXPERIMENT phases.
  6. tpcc_load: Contains business processes for the phase PRELOAD.
  7. tpcc_warm: Contains business processes for the phase WARMUP.
  8. tpcc_run: Contains business processes for the phase EXPERIMENT.

CLI parameters (6 options)

  1. "--datasetScaler" [Integer i: i>0 (default: 1)] - Scales the inital dataset for the benchmark according to the TPC-C specification (#WAREHOUSES).
  2. "--runtime" [Integer i: i>0 (default: 120)] - Defines the runtime of the RUN phase in seconds.
  3. "--paymentProcessTarget" [Integer i: i>-1 (default: 1)] - Defines the target number of "PAYMENT" processes that are scheduled per second.
  4. "--orderstatusProcessTarget" [Integer i: i>-1 (default: 1)] - Defines the target number of "ORDERSTATUS" processes that are scheduled per second.
  5. "--neworderProcessTarget" [Integer i: i>-1 (default: 1)] - Defines the target number of "NEWORDER" processes that are scheduled per second.
  6. "--processTargetScaler" [Integer i: i>-1 (default: 10)] - Scales (multiplies) the target number of all processes that are scheduled per second.

About

An extensible, trace-based execution environment for cloud database benchmarks

Resources

Contributing

Stars

10 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

BenchFoundry

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.

Build process

  1. Install Apache Thrift from https://thrift.apache.org/download
  2. Copy teams.properties.example to teams.properties
  3. Edit teams.properties to set thrift.executable to the Thrift executable path
  4. 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 :)

Running BenchFoundry

  1. Install Java on master and slave machines, put the log4j2.xml file and the benchfoundry.jar in the same folder on all machines.
  2. Put an updated version of benchfoundry.properties and slaves.properties on the master machine
  3. Use a trace generator or existing input files (traces, schema, oplist, param lists) and put them on the master machine
  4. 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
  5. 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.
  6. Collect the result files from the specified result directory and run an analytics process.

Workload Generators

Consistency Benchmark

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.

TPC-C Inspired Benchmark

Main Class

de.tuberlin.ise.benchfoundry.tracegeneration.tpccinspiredbenchmark.TraceGenerator.java

Generator Outputs (8 files)

  1. tpcc_props: Contains main properties for the execution of the benchmark.
  2. tpcc_schema: Contains schema definitions.
  3. tpcc_operation: Contains business operations used in PRELOAD, WARMUP, or EXPERIMENT phases.
  4. tpcc_param: Contains parameters used by business operations in PRELOAD, WARMUP, or EXPERIMENT phases.
  5. tpcc_cparam: Contains additional custom parameters used by business operations in PRELOAD, WARMUP, or EXPERIMENT phases.
  6. tpcc_load: Contains business processes for the phase PRELOAD.
  7. tpcc_warm: Contains business processes for the phase WARMUP.
  8. tpcc_run: Contains business processes for the phase EXPERIMENT.

CLI parameters (6 options)

  1. "--datasetScaler" [Integer i: i>0 (default: 1)] - Scales the inital dataset for the benchmark according to the TPC-C specification (#WAREHOUSES).
  2. "--runtime" [Integer i: i>0 (default: 120)] - Defines the runtime of the RUN phase in seconds.
  3. "--paymentProcessTarget" [Integer i: i>-1 (default: 1)] - Defines the target number of "PAYMENT" processes that are scheduled per second.
  4. "--orderstatusProcessTarget" [Integer i: i>-1 (default: 1)] - Defines the target number of "ORDERSTATUS" processes that are scheduled per second.
  5. "--neworderProcessTarget" [Integer i: i>-1 (default: 1)] - Defines the target number of "NEWORDER" processes that are scheduled per second.
  6. "--processTargetScaler" [Integer i: i>-1 (default: 10)] - Scales (multiplies) the target number of all processes that are scheduled per second.

About

An extensible, trace-based execution environment for cloud database benchmarks

Resources

Contributing

Stars

10 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

BenchFoundry

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.

Build process

  1. Install Apache Thrift from https://thrift.apache.org/download
  2. Copy teams.properties.example to teams.properties
  3. Edit teams.properties to set thrift.executable to the Thrift executable path
  4. 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 :)

Running BenchFoundry

  1. Install Java on master and slave machines, put the log4j2.xml file and the benchfoundry.jar in the same folder on all machines.
  2. Put an updated version of benchfoundry.properties and slaves.properties on the master machine
  3. Use a trace generator or existing input files (traces, schema, oplist, param lists) and put them on the master machine
  4. 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
  5. 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.
  6. Collect the result files from the specified result directory and run an analytics process.

Workload Generators

Consistency Benchmark

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.

TPC-C Inspired Benchmark

Main Class

de.tuberlin.ise.benchfoundry.tracegeneration.tpccinspiredbenchmark.TraceGenerator.java

Generator Outputs (8 files)

  1. tpcc_props: Contains main properties for the execution of the benchmark.
  2. tpcc_schema: Contains schema definitions.
  3. tpcc_operation: Contains business operations used in PRELOAD, WARMUP, or EXPERIMENT phases.
  4. tpcc_param: Contains parameters used by business operations in PRELOAD, WARMUP, or EXPERIMENT phases.
  5. tpcc_cparam: Contains additional custom parameters used by business operations in PRELOAD, WARMUP, or EXPERIMENT phases.
  6. tpcc_load: Contains business processes for the phase PRELOAD.
  7. tpcc_warm: Contains business processes for the phase WARMUP.
  8. tpcc_run: Contains business processes for the phase EXPERIMENT.

CLI parameters (6 options)

  1. "--datasetScaler" [Integer i: i>0 (default: 1)] - Scales the inital dataset for the benchmark according to the TPC-C specification (#WAREHOUSES).
  2. "--runtime" [Integer i: i>0 (default: 120)] - Defines the runtime of the RUN phase in seconds.
  3. "--paymentProcessTarget" [Integer i: i>-1 (default: 1)] - Defines the target number of "PAYMENT" processes that are scheduled per second.
  4. "--orderstatusProcessTarget" [Integer i: i>-1 (default: 1)] - Defines the target number of "ORDERSTATUS" processes that are scheduled per second.
  5. "--neworderProcessTarget" [Integer i: i>-1 (default: 1)] - Defines the target number of "NEWORDER" processes that are scheduled per second.
  6. "--processTargetScaler" [Integer i: i>-1 (default: 10)] - Scales (multiplies) the target number of all processes that are scheduled per second.

About

An extensible, trace-based execution environment for cloud database benchmarks

Resources

Contributing

Stars

10 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

BenchFoundry

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.

Build process

  1. Install Apache Thrift from https://thrift.apache.org/download
  2. Copy teams.properties.example to teams.properties
  3. Edit teams.properties to set thrift.executable to the Thrift executable path
  4. 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 :)

Running BenchFoundry

  1. Install Java on master and slave machines, put the log4j2.xml file and the benchfoundry.jar in the same folder on all machines.
  2. Put an updated version of benchfoundry.properties and slaves.properties on the master machine
  3. Use a trace generator or existing input files (traces, schema, oplist, param lists) and put them on the master machine
  4. 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
  5. 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.
  6. Collect the result files from the specified result directory and run an analytics process.

Workload Generators

Consistency Benchmark

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.

TPC-C Inspired Benchmark

Main Class

de.tuberlin.ise.benchfoundry.tracegeneration.tpccinspiredbenchmark.TraceGenerator.java

Generator Outputs (8 files)

  1. tpcc_props: Contains main properties for the execution of the benchmark.
  2. tpcc_schema: Contains schema definitions.
  3. tpcc_operation: Contains business operations used in PRELOAD, WARMUP, or EXPERIMENT phases.
  4. tpcc_param: Contains parameters used by business operations in PRELOAD, WARMUP, or EXPERIMENT phases.
  5. tpcc_cparam: Contains additional custom parameters used by business operations in PRELOAD, WARMUP, or EXPERIMENT phases.
  6. tpcc_load: Contains business processes for the phase PRELOAD.
  7. tpcc_warm: Contains business processes for the phase WARMUP.
  8. tpcc_run: Contains business processes for the phase EXPERIMENT.

CLI parameters (6 options)

  1. "--datasetScaler" [Integer i: i>0 (default: 1)] - Scales the inital dataset for the benchmark according to the TPC-C specification (#WAREHOUSES).
  2. "--runtime" [Integer i: i>0 (default: 120)] - Defines the runtime of the RUN phase in seconds.
  3. "--paymentProcessTarget" [Integer i: i>-1 (default: 1)] - Defines the target number of "PAYMENT" processes that are scheduled per second.
  4. "--orderstatusProcessTarget" [Integer i: i>-1 (default: 1)] - Defines the target number of "ORDERSTATUS" processes that are scheduled per second.
  5. "--neworderProcessTarget" [Integer i: i>-1 (default: 1)] - Defines the target number of "NEWORDER" processes that are scheduled per second.
  6. "--processTargetScaler" [Integer i: i>-1 (default: 10)] - Scales (multiplies) the target number of all processes that are scheduled per second.

About

An extensible, trace-based execution environment for cloud database benchmarks

Resources

Contributing

Stars

10 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

BenchFoundry

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.

Build process

  1. Install Apache Thrift from https://thrift.apache.org/download
  2. Copy teams.properties.example to teams.properties
  3. Edit teams.properties to set thrift.executable to the Thrift executable path
  4. 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 :)

Running BenchFoundry

  1. Install Java on master and slave machines, put the log4j2.xml file and the benchfoundry.jar in the same folder on all machines.
  2. Put an updated version of benchfoundry.properties and slaves.properties on the master machine
  3. Use a trace generator or existing input files (traces, schema, oplist, param lists) and put them on the master machine
  4. 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
  5. 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.
  6. Collect the result files from the specified result directory and run an analytics process.

Workload Generators

Consistency Benchmark

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.

TPC-C Inspired Benchmark

Main Class

de.tuberlin.ise.benchfoundry.tracegeneration.tpccinspiredbenchmark.TraceGenerator.java

Generator Outputs (8 files)

  1. tpcc_props: Contains main properties for the execution of the benchmark.
  2. tpcc_schema: Contains schema definitions.
  3. tpcc_operation: Contains business operations used in PRELOAD, WARMUP, or EXPERIMENT phases.
  4. tpcc_param: Contains parameters used by business operations in PRELOAD, WARMUP, or EXPERIMENT phases.
  5. tpcc_cparam: Contains additional custom parameters used by business operations in PRELOAD, WARMUP, or EXPERIMENT phases.
  6. tpcc_load: Contains business processes for the phase PRELOAD.
  7. tpcc_warm: Contains business processes for the phase WARMUP.
  8. tpcc_run: Contains business processes for the phase EXPERIMENT.

CLI parameters (6 options)

  1. "--datasetScaler" [Integer i: i>0 (default: 1)] - Scales the inital dataset for the benchmark according to the TPC-C specification (#WAREHOUSES).
  2. "--runtime" [Integer i: i>0 (default: 120)] - Defines the runtime of the RUN phase in seconds.
  3. "--paymentProcessTarget" [Integer i: i>-1 (default: 1)] - Defines the target number of "PAYMENT" processes that are scheduled per second.
  4. "--orderstatusProcessTarget" [Integer i: i>-1 (default: 1)] - Defines the target number of "ORDERSTATUS" processes that are scheduled per second.
  5. "--neworderProcessTarget" [Integer i: i>-1 (default: 1)] - Defines the target number of "NEWORDER" processes that are scheduled per second.
  6. "--processTargetScaler" [Integer i: i>-1 (default: 10)] - Scales (multiplies) the target number of all processes that are scheduled per second.

About

An extensible, trace-based execution environment for cloud database benchmarks

Resources

Contributing

Stars

10 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

BenchFoundry

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.

Build process

  1. Install Apache Thrift from https://thrift.apache.org/download
  2. Copy teams.properties.example to teams.properties
  3. Edit teams.properties to set thrift.executable to the Thrift executable path
  4. 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 :)

Running BenchFoundry

  1. Install Java on master and slave machines, put the log4j2.xml file and the benchfoundry.jar in the same folder on all machines.
  2. Put an updated version of benchfoundry.properties and slaves.properties on the master machine
  3. Use a trace generator or existing input files (traces, schema, oplist, param lists) and put them on the master machine
  4. 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
  5. 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.
  6. Collect the result files from the specified result directory and run an analytics process.

Workload Generators

Consistency Benchmark

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.

TPC-C Inspired Benchmark

Main Class

de.tuberlin.ise.benchfoundry.tracegeneration.tpccinspiredbenchmark.TraceGenerator.java

Generator Outputs (8 files)

  1. tpcc_props: Contains main properties for the execution of the benchmark.
  2. tpcc_schema: Contains schema definitions.
  3. tpcc_operation: Contains business operations used in PRELOAD, WARMUP, or EXPERIMENT phases.
  4. tpcc_param: Contains parameters used by business operations in PRELOAD, WARMUP, or EXPERIMENT phases.
  5. tpcc_cparam: Contains additional custom parameters used by business operations in PRELOAD, WARMUP, or EXPERIMENT phases.
  6. tpcc_load: Contains business processes for the phase PRELOAD.
  7. tpcc_warm: Contains business processes for the phase WARMUP.
  8. tpcc_run: Contains business processes for the phase EXPERIMENT.

CLI parameters (6 options)

  1. "--datasetScaler" [Integer i: i>0 (default: 1)] - Scales the inital dataset for the benchmark according to the TPC-C specification (#WAREHOUSES).
  2. "--runtime" [Integer i: i>0 (default: 120)] - Defines the runtime of the RUN phase in seconds.
  3. "--paymentProcessTarget" [Integer i: i>-1 (default: 1)] - Defines the target number of "PAYMENT" processes that are scheduled per second.
  4. "--orderstatusProcessTarget" [Integer i: i>-1 (default: 1)] - Defines the target number of "ORDERSTATUS" processes that are scheduled per second.
  5. "--neworderProcessTarget" [Integer i: i>-1 (default: 1)] - Defines the target number of "NEWORDER" processes that are scheduled per second.
  6. "--processTargetScaler" [Integer i: i>-1 (default: 10)] - Scales (multiplies) the target number of all processes that are scheduled per second.

About

An extensible, trace-based execution environment for cloud database benchmarks

Resources

Contributing

Stars

10 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

BenchFoundry

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.

Build process

  1. Install Apache Thrift from https://thrift.apache.org/download
  2. Copy teams.properties.example to teams.properties
  3. Edit teams.properties to set thrift.executable to the Thrift executable path
  4. 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 :)

Running BenchFoundry

  1. Install Java on master and slave machines, put the log4j2.xml file and the benchfoundry.jar in the same folder on all machines.
  2. Put an updated version of benchfoundry.properties and slaves.properties on the master machine
  3. Use a trace generator or existing input files (traces, schema, oplist, param lists) and put them on the master machine
  4. 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
  5. 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.
  6. Collect the result files from the specified result directory and run an analytics process.

Workload Generators

Consistency Benchmark

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.

TPC-C Inspired Benchmark

Main Class

de.tuberlin.ise.benchfoundry.tracegeneration.tpccinspiredbenchmark.TraceGenerator.java

Generator Outputs (8 files)

  1. tpcc_props: Contains main properties for the execution of the benchmark.
  2. tpcc_schema: Contains schema definitions.
  3. tpcc_operation: Contains business operations used in PRELOAD, WARMUP, or EXPERIMENT phases.
  4. tpcc_param: Contains parameters used by business operations in PRELOAD, WARMUP, or EXPERIMENT phases.
  5. tpcc_cparam: Contains additional custom parameters used by business operations in PRELOAD, WARMUP, or EXPERIMENT phases.
  6. tpcc_load: Contains business processes for the phase PRELOAD.
  7. tpcc_warm: Contains business processes for the phase WARMUP.
  8. tpcc_run: Contains business processes for the phase EXPERIMENT.

CLI parameters (6 options)

  1. "--datasetScaler" [Integer i: i>0 (default: 1)] - Scales the inital dataset for the benchmark according to the TPC-C specification (#WAREHOUSES).
  2. "--runtime" [Integer i: i>0 (default: 120)] - Defines the runtime of the RUN phase in seconds.
  3. "--paymentProcessTarget" [Integer i: i>-1 (default: 1)] - Defines the target number of "PAYMENT" processes that are scheduled per second.
  4. "--orderstatusProcessTarget" [Integer i: i>-1 (default: 1)] - Defines the target number of "ORDERSTATUS" processes that are scheduled per second.
  5. "--neworderProcessTarget" [Integer i: i>-1 (default: 1)] - Defines the target number of "NEWORDER" processes that are scheduled per second.
  6. "--processTargetScaler" [Integer i: i>-1 (default: 10)] - Scales (multiplies) the target number of all processes that are scheduled per second.

About

An extensible, trace-based execution environment for cloud database benchmarks

Resources

Contributing

Stars

10 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

BenchFoundry

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.

Build process

  1. Install Apache Thrift from https://thrift.apache.org/download
  2. Copy teams.properties.example to teams.properties
  3. Edit teams.properties to set thrift.executable to the Thrift executable path
  4. 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 :)

Running BenchFoundry

  1. Install Java on master and slave machines, put the log4j2.xml file and the benchfoundry.jar in the same folder on all machines.
  2. Put an updated version of benchfoundry.properties and slaves.properties on the master machine
  3. Use a trace generator or existing input files (traces, schema, oplist, param lists) and put them on the master machine
  4. 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
  5. 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.
  6. Collect the result files from the specified result directory and run an analytics process.

Workload Generators

Consistency Benchmark

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.

TPC-C Inspired Benchmark

Main Class

de.tuberlin.ise.benchfoundry.tracegeneration.tpccinspiredbenchmark.TraceGenerator.java

Generator Outputs (8 files)

  1. tpcc_props: Contains main properties for the execution of the benchmark.
  2. tpcc_schema: Contains schema definitions.
  3. tpcc_operation: Contains business operations used in PRELOAD, WARMUP, or EXPERIMENT phases.
  4. tpcc_param: Contains parameters used by business operations in PRELOAD, WARMUP, or EXPERIMENT phases.
  5. tpcc_cparam: Contains additional custom parameters used by business operations in PRELOAD, WARMUP, or EXPERIMENT phases.
  6. tpcc_load: Contains business processes for the phase PRELOAD.
  7. tpcc_warm: Contains business processes for the phase WARMUP.
  8. tpcc_run: Contains business processes for the phase EXPERIMENT.

CLI parameters (6 options)

  1. "--datasetScaler" [Integer i: i>0 (default: 1)] - Scales the inital dataset for the benchmark according to the TPC-C specification (#WAREHOUSES).
  2. "--runtime" [Integer i: i>0 (default: 120)] - Defines the runtime of the RUN phase in seconds.
  3. "--paymentProcessTarget" [Integer i: i>-1 (default: 1)] - Defines the target number of "PAYMENT" processes that are scheduled per second.
  4. "--orderstatusProcessTarget" [Integer i: i>-1 (default: 1)] - Defines the target number of "ORDERSTATUS" processes that are scheduled per second.
  5. "--neworderProcessTarget" [Integer i: i>-1 (default: 1)] - Defines the target number of "NEWORDER" processes that are scheduled per second.
  6. "--processTargetScaler" [Integer i: i>-1 (default: 10)] - Scales (multiplies) the target number of all processes that are scheduled per second.

About

An extensible, trace-based execution environment for cloud database benchmarks

Resources

Contributing

Stars

10 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages