feat: add less busy worker choice strategy to internal benchmarks
authorJérôme Benoit <jerome.benoit@sap.com>
Sun, 2 Apr 2023 19:07:39 +0000 (21:07 +0200)
committerJérôme Benoit <jerome.benoit@sap.com>
Sun, 2 Apr 2023 19:07:39 +0000 (21:07 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
CHANGELOG.md
benchmarks/internal/bench.js
benchmarks/internal/cluster/dynamic.js
benchmarks/internal/cluster/fixed.js
benchmarks/internal/thread/dynamic.js
benchmarks/internal/thread/fixed.js

index e11a872952128a3a767302e8ddeb75a4335c7a94..79788cf7c2cee98d8735eb1fd5efa41111050f8e 100644 (file)
@@ -2,7 +2,7 @@
 
 All notable changes to this project will be documented in this file.
 
-The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
 and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
 
 ## [Unreleased]
index a3de2086ce674f2b09f96dfb561365ae3d832b6a..218648281fca341b0566fe977f30d0acbe893321 100644 (file)
@@ -3,25 +3,29 @@ const {
   dynamicClusterTest,
   dynamicClusterTestFairShare,
   dynamicClusterTestLessUsed,
-  dynamicClusterTestWeightedRoundRobin
+  dynamicClusterTestWeightedRoundRobin,
+  dynamicClusterTestLessBusy
 } = require('./cluster/dynamic')
 const {
   fixedClusterTest,
   fixedClusterTestFairShare,
   fixedClusterTestLessUsed,
-  fixedClusterTestWeightedRoundRobin
+  fixedClusterTestWeightedRoundRobin,
+  fixedClusterTestLessBusy
 } = require('./cluster/fixed')
 const {
   dynamicThreadTest,
   dynamicThreadTestFairShare,
   dynamicThreadTestLessUsed,
-  dynamicThreadTestWeightedRoundRobin
+  dynamicThreadTestWeightedRoundRobin,
+  dynamicThreadTestLessBusy
 } = require('./thread/dynamic')
 const {
   fixedThreadTest,
   fixedThreadTestFairShare,
   fixedThreadTestLessUsed,
-  fixedThreadTestWeightedRoundRobin
+  fixedThreadTestWeightedRoundRobin,
+  fixedThreadTestLessBusy
 } = require('./thread/fixed')
 
 const resultsFile = 'poolifier'
@@ -35,6 +39,9 @@ Benchmark.suite(
   Benchmark.add('Poolifier:Fixed:ThreadPool:LessUsed', async () => {
     await fixedThreadTestLessUsed()
   }),
+  Benchmark.add('Poolifier:Fixed:ThreadPool:LessBusy', async () => {
+    await fixedThreadTestLessBusy()
+  }),
   Benchmark.add('Poolifier:Fixed:ThreadPool:WeightedRoundRobin', async () => {
     await fixedThreadTestWeightedRoundRobin()
   }),
@@ -47,6 +54,9 @@ Benchmark.suite(
   Benchmark.add('Poolifier:Dynamic:ThreadPool:LessUsed', async () => {
     await dynamicThreadTestLessUsed()
   }),
+  Benchmark.add('Poolifier:Dynamic:ThreadPool:LessBusy', async () => {
+    await dynamicThreadTestLessBusy()
+  }),
   Benchmark.add('Poolifier:Dynamic:ThreadPool:WeightedRoundRobin', async () => {
     await dynamicThreadTestWeightedRoundRobin()
   }),
@@ -59,8 +69,11 @@ Benchmark.suite(
   Benchmark.add('Poolifier:Fixed:ClusterPool:LessUsed', async () => {
     await fixedClusterTestLessUsed()
   }),
+  Benchmark.add('Poolifier:Fixed:ClusterPool:LessBusy', async () => {
+    await fixedClusterTestLessBusy()
+  }),
   Benchmark.add('Poolifier:Fixed:ClusterPool:WeightedRoundRobin', async () => {
-    await fixedClusterTestWeightedRoundRobin
+    await fixedClusterTestWeightedRoundRobin()
   }),
   Benchmark.add('Poolifier:Fixed:ClusterPool:FairShare', async () => {
     await fixedClusterTestFairShare()
@@ -71,10 +84,13 @@ Benchmark.suite(
   Benchmark.add('Poolifier:Dynamic:ClusterPool:LessUsed', async () => {
     await dynamicClusterTestLessUsed()
   }),
+  Benchmark.add('Poolifier:Dynamic:ClusterPool:LessBusy', async () => {
+    await dynamicClusterTestLessBusy()
+  }),
   Benchmark.add(
     'Poolifier:Dynamic:ClusterPool:WeightedRoundRobin',
     async () => {
-      await dynamicClusterTestWeightedRoundRobin
+      await dynamicClusterTestWeightedRoundRobin()
     }
   ),
   Benchmark.add('Poolifier:Dynamic:ClusterPool:FairShare', async () => {
index 60ee14f6942efdf32c5d7bb8aa52e3f2250f5990..475ba9d79b953fdfabf075010d94ddb979fe93eb 100644 (file)
@@ -20,6 +20,13 @@ const dynamicPoolLessUsed = new DynamicClusterPool(
   { workerChoiceStrategy: WorkerChoiceStrategies.LESS_USED }
 )
 
+const dynamicPoolLessBusy = new DynamicClusterPool(
+  size / 2,
+  size * 3,
+  './benchmarks/internal/cluster/worker.js',
+  { workerChoiceStrategy: WorkerChoiceStrategies.LESS_BUSY }
+)
+
 const dynamicPoolWeightedRoundRobin = new DynamicClusterPool(
   size / 2,
   size * 3,
@@ -46,6 +53,12 @@ async function dynamicClusterTestLessUsed (
   return runPoolifierTest(dynamicPoolLessUsed, { tasks, workerData })
 }
 
+async function dynamicClusterTestLessBusy (
+  { tasks, workerData } = { tasks: numberOfTasks, workerData: { proof: 'ok' } }
+) {
+  return runPoolifierTest(dynamicPoolLessBusy, { tasks, workerData })
+}
+
 async function dynamicClusterTestWeightedRoundRobin (
   { tasks, workerData } = { tasks: numberOfTasks, workerData: { proof: 'ok' } }
 ) {
@@ -61,6 +74,7 @@ async function dynamicClusterTestFairShare (
 module.exports = {
   dynamicClusterTest,
   dynamicClusterTestLessUsed,
+  dynamicClusterTestLessBusy,
   dynamicClusterTestWeightedRoundRobin,
   dynamicClusterTestFairShare
 }
index 69e4a14870013bd5f3136d8ecb25309c9d93c163..7e31a838eceaaa271abcc7cf9a277a70eb6bbc75 100644 (file)
@@ -18,6 +18,12 @@ const fixedPoolLessUsed = new FixedClusterPool(
   { workerChoiceStrategy: WorkerChoiceStrategies.LESS_USED }
 )
 
+const fixedPoolLessBusy = new FixedClusterPool(
+  size,
+  './benchmarks/internal/cluster/worker.js',
+  { workerChoiceStrategy: WorkerChoiceStrategies.LESS_BUSY }
+)
+
 const fixedPoolWeightedRoundRobin = new FixedClusterPool(
   size,
   './benchmarks/internal/cluster/worker.js',
@@ -42,6 +48,12 @@ async function fixedClusterTestLessUsed (
   return runPoolifierTest(fixedPoolLessUsed, { tasks, workerData })
 }
 
+async function fixedClusterTestLessBusy (
+  { tasks, workerData } = { tasks: numberOfTasks, workerData: { proof: 'ok' } }
+) {
+  return runPoolifierTest(fixedPoolLessBusy, { tasks, workerData })
+}
+
 async function fixedClusterTestWeightedRoundRobin (
   { tasks, workerData } = { tasks: numberOfTasks, workerData: { proof: 'ok' } }
 ) {
@@ -57,6 +69,7 @@ async function fixedClusterTestFairShare (
 module.exports = {
   fixedClusterTest,
   fixedClusterTestLessUsed,
+  fixedClusterTestLessBusy,
   fixedClusterTestWeightedRoundRobin,
   fixedClusterTestFairShare
 }
index 04f18406b0394ca2c9d9e66a9af665c6b8fe735e..503ea27cfbd6e2f40e8e13ae0c92b9832ca6c34a 100644 (file)
@@ -20,6 +20,13 @@ const dynamicPoolLessUsed = new DynamicThreadPool(
   { workerChoiceStrategy: WorkerChoiceStrategies.LESS_USED }
 )
 
+const dynamicPoolLessBusy = new DynamicThreadPool(
+  size / 2,
+  size * 3,
+  './benchmarks/internal/thread/worker.js',
+  { workerChoiceStrategy: WorkerChoiceStrategies.LESS_BUSY }
+)
+
 const dynamicPoolWeightedRoundRobin = new DynamicThreadPool(
   size / 2,
   size * 3,
@@ -46,6 +53,12 @@ async function dynamicThreadTestLessUsed (
   return runPoolifierTest(dynamicPoolLessUsed, { tasks, workerData })
 }
 
+async function dynamicThreadTestLessBusy (
+  { tasks, workerData } = { tasks: numberOfTasks, workerData: { proof: 'ok' } }
+) {
+  return runPoolifierTest(dynamicPoolLessBusy, { tasks, workerData })
+}
+
 async function dynamicThreadTestWeightedRoundRobin (
   { tasks, workerData } = { tasks: numberOfTasks, workerData: { proof: 'ok' } }
 ) {
@@ -61,6 +74,7 @@ async function dynamicThreadTestFairShare (
 module.exports = {
   dynamicThreadTest,
   dynamicThreadTestLessUsed,
+  dynamicThreadTestLessBusy,
   dynamicThreadTestWeightedRoundRobin,
   dynamicThreadTestFairShare
 }
index ee4105be4dcda8512702740a703baf7080b0d5c4..a4ba580e0210710915e184abaeb6951caf1c6fd2 100644 (file)
@@ -18,6 +18,12 @@ const fixedPoolLessUsed = new FixedThreadPool(
   { workerChoiceStrategy: WorkerChoiceStrategies.LESS_USED }
 )
 
+const fixedPoolLessBusy = new FixedThreadPool(
+  size,
+  './benchmarks/internal/thread/worker.js',
+  { workerChoiceStrategy: WorkerChoiceStrategies.LESS_BUSY }
+)
+
 const fixedPoolWeightedRoundRobin = new FixedThreadPool(
   size,
   './benchmarks/internal/thread/worker.js',
@@ -42,6 +48,12 @@ async function fixedThreadTestLessUsed (
   return runPoolifierTest(fixedPoolLessUsed, { tasks, workerData })
 }
 
+async function fixedThreadTestLessBusy (
+  { tasks, workerData } = { tasks: numberOfTasks, workerData: { proof: 'ok' } }
+) {
+  return runPoolifierTest(fixedPoolLessBusy, { tasks, workerData })
+}
+
 async function fixedThreadTestWeightedRoundRobin (
   { tasks, workerData } = { tasks: numberOfTasks, workerData: { proof: 'ok' } }
 ) {
@@ -57,6 +69,7 @@ async function fixedThreadTestFairShare (
 module.exports = {
   fixedThreadTest,
   fixedThreadTestLessUsed,
+  fixedThreadTestLessBusy,
   fixedThreadTestWeightedRoundRobin,
   fixedThreadTestFairShare
 }