From 6da2cd97e05be83e254cbbd9914099df447d4ebe Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Mon, 1 Apr 2024 00:46:03 +0200 Subject: [PATCH] feat(benchmark): add helper to run unique benchmark with benchmarks.js MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Jérôme Benoit --- benchmarks/benchmarks-utils.mjs | 73 ++++++++++++++++++++++++++++++++- benchmarks/internal/bench.mjs | 10 ++--- 2 files changed, 77 insertions(+), 6 deletions(-) diff --git a/benchmarks/benchmarks-utils.mjs b/benchmarks/benchmarks-utils.mjs index a74a36ee..e81c3773 100644 --- a/benchmarks/benchmarks-utils.mjs +++ b/benchmarks/benchmarks-utils.mjs @@ -76,6 +76,77 @@ const runPoolifierPool = async (pool, { taskExecutions, workerData }) => { } export const runPoolifierBenchmarkBenchmarkJs = async ( + name, + workerType, + poolType, + poolSize, + poolOptions, + { taskExecutions, workerData } +) => { + return await new Promise((resolve, reject) => { + const pool = buildPoolifierPool(workerType, poolType, poolSize, poolOptions) + let workerChoiceStrategy + let enableTasksQueue + let workerChoiceStrategyOptions + if (poolOptions != null) { + ({ + workerChoiceStrategy, + enableTasksQueue, + workerChoiceStrategyOptions + } = poolOptions) + } + const measurement = workerChoiceStrategyOptions?.measurement + new Benchmark( + `${name} with ${workerChoiceStrategy ?? pool.opts.workerChoiceStrategy}${ + measurement != null ? `, with ${measurement}` : '' + } and ${enableTasksQueue ? 'with' : 'without'} tasks queue`, + async () => { + await runPoolifierPool(pool, { + taskExecutions, + workerData + }) + }, + { + onStart: () => { + if (workerChoiceStrategy != null) { + strictEqual(pool.opts.workerChoiceStrategy, workerChoiceStrategy) + } + if (enableTasksQueue != null) { + strictEqual(pool.opts.enableTasksQueue, enableTasksQueue) + } + if (measurement != null) { + strictEqual( + pool.opts.workerChoiceStrategyOptions.measurement, + measurement + ) + } + }, + onComplete: event => { + console.info(event.target.toString()) + if (pool.started && !pool.destroying) { + pool.destroy().then(resolve).catch(reject) + } else { + resolve() + } + }, + onError: event => { + if (pool.started && !pool.destroying) { + pool + .destroy() + .then(() => { + return reject(event.target.error) + }) + .catch(() => {}) + } else { + reject(event.target.error) + } + } + } + ).run() + }) +} + +export const runPoolifierBenchmarkBenchmarkJsSuite = async ( name, workerType, poolType, @@ -113,7 +184,7 @@ export const runPoolifierBenchmarkBenchmarkJs = async ( if (workerChoiceStrategy === WorkerChoiceStrategies.FAIR_SHARE) { for (const measurement of [Measurements.runTime, Measurements.elu]) { suite.add( - `${name} with ${workerChoiceStrategy}, with measurement ${measurement} and ${ + `${name} with ${workerChoiceStrategy}, with ${measurement} and ${ enableTasksQueue ? 'with' : 'without' } tasks queue`, async () => { diff --git a/benchmarks/internal/bench.mjs b/benchmarks/internal/bench.mjs index aa98be85..564a4de1 100644 --- a/benchmarks/internal/bench.mjs +++ b/benchmarks/internal/bench.mjs @@ -11,7 +11,7 @@ import { import { TaskFunctions } from '../benchmarks-types.cjs' import { buildPoolifierBenchmarkMitata, - runPoolifierBenchmarkBenchmarkJs + runPoolifierBenchmarkBenchmarkJsSuite } from '../benchmarks-utils.mjs' const poolSize = availableParallelism() @@ -87,7 +87,7 @@ switch ( break case 'benchmark.js': default: - await runPoolifierBenchmarkBenchmarkJs( + await runPoolifierBenchmarkBenchmarkJsSuite( 'FixedThreadPool', WorkerTypes.thread, PoolTypes.fixed, @@ -97,7 +97,7 @@ switch ( workerData } ) - await runPoolifierBenchmarkBenchmarkJs( + await runPoolifierBenchmarkBenchmarkJsSuite( 'DynamicThreadPool', WorkerTypes.thread, PoolTypes.dynamic, @@ -107,7 +107,7 @@ switch ( workerData } ) - await runPoolifierBenchmarkBenchmarkJs( + await runPoolifierBenchmarkBenchmarkJsSuite( 'FixedClusterPool', WorkerTypes.cluster, PoolTypes.fixed, @@ -117,7 +117,7 @@ switch ( workerData } ) - await runPoolifierBenchmarkBenchmarkJs( + await runPoolifierBenchmarkBenchmarkJsSuite( 'DynamicClusterPool', WorkerTypes.cluster, PoolTypes.dynamic, -- 2.34.1