Add WRR worker choice strategy to benchmark
authorJérôme Benoit <jerome.benoit@sap.com>
Mon, 10 Oct 2022 16:12:18 +0000 (18:12 +0200)
committerJérôme Benoit <jerome.benoit@sap.com>
Mon, 10 Oct 2022 16:12:18 +0000 (18:12 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
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 e965574c10b32a71753a2eb260d202651a52b823..7d33fcc5dcb58489bf645cac7a55902353012801 100644 (file)
@@ -2,22 +2,26 @@ const Benchmark = require('benchmark')
 const {
   dynamicClusterTest,
   dynamicClusterTestFairShare,
-  dynamicClusterTestLessRecentlyUsed
+  dynamicClusterTestLessRecentlyUsed,
+  dynamicClusterTestWeightedRoundRobin
 } = require('./cluster/dynamic')
 const {
   fixedClusterTest,
   fixedClusterTestFairShare,
-  fixedClusterTestLessRecentlyUsed
+  fixedClusterTestLessRecentlyUsed,
+  fixedClusterTestWeightedRoundRobin
 } = require('./cluster/fixed')
 const {
   dynamicThreadTest,
   dynamicThreadTestFairShare,
-  dynamicThreadTestLessRecentlyUsed
+  dynamicThreadTestLessRecentlyUsed,
+  dynamicThreadTestWeightedRoundRobin
 } = require('./thread/dynamic')
 const {
   fixedThreadTest,
   fixedThreadTestFairShare,
-  fixedThreadTestLessRecentlyUsed
+  fixedThreadTestLessRecentlyUsed,
+  fixedThreadTestWeightedRoundRobin
 } = require('./thread/fixed')
 const { LIST_FORMATTER } = require('./benchmark-utils')
 
@@ -37,6 +41,9 @@ async function test () {
     .add('Poolifier:Fixed:ThreadPool:LessRecentlyUsed', async function () {
       await fixedThreadTestLessRecentlyUsed()
     })
+    .add('Poolifier:Fixed:ThreadPool:WeightedRoundRobin', async function () {
+      await fixedThreadTestWeightedRoundRobin()
+    })
     .add('Poolifier:Fixed:ThreadPool:FairShare', async function () {
       await fixedThreadTestFairShare()
     })
@@ -46,6 +53,9 @@ async function test () {
     .add('Poolifier:Dynamic:ThreadPool:LessRecentlyUsed', async function () {
       await dynamicThreadTestLessRecentlyUsed()
     })
+    .add('Poolifier:Dynamic:ThreadPool:WeightedRoundRobin', async function () {
+      await dynamicThreadTestWeightedRoundRobin()
+    })
     .add('Poolifier:Dynamic:ThreadPool:FairShare', async function () {
       await dynamicThreadTestFairShare()
     })
@@ -55,6 +65,9 @@ async function test () {
     .add('Poolifier:Fixed:ClusterPool:LessRecentlyUsed', async function () {
       await fixedClusterTestLessRecentlyUsed()
     })
+    .add('Poolifier:Fixed:ClusterPool:WeightedRoundRobin', async function () {
+      await fixedClusterTestWeightedRoundRobin
+    })
     .add('Poolifier:Fixed:ClusterPool:FairShare', async function () {
       await fixedClusterTestFairShare()
     })
@@ -64,6 +77,9 @@ async function test () {
     .add('Poolifier:Dynamic:ClusterPool:LessRecentlyUsed', async function () {
       await dynamicClusterTestLessRecentlyUsed()
     })
+    .add('Poolifier:Dynamic:ClusterPool:WeightedRoundRobin', async function () {
+      await dynamicClusterTestWeightedRoundRobin
+    })
     .add('Poolifier:Dynamic:ClusterPool:FairShare', async function () {
       await dynamicClusterTestFairShare()
     })
index 581bf4acf086073ed459ea6f30b65af0249ab021..dc0f7cf3493e3b94c271270d6c350dfbabb07706 100644 (file)
@@ -20,6 +20,13 @@ const dynamicPoolLessRecentlyUsed = new DynamicClusterPool(
   { workerChoiceStrategy: WorkerChoiceStrategies.LESS_RECENTLY_USED }
 )
 
+const dynamicPoolWeightedRoundRobin = new DynamicClusterPool(
+  size / 2,
+  size * 3,
+  './benchmarks/internal/cluster/worker.js',
+  { workerChoiceStrategy: WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN }
+)
+
 const dynamicPoolFairShare = new DynamicClusterPool(
   size / 2,
   size * 3,
@@ -39,6 +46,12 @@ async function dynamicClusterTestLessRecentlyUsed (
   return runPoolifierTest(dynamicPoolLessRecentlyUsed, { tasks, workerData })
 }
 
+async function dynamicClusterTestWeightedRoundRobin (
+  { tasks, workerData } = { tasks: numberOfTasks, workerData: { proof: 'ok' } }
+) {
+  return runPoolifierTest(dynamicPoolWeightedRoundRobin, { tasks, workerData })
+}
+
 async function dynamicClusterTestFairShare (
   { tasks, workerData } = { tasks: numberOfTasks, workerData: { proof: 'ok' } }
 ) {
@@ -47,6 +60,7 @@ async function dynamicClusterTestFairShare (
 
 module.exports = {
   dynamicClusterTest,
-  dynamicClusterTestFairShare,
-  dynamicClusterTestLessRecentlyUsed
+  dynamicClusterTestLessRecentlyUsed,
+  dynamicClusterTestWeightedRoundRobin,
+  dynamicClusterTestFairShare
 }
index 548ed9f9eb1518a697069ee8d5cd68a6a2f61830..388689a3be7e5bc8ba37e38e7b53cd1b902f0d22 100644 (file)
@@ -18,6 +18,12 @@ const fixedPoolLessRecentlyUsed = new FixedClusterPool(
   { workerChoiceStrategy: WorkerChoiceStrategies.LESS_RECENTLY_USED }
 )
 
+const fixedPoolWeightedRoundRobin = new FixedClusterPool(
+  size,
+  './benchmarks/internal/cluster/worker.js',
+  { workerChoiceStrategy: WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN }
+)
+
 const fixedPoolFairShare = new FixedClusterPool(
   size,
   './benchmarks/internal/cluster/worker.js',
@@ -36,6 +42,12 @@ async function fixedClusterTestLessRecentlyUsed (
   return runPoolifierTest(fixedPoolLessRecentlyUsed, { tasks, workerData })
 }
 
+async function fixedClusterTestWeightedRoundRobin (
+  { tasks, workerData } = { tasks: numberOfTasks, workerData: { proof: 'ok' } }
+) {
+  return runPoolifierTest(fixedPoolWeightedRoundRobin, { tasks, workerData })
+}
+
 async function fixedClusterTestFairShare (
   { tasks, workerData } = { tasks: numberOfTasks, workerData: { proof: 'ok' } }
 ) {
@@ -44,6 +56,7 @@ async function fixedClusterTestFairShare (
 
 module.exports = {
   fixedClusterTest,
-  fixedClusterTestFairShare,
-  fixedClusterTestLessRecentlyUsed
+  fixedClusterTestLessRecentlyUsed,
+  fixedClusterTestWeightedRoundRobin,
+  fixedClusterTestFairShare
 }
index 24740f270aafecf647825227b8bf05117eb4da54..a418545362744580dc3b00556faaa9ee40007d44 100644 (file)
@@ -20,6 +20,13 @@ const dynamicPoolLessRecentlyUsed = new DynamicThreadPool(
   { workerChoiceStrategy: WorkerChoiceStrategies.LESS_RECENTLY_USED }
 )
 
+const dynamicPoolWeightedRoundRobin = new DynamicThreadPool(
+  size / 2,
+  size * 3,
+  './benchmarks/internal/thread/worker.js',
+  { workerChoiceStrategy: WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN }
+)
+
 const dynamicPoolFairShare = new DynamicThreadPool(
   size / 2,
   size * 3,
@@ -39,6 +46,12 @@ async function dynamicThreadTestLessRecentlyUsed (
   return runPoolifierTest(dynamicPoolLessRecentlyUsed, { tasks, workerData })
 }
 
+async function dynamicThreadTestWeightedRoundRobin (
+  { tasks, workerData } = { tasks: numberOfTasks, workerData: { proof: 'ok' } }
+) {
+  return runPoolifierTest(dynamicPoolWeightedRoundRobin, { tasks, workerData })
+}
+
 async function dynamicThreadTestFairShare (
   { tasks, workerData } = { tasks: numberOfTasks, workerData: { proof: 'ok' } }
 ) {
@@ -47,6 +60,7 @@ async function dynamicThreadTestFairShare (
 
 module.exports = {
   dynamicThreadTest,
-  dynamicThreadTestFairShare,
-  dynamicThreadTestLessRecentlyUsed
+  dynamicThreadTestLessRecentlyUsed,
+  dynamicThreadTestWeightedRoundRobin,
+  dynamicThreadTestFairShare
 }
index 1db9c0b6f56428ea7216d60ce448891d22b7ffa7..376352376d4bbb3f4636d2dc4baca2cdeaf91ba2 100644 (file)
@@ -18,6 +18,12 @@ const fixedPoolLessRecentlyUsed = new FixedThreadPool(
   { workerChoiceStrategy: WorkerChoiceStrategies.LESS_RECENTLY_USED }
 )
 
+const fixedPoolWeightedRoundRobin = new FixedThreadPool(
+  size,
+  './benchmarks/internal/thread/worker.js',
+  { workerChoiceStrategy: WorkerChoiceStrategies.WEIGHTED_ROUND_ROBIN }
+)
+
 const fixedPoolFairShare = new FixedThreadPool(
   size,
   './benchmarks/internal/thread/worker.js',
@@ -36,6 +42,12 @@ async function fixedThreadTestLessRecentlyUsed (
   return runPoolifierTest(fixedPoolLessRecentlyUsed, { tasks, workerData })
 }
 
+async function fixedThreadTestWeightedRoundRobin (
+  { tasks, workerData } = { tasks: numberOfTasks, workerData: { proof: 'ok' } }
+) {
+  return runPoolifierTest(fixedPoolWeightedRoundRobin, { tasks, workerData })
+}
+
 async function fixedThreadTestFairShare (
   { tasks, workerData } = { tasks: numberOfTasks, workerData: { proof: 'ok' } }
 ) {
@@ -44,6 +56,7 @@ async function fixedThreadTestFairShare (
 
 module.exports = {
   fixedThreadTest,
-  fixedThreadTestFairShare,
-  fixedThreadTestLessRecentlyUsed
+  fixedThreadTestLessRecentlyUsed,
+  fixedThreadTestWeightedRoundRobin,
+  fixedThreadTestFairShare
 }