Skip to content

Commit

Permalink
Add possibility to run asyns/sync benchmarks and disabling typeCast
Browse files Browse the repository at this point in the history
  • Loading branch information
Sannis committed Oct 28, 2012
1 parent 6a89e56 commit 8ce3e3d
Show file tree
Hide file tree
Showing 9 changed files with 137 additions and 116 deletions.
56 changes: 26 additions & 30 deletions bin/node-mysql-benchmarks.js
Expand Up @@ -8,16 +8,6 @@
"use strict"; "use strict";


var var
bindings_list = [
'C',
'PHP',
'db-mysql',
'mysql',
'mysql-libmysqlclient',
'mysql-native',
'odbc',
'mariasql'
],
util = require('util'), util = require('util'),
ArgumentParser = require('argparse').ArgumentParser, ArgumentParser = require('argparse').ArgumentParser,
Table = require('cli-table'), Table = require('cli-table'),
Expand All @@ -43,7 +33,7 @@ parser.addArgument(
{ {
action: 'append', action: 'append',
defaultValue: [], defaultValue: [],
help: 'Benchmark name to skip.' help: 'Module to skip.'
} }
); );
parser.addArgument( parser.addArgument(
Expand Down Expand Up @@ -71,8 +61,8 @@ if (args.quiet) {


function printResults() { function printResults() {
var table = new Table({ var table = new Table({
head: ["Module name", "Init", "Escapes", "Reconnects", "Inserts", "Selects"], head: ["Name", "Async", "TypeCast", "Init", "Escapes", "Reconnects", "Inserts", "Selects"],
colWidths: [22, 7, 11, 12, 9, 9], colWidths: [30, 7, 10, 7, 11, 12, 9, 9],
chars: { chars: {
'top': '-', 'top': '-',
'top-mid':'+', 'top-mid':'+',
Expand All @@ -95,6 +85,10 @@ function printResults() {
if (results.hasOwnProperty(name)) { if (results.hasOwnProperty(name)) {
table.push([ table.push([
name, name,

cfg.benchmarksO[name].async ? 'V' : '',
cfg.benchmarksO[name].typeCast ? 'V' : '',

results[name].init || '-', results[name].init || '-',
results[name].escapes || '-', results[name].escapes || '-',
results[name].reconnects || '-', results[name].reconnects || '-',
Expand All @@ -107,7 +101,7 @@ function printResults() {
// Output results // Output results
util.print("\n\u001B[1mResults:\u001B[22m\n"); util.print("\n\u001B[1mResults:\u001B[22m\n");
console.log(table.toString()); console.log(table.toString());
util.print("\u001B[1mInit time in seconds (less is better), other values are operations per second (more is better).\u001B[22m\n"); util.print("\u001B[1mInit time in seconds (doesn't matter), other values are operations/rows per second (more is better).\u001B[22m\n");
} }


function inArray(what, where) { function inArray(what, where) {
Expand All @@ -119,32 +113,34 @@ function inArray(what, where) {
return false; return false;
} }


var benchmarksA = cfg.benchmarksA;

function runNextBenchmark() { function runNextBenchmark() {
if (bindings_list.length > 0) { if (benchmarksA.length > 0) {
var var benchmark = benchmarksA.shift();
binding_name = bindings_list.shift(),
benchmark = require("../src/" + binding_name);


if (args.skip.length === 0 || !inArray(binding_name, args.skip)) { if (args.skip.length === 0 || !inArray(benchmark.module, args.skip)) {
printProgress("Benchmarking " + binding_name + "... "); printProgress("Benchmarking '" + benchmark.name + "'... ");


benchmark.run(function (binding_results) { require("../src/" + benchmark.module).run(function (benchmark_results) {
printProgress("Done.\n"); printProgress("Done.\n");
results[binding_name] = binding_results; results[benchmark.name] = benchmark_results;


printProgress("Cooldown...\n"); printProgress("Cooldown...\n");
setTimeout(function () { if (benchmarksA.length > 0) {
runNextBenchmark(); setTimeout(function () {
}, cfg.cooldown); runNextBenchmark();
}, cfg); }, cfg.cooldown);
} else {
printResults();
}
}, cfg, benchmark);
} else { } else {
printProgress("Skipping " + binding_name + ".\n"); printProgress("Skipping '" + benchmark.name + "'.\n");

runNextBenchmark(); runNextBenchmark();
} }
} else { } else {
printProgress("\u001B[1mAll benchmarks finished.\u001B[22m\n");

printResults(); printResults();
} }
} }
Expand Down
31 changes: 29 additions & 2 deletions src/config.js
Expand Up @@ -12,6 +12,19 @@ GRANT ALL PRIVILEGES ON test.* TO 'test'@'127.0.0.1' IDENTIFIED BY '';


"use strict"; "use strict";


function addBenchmark(cfg, module, async, typeCast, name) {
if (!name) {
name = module;
}
cfg.benchmarksO[name] = {
name: name,
module: module,
async: async,
typeCast: typeCast
};
cfg.benchmarksA.push(cfg.benchmarksO[name]);
}

exports.getConfig = function (factor) { exports.getConfig = function (factor) {
var cfg = { var cfg = {
// Database connection settings // Database connection settings
Expand All @@ -23,13 +36,13 @@ exports.getConfig = function (factor) {
test_table: "test_table", test_table: "test_table",


// Benchmarks parameters // Benchmarks parameters
escape_count: 1000000 * factor, escapes_count: 1000000 * factor,
string_to_escape: "str\\str\"str\'str\x00str", string_to_escape: "str\\str\"str\'str\x00str",
reconnect_count: 1000 * factor, reconnect_count: 1000 * factor,
insert_rows_count: 10000 * factor, insert_rows_count: 10000 * factor,


// Delay before assertion check (ms) // Delay before assertion check (ms)
delay_before_select: 1000, delay_before_select: 10000 * factor,
cooldown: 10000 * factor cooldown: 10000 * factor
}; };


Expand All @@ -42,5 +55,19 @@ exports.getConfig = function (factor) {


cfg.select_query = "SELECT * FROM " + cfg.test_table; cfg.select_query = "SELECT * FROM " + cfg.test_table;


cfg.benchmarksA = [];
cfg.benchmarksO = {};

addBenchmark(cfg, "C", false, false);
addBenchmark(cfg, "PHP", false, false);
addBenchmark(cfg, "db-mysql", false, false);
addBenchmark(cfg, "mysql", true, true, "mysql");
addBenchmark(cfg, "mysql", true, false, "mysql *");
addBenchmark(cfg, "mysql-libmysqlclient", true, true, "mysql-libmysqlclient");
addBenchmark(cfg, "mysql-libmysqlclient", false, true, "mysql-libmysqlclient *");
addBenchmark(cfg, "mysql-native", false, false);
addBenchmark(cfg, "mariasql", true, false);
addBenchmark(cfg, "odbc", false, false);

return cfg; return cfg;
}; };
4 changes: 2 additions & 2 deletions src/db-mysql.js
Expand Up @@ -76,13 +76,13 @@ function benchmark() {


start_time = Date.now(); start_time = Date.now();


for (i = 0; i < cfg.escape_count; i += 1) { for (i = 0; i < cfg.escapes_count; i += 1) {
escaped_string = conn.escape(cfg.string_to_escape); escaped_string = conn.escape(cfg.string_to_escape);
} }


total_time = (Date.now() - start_time) / 1000; total_time = (Date.now() - start_time) / 1000;


results.escapes = Math.round(cfg.escape_count / total_time); results.escapes = Math.round(cfg.escapes_count / total_time);


insertAsyncBenchmark(results, callback, cfg); insertAsyncBenchmark(results, callback, cfg);
} }
Expand Down
5 changes: 4 additions & 1 deletion src/helper.js
Expand Up @@ -6,7 +6,7 @@


"use strict"; "use strict";


exports.spawnBenchmark = function (file, args, callback, cfg) { exports.spawnBenchmark = function (file, args, callback, cfg, benchmark) {
var child = require('child_process').spawn(file, args), var child = require('child_process').spawn(file, args),
exitEvent = (require('semver').gt(process.versions.node, '0.8.0') ? 'close' : 'exit'), exitEvent = (require('semver').gt(process.versions.node, '0.8.0') ? 'close' : 'exit'),
out = ''; out = '';
Expand All @@ -25,5 +25,8 @@ exports.spawnBenchmark = function (file, args, callback, cfg) {
child.on(exitEvent, function () { child.on(exitEvent, function () {
callback(JSON.parse(out)); callback(JSON.parse(out));
}); });
if (benchmark) {
cfg.benchmark = benchmark;
}
child.stdin.end(JSON.stringify(cfg)); child.stdin.end(JSON.stringify(cfg));
}; };
4 changes: 2 additions & 2 deletions src/mariasql.js
Expand Up @@ -80,13 +80,13 @@ function benchmark () {


start_time = Date.now(); start_time = Date.now();


for (i = 0; i < cfg.escape_count; i += 1) { for (i = 0; i < cfg.escapes_count; i += 1) {
escaped_string = conn.escape(cfg.string_to_escape); escaped_string = conn.escape(cfg.string_to_escape);
} }


total_time = (Date.now() - start_time) / 1000; total_time = (Date.now() - start_time) / 1000;


results['escapes'] = Math.round(cfg.escape_count / total_time); results['escapes'] = Math.round(cfg.escapes_count / total_time);


insertAsyncBenchmark(results, callback, cfg); insertAsyncBenchmark(results, callback, cfg);
} }
Expand Down

0 comments on commit 8ce3e3d

Please sign in to comment.