feat: add disk i/o internal benchmark
authorJérôme Benoit <jerome.benoit@sap.com>
Sun, 16 Apr 2023 22:50:28 +0000 (00:50 +0200)
committerJérôme Benoit <jerome.benoit@sap.com>
Sun, 16 Apr 2023 22:50:28 +0000 (00:50 +0200)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
benchmarks/benchmarks-utils.js
benchmarks/versus-external-pools/functions/function-to-bench.js
benchmarks/versus-external-pools/package.json

index 50dcc40c6edaff1a45d885c7c0dd5d531efe3ae6..64df58c87b4a3b1c671a73695ef5905cd195c6df 100644 (file)
@@ -1,3 +1,4 @@
+const crypto = require('crypto')
 const fs = require('fs')
 const {
   PoolTypes,
@@ -77,11 +78,16 @@ function factorial (n) {
   return factorial(n - 1) * n
 }
 
-function readWriteFiles (n) {
-  const baseDirectory = '/tmp/poolifier-benchmarks'
-  if (fs.existsSync(baseDirectory) === false) {
-    fs.mkdirSync(baseDirectory, { recursive: true })
+function readWriteFiles (
+  n,
+  baseDirectory = `/tmp/poolifier-benchmarks/${crypto.randomInt(
+    281474976710655
+  )}`
+) {
+  if (fs.existsSync(baseDirectory) === true) {
+    fs.rmSync(baseDirectory, { recursive: true })
   }
+  fs.mkdirSync(baseDirectory, { recursive: true })
   for (let i = 0; i < n; i++) {
     const filePath = `${baseDirectory}/${i}`
     fs.writeFileSync(filePath, i.toString(), {
@@ -90,6 +96,7 @@ function readWriteFiles (n) {
     })
     fs.readFileSync(filePath, 'utf8')
   }
+  fs.rmSync(baseDirectory, { recursive: true })
 }
 
 function executeWorkerFunction (data) {
index 89e9e2acae8c9d4fc09125fdde58090a50a1f4f7..3009054ee68658486b737f90ca060bd207a2f2b3 100644 (file)
@@ -6,6 +6,7 @@
  * @returns {*} The result.
  */
 function functionToBench (data) {
+  const crypto = require('crypto')
   const fs = require('fs')
   const TaskTypes = {
     CPU_INTENSIVE: 'CPU_INTENSIVE',
@@ -14,7 +15,9 @@ function functionToBench (data) {
   data = data || {}
   data.taskType = data.taskType || TaskTypes.CPU_INTENSIVE
   data.taskSize = data.taskSize || 5000
-  const baseDirectory = '/tmp/poolifier-benchmarks'
+  const baseDirectory = `/tmp/poolifier-benchmarks/${crypto.randomInt(
+    281474976710655
+  )}`
   switch (data.taskType) {
     case TaskTypes.CPU_INTENSIVE:
       // CPU intensive task
@@ -27,9 +30,10 @@ function functionToBench (data) {
       return { ok: 1 }
     case TaskTypes.IO_INTENSIVE:
       // IO intensive task
-      if (fs.existsSync(baseDirectory) === false) {
-        fs.mkdirSync(baseDirectory, { recursive: true })
+      if (fs.existsSync(baseDirectory) === true) {
+        fs.rmSync(baseDirectory, { recursive: true })
       }
+      fs.mkdirSync(baseDirectory, { recursive: true })
       for (let i = 0; i < data.taskSize; i++) {
         const filePath = `${baseDirectory}/${i}`
         fs.writeFileSync(filePath, i.toString(), {
@@ -38,6 +42,7 @@ function functionToBench (data) {
         })
         fs.readFileSync(filePath, 'utf8')
       }
+      fs.rmSync(baseDirectory, { recursive: true })
       return { ok: 1 }
     default:
       throw new Error(`Unknown task type: ${data.taskType}`)
index fe8f8cf14f89f29f54ae3f9668deda21f65586a6..eda132c66740a384493b244334bd4ea261a6df2e 100644 (file)
@@ -5,6 +5,9 @@
   "private": true,
   "main": "index.js",
   "author": "pioardi",
+  "engines": {
+    "node": ">=14.14.0"
+  },
   "scripts": {
     "test": "echo \"Error: no test specified\" && exit 1"
   },