From 60cc8c0347c4255c5b97ee7577e4a0c971be1b59 Mon Sep 17 00:00:00 2001 From: Pekka Enberg Date: Sat, 16 Nov 2024 12:03:35 +0200 Subject: [PATCH] bindings/wasm: "SELECT 1" benchmark MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This adds a benchmark for "SELECT 1" that essentially just evaluates the overhead of calling into the library. Looks like WebAssembly adds 2.5x overhead compared to native code... ``` penberg@vonneumann perf % node perf-limbo.js cpu: Apple M1 runtime: node v18.19.0 (arm64-darwin) benchmark time (avg) (min … max) p75 p99 p999 ------------------------------------------------- ----------------------------- • Statement ------------------------------------------------- ----------------------------- SELECT 1 771 ns/iter (624 ns … 2'183 µs) 750 ns 1'085 ns 1'750 ns summary for Statement SELECT 1 penberg@vonneumann perf % node perf-better-sqlite3.js cpu: Apple M1 runtime: node v18.19.0 (arm64-darwin) benchmark time (avg) (min … max) p75 p99 p999 ------------------------------------------------- ----------------------------- • Statement ------------------------------------------------- ----------------------------- SELECT 1 302 ns/iter (166 ns … 779 µs) 292 ns 375 ns 1'000 ns summary for Statement SELECT 1 ``` --- bindings/wasm/perf/package.json | 11 +++++++++++ bindings/wasm/perf/perf-better-sqlite3.js | 23 +++++++++++++++++++++++ bindings/wasm/perf/perf-limbo.js | 23 +++++++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 bindings/wasm/perf/package.json create mode 100644 bindings/wasm/perf/perf-better-sqlite3.js create mode 100644 bindings/wasm/perf/perf-limbo.js diff --git a/bindings/wasm/perf/package.json b/bindings/wasm/perf/package.json new file mode 100644 index 000000000..b86f56c50 --- /dev/null +++ b/bindings/wasm/perf/package.json @@ -0,0 +1,11 @@ +{ + "name": "limbo-perf", + "type": "module", + "private": true, + "dependencies": { + "limbo-wasm": "../pkg", + "better-sqlite3": "^9.5.0", + "libsql": "..", + "mitata": "^0.1.11" + } +} diff --git a/bindings/wasm/perf/perf-better-sqlite3.js b/bindings/wasm/perf/perf-better-sqlite3.js new file mode 100644 index 000000000..0d1b96318 --- /dev/null +++ b/bindings/wasm/perf/perf-better-sqlite3.js @@ -0,0 +1,23 @@ +import { run, bench, group, baseline } from 'mitata'; + +import Database from 'better-sqlite3'; + +const db = new Database('limbo.db'); + +const stmt = db.prepare("SELECT 1"); + +group('Statement', () => { + bench('SELECT 1', () => { + stmt.all(); + }); +}); + +await run({ + units: false, + silent: false, + avg: true, + json: false, + colors: true, + min_max: true, + percentiles: true, +}); diff --git a/bindings/wasm/perf/perf-limbo.js b/bindings/wasm/perf/perf-limbo.js new file mode 100644 index 000000000..7ab36160f --- /dev/null +++ b/bindings/wasm/perf/perf-limbo.js @@ -0,0 +1,23 @@ +import { run, bench, group, baseline } from 'mitata'; + +import { Database } from 'limbo-wasm'; + +const db = new Database('limbo.db'); + +const stmt = db.prepare("SELECT 1"); + +group('Statement', () => { + bench('SELECT 1', () => { + stmt.all(); + }); +}); + +await run({ + units: false, + silent: false, + avg: true, + json: false, + colors: true, + min_max: true, + percentiles: true, +});