1
0
mirror of https://github.com/redis/node-redis.git synced 2025-08-01 16:46:54 +03:00

hdr-histogram-js

This commit is contained in:
leibale
2021-12-02 14:28:38 -05:00
parent b6cb1b11f6
commit 7202f3582f
5 changed files with 73 additions and 46 deletions

View File

@ -31,7 +31,6 @@ async function getName() {
.parseSync().name;
}
const runnerPath = fileURLToPath(new URL('runner.js', import.meta.url)),
path = new URL(`${await getName()}/`, import.meta.url),
metadata = await import(new URL('index.js', path));

View File

@ -1,6 +1,8 @@
import yargs from 'yargs';
import { hideBin } from 'yargs/helpers';
import { basename } from 'path';
import * as hdr from 'hdr-histogram-js';
hdr.initWebAssemblySync();
const { path, times, concurrency } = yargs(hideBin(process.argv))
.option('path', {
@ -39,26 +41,31 @@ const [ { benchmark, teardown }, metadata ] = await Promise.all([
async function run(times) {
return new Promise(resolve => {
const histogram = hdr.build({ useWebAssembly: true });
let num = 0,
inProgress = 0;
function run() {
++inProgress;
++num;
const start = process.hrtime.bigint();
benchmark(metadata)
.catch(err => console.error(err))
.finally(() => {
histogram.recordValue(Number(process.hrtime.bigint() - start));
--inProgress;
if (num < times) {
run();
} else if (inProgress === 0) {
resolve();
resolve(histogram);
}
});
}
for (let i = 0; i < concurrency; i++) {
const toInitiate = Math.min(concurrency, times);
for (let i = 0; i < toInitiate; i++) {
run();
}
});
@ -68,9 +75,8 @@ async function run(times) {
await run(Math.min(times * 0.1, 10_000));
// benchmark
const start = process.hrtime.bigint();
await run(times);
const took = (process.hrtime.bigint() - start);
console.log(`[${basename(path)}]: took ${took / 1_000_000n}ms, ${took / BigInt(times)}ns per operation`);
const histogram = await run(times);
console.log(`[${basename(path)}]:`);
console.table(histogram.toJSON());
await teardown();

View File

@ -8,7 +8,7 @@
"dependencies": {
"@node-redis/client-local": "../packages/client",
"@node-redis/client-production": "npm:@node-redis/client@1.0.0",
"hazelcast-client": "^5.0.2",
"hdr-histogram-js": "^2.0.1",
"ioredis": "4.28.1",
"redis-v3": "npm:redis@3.1.2",
"yargs": "17.3.0"
@ -26,7 +26,6 @@
},
"devDependencies": {
"@istanbuljs/nyc-config-typescript": "^1.0.1",
"@node-redis/benchmark": "*",
"@node-redis/test-utils": "*",
"@types/node": "^16.11.10",
"@types/redis-parser": "^3.0.0",
@ -49,6 +48,11 @@
"node": ">=12"
}
},
"node_modules/@assemblyscript/loader": {
"version": "0.10.1",
"resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz",
"integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg=="
},
"node_modules/@node-redis/client-local": {
"resolved": "../packages/client",
"link": true
@ -68,11 +72,6 @@
"node": ">=12"
}
},
"node_modules/@types/long": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
"integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w=="
},
"node_modules/ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@ -95,6 +94,25 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/feross"
},
{
"type": "patreon",
"url": "https://www.patreon.com/feross"
},
{
"type": "consulting",
"url": "https://feross.org/support"
}
]
},
"node_modules/cliui": {
"version": "7.0.4",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
@ -182,16 +200,14 @@
"node": "6.* || 8.* || >= 10.*"
}
},
"node_modules/hazelcast-client": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/hazelcast-client/-/hazelcast-client-5.0.2.tgz",
"integrity": "sha512-CsNvZZn2bQn8E+j5HgXzhhEfjliBn6626qBb5upcIQHw1J9rtobiS2/pqabNKXMwKjyzVNc/ui+yqFKaGMrc6A==",
"node_modules/hdr-histogram-js": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.1.tgz",
"integrity": "sha512-uPZxl1dAFnjUFHWLZmt93vUUvtHeaBay9nVNHu38SdOjMSF/4KqJUqa1Seuj08ptU1rEb6AHvB41X8n/zFZ74Q==",
"dependencies": {
"@types/long": "4.0.1",
"long": "4.0.0"
},
"engines": {
"node": ">=10.4.0"
"@assemblyscript/loader": "^0.10.1",
"base64-js": "^1.2.0",
"pako": "^1.0.3"
}
},
"node_modules/ioredis": {
@ -242,11 +258,6 @@
"resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
"integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo="
},
"node_modules/long": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
"integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
},
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@ -260,6 +271,11 @@
"node": ">=6"
}
},
"node_modules/pako": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
},
"node_modules/redis-commands": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz",
@ -396,11 +412,15 @@
}
},
"dependencies": {
"@assemblyscript/loader": {
"version": "0.10.1",
"resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz",
"integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg=="
},
"@node-redis/client-local": {
"version": "file:../packages/client",
"requires": {
"@istanbuljs/nyc-config-typescript": "^1.0.1",
"@node-redis/benchmark": "*",
"@node-redis/test-utils": "*",
"@types/node": "^16.11.10",
"@types/redis-parser": "^3.0.0",
@ -435,11 +455,6 @@
"yallist": "4.0.0"
}
},
"@types/long": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
"integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w=="
},
"ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@ -453,6 +468,11 @@
"color-convert": "^2.0.1"
}
},
"base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
},
"cliui": {
"version": "7.0.4",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
@ -514,13 +534,14 @@
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
},
"hazelcast-client": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/hazelcast-client/-/hazelcast-client-5.0.2.tgz",
"integrity": "sha512-CsNvZZn2bQn8E+j5HgXzhhEfjliBn6626qBb5upcIQHw1J9rtobiS2/pqabNKXMwKjyzVNc/ui+yqFKaGMrc6A==",
"hdr-histogram-js": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.1.tgz",
"integrity": "sha512-uPZxl1dAFnjUFHWLZmt93vUUvtHeaBay9nVNHu38SdOjMSF/4KqJUqa1Seuj08ptU1rEb6AHvB41X8n/zFZ74Q==",
"requires": {
"@types/long": "4.0.1",
"long": "4.0.0"
"@assemblyscript/loader": "^0.10.1",
"base64-js": "^1.2.0",
"pako": "^1.0.3"
}
},
"ioredis": {
@ -561,11 +582,6 @@
"resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
"integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo="
},
"long": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
"integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@ -576,6 +592,11 @@
"resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
"integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw=="
},
"pako": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
},
"redis-commands": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz",

View File

@ -9,7 +9,7 @@
"dependencies": {
"@node-redis/client-local": "../packages/client",
"@node-redis/client-production": "npm:@node-redis/client@1.0.0",
"hazelcast-client": "^5.0.2",
"hdr-histogram-js": "2.0.1",
"ioredis": "4.28.1",
"redis-v3": "npm:redis@3.1.2",
"yargs": "17.3.0"

View File

@ -0,0 +1 @@
redisbench_admin>=0.5.24