fix: fix continuous benchmarking
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Sat, 16 Sep 2023 19:52:57 +0000 (21:52 +0200)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Sat, 16 Sep 2023 19:52:57 +0000 (21:52 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
benchmarks/internal/bench.mjs

index 258854f864702ecf92816e151b33d14f38c96840..7d3e90f288c478c84dd3cedabba6cb8a371a227a 100644 (file)
@@ -1,6 +1,6 @@
+import assert from 'node:assert'
 import Benchmark from 'benchmark'
 import {
-  Measurements,
   PoolTypes,
   WorkerChoiceStrategies,
   WorkerTypes,
@@ -13,58 +13,12 @@ import {
   runPoolifierTest
 } from '../benchmarks-utils.mjs'
 
-const poolifierSuite = new Benchmark.Suite('Poolifier', {
-  onCycle: event => {
-    console.info(event.target.toString())
-  },
-  onComplete: function () {
-    console.info(
-      'Fastest is ' + LIST_FORMATTER.format(this.filter('fastest').map('name'))
-    )
-  }
-})
-
 const poolSize = availableParallelism()
-const benchmarkSettings = []
-for (const poolType of Object.values(PoolTypes)) {
-  for (const workerType of Object.values(WorkerTypes)) {
-    if (workerType === WorkerTypes.cluster) {
-      continue
-    }
-    for (const workerChoiceStrategy of Object.values(WorkerChoiceStrategies)) {
-      for (const enableTasksQueue of [false, true]) {
-        if (workerChoiceStrategy === WorkerChoiceStrategies.FAIR_SHARE) {
-          for (const measurement of [Measurements.runTime, Measurements.elu]) {
-            benchmarkSettings.push([
-              `${poolType}|${workerType}|${workerChoiceStrategy}|tasks queue:${enableTasksQueue}|measurement:${measurement}`,
-              workerType,
-              poolType,
-              poolSize,
-              {
-                workerChoiceStrategy,
-                workerChoiceStrategyOptions: {
-                  measurement
-                },
-                enableTasksQueue
-              }
-            ])
-          }
-        } else {
-          benchmarkSettings.push([
-            `${poolType}|${workerType}|${workerChoiceStrategy}|tasks queue:${enableTasksQueue}`,
-            workerType,
-            poolType,
-            poolSize,
-            {
-              workerChoiceStrategy,
-              enableTasksQueue
-            }
-          ])
-        }
-      }
-    }
-  }
-}
+const fixedThreadPool = buildPoolifierPool(
+  WorkerTypes.thread,
+  PoolTypes.fixed,
+  poolSize
+)
 
 const taskExecutions = 1
 const workerData = {
@@ -72,21 +26,41 @@ const workerData = {
   taskSize: 100
 }
 
-for (const [
-  name,
-  workerType,
-  poolType,
-  poolSize,
-  poolOptions
-] of benchmarkSettings) {
-  poolifierSuite.add(name, async () => {
-    const pool = buildPoolifierPool(workerType, poolType, poolSize, poolOptions)
-    await runPoolifierTest(pool, {
-      taskExecutions,
-      workerData
-    })
-    await pool.destroy()
-  })
+const poolifierSuite = new Benchmark.Suite('Poolifier')
+
+for (const pool of [fixedThreadPool]) {
+  for (const workerChoiceStrategy of Object.values(WorkerChoiceStrategies)) {
+    for (const enableTasksQueue of [false, true]) {
+      poolifierSuite.add(
+        `${pool.constructor.name}|${workerChoiceStrategy}|${
+          enableTasksQueue ? 'with' : 'without'
+        } tasks queue`,
+        async () => {
+          pool.setWorkerChoiceStrategy(workerChoiceStrategy)
+          pool.enableTasksQueue(enableTasksQueue)
+          assert.strictEqual(
+            pool.opts.workerChoiceStrategy,
+            workerChoiceStrategy
+          )
+          assert.strictEqual(pool.opts.enableTasksQueue, enableTasksQueue)
+          await runPoolifierTest(pool, {
+            taskExecutions,
+            workerData
+          })
+        }
+      )
+    }
+  }
 }
 
-poolifierSuite.run({ async: true })
+poolifierSuite
+  .on('cycle', event => {
+    console.info(event.target.toString())
+  })
+  .on('complete', function () {
+    console.info(
+      'Fastest is ' + LIST_FORMATTER.format(this.filter('fastest').map('name'))
+    )
+    fixedThreadPool.destroy()
+  })
+  .run({ async: true })