From bd587a45e2b1ec0730209ddedb09630bdc305b20 Mon Sep 17 00:00:00 2001 From: Lucas Barrena Date: Thu, 13 Jul 2023 05:19:23 -0300 Subject: [PATCH 1/2] Add bench test for large core with two non-sparse readers --- package.json | 2 ++ test/bench/large.js | 71 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 test/bench/large.js diff --git a/package.json b/package.json index 43b428b69..c2e028245 100644 --- a/package.json +++ b/package.json @@ -58,6 +58,7 @@ }, "devDependencies": { "brittle": "^3.0.0", + "byte-size": "^8.1.1", "hyperswarm": "^4.3.6", "random-access-memory": "^6.1.0", "random-access-memory-overlay": "^3.0.0", @@ -65,6 +66,7 @@ "speedometer": "^1.1.0", "standard": "^17.0.0", "tiny-byte-size": "^1.1.0", + "tiny-crayon": "^1.0.5", "tmp-promise": "^3.0.2", "udx-native": "^1.6.1" } diff --git a/test/bench/large.js b/test/bench/large.js new file mode 100644 index 000000000..a64e2fe50 --- /dev/null +++ b/test/bench/large.js @@ -0,0 +1,71 @@ +const test = require('brittle') +const Hypercore = require('../../index.js') +const RAM = require('random-access-memory') +const { replicate, createTmpDir } = require('../helpers') +const speedometer = require('speedometer') +const byteSize = require('byte-size') +const crayon = require('tiny-crayon') + +test('large core with two non-sparse readers', { timeout: 999999999 }, async function (t) { + const dir = createTmpDir(t) + + const writer = new Hypercore(dir) + await writer.ready() + + const clone1 = new Hypercore(RAM, writer.key) + const clone2 = new Hypercore(RAM, writer.key) + + for (let i = writer.length; i < 1000000; i++) { + await writer.append(Math.random().toString(16).substr(2)) + + if (i % 100000 === 0) t.comment('Append ' + i) + } + + t.comment('Writer complete') + + intervalSpeed(t, writer, 'Writer') + intervalSpeed(t, clone1, 'Clone1') + intervalSpeed(t, clone2, 'Clone2') + + replicate(writer, clone1, t) + replicate(writer, clone2, t) + + const dl1 = clone1.download() + const dl2 = clone2.download() + + await dl1.done() + await dl2.done() + + t.comment('Done') + + await writer.close() + await clone1.close() + await clone2.close() +}) + +function intervalSpeed (t, core, name) { + const info = { + blocks: { down: speedometer(), up: speedometer() }, + network: { down: speedometer(), up: speedometer() } + } + + core.on('download', onspeed.bind(null, 'down', info)) + core.on('upload', onspeed.bind(null, 'up', info)) + + const id = setInterval(() => { + t.comment( + name, + crayon.green('↓') + ' ' + crayon.yellow(Math.ceil(info.blocks.down())), + crayon.cyan('↑') + ' ' + crayon.yellow(Math.ceil(info.blocks.up())) + ' blks/s', + crayon.green('↓') + ' ' + crayon.yellow(byteSize(info.network.down())), + crayon.cyan('↑') + ' ' + crayon.yellow(byteSize(info.network.up())) + ) + }, 1000) + + t.teardown(() => clearInterval(id)) +} + +function onspeed (eventName, info, index, byteLength, from) { + info.blocks[eventName](1) + info.network[eventName](byteLength) +} From 2fbe5a32737bc168e3056b4c1d719cb94077793d Mon Sep 17 00:00:00 2001 From: Lucas Barrena Date: Thu, 3 Aug 2023 15:01:23 -0300 Subject: [PATCH 2/2] Remove colors --- package.json | 1 - test/bench/large.js | 9 ++++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index c2e028245..2b03736f9 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,6 @@ "speedometer": "^1.1.0", "standard": "^17.0.0", "tiny-byte-size": "^1.1.0", - "tiny-crayon": "^1.0.5", "tmp-promise": "^3.0.2", "udx-native": "^1.6.1" } diff --git a/test/bench/large.js b/test/bench/large.js index a64e2fe50..d0d6b9e7f 100644 --- a/test/bench/large.js +++ b/test/bench/large.js @@ -4,7 +4,6 @@ const RAM = require('random-access-memory') const { replicate, createTmpDir } = require('../helpers') const speedometer = require('speedometer') const byteSize = require('byte-size') -const crayon = require('tiny-crayon') test('large core with two non-sparse readers', { timeout: 999999999 }, async function (t) { const dir = createTmpDir(t) @@ -55,10 +54,10 @@ function intervalSpeed (t, core, name) { const id = setInterval(() => { t.comment( name, - crayon.green('↓') + ' ' + crayon.yellow(Math.ceil(info.blocks.down())), - crayon.cyan('↑') + ' ' + crayon.yellow(Math.ceil(info.blocks.up())) + ' blks/s', - crayon.green('↓') + ' ' + crayon.yellow(byteSize(info.network.down())), - crayon.cyan('↑') + ' ' + crayon.yellow(byteSize(info.network.up())) + '↓ ' + Math.ceil(info.blocks.down()), + '↑ ' + Math.ceil(info.blocks.up()) + ' blks/s', + '↓ ' + byteSize(info.network.down()), + '↑ ' + byteSize(info.network.up()) ) }, 1000)