From: Jérôme Benoit Date: Sat, 16 Mar 2024 14:06:34 +0000 (+0100) Subject: fix: use estimated cpu speed instead of random one X-Git-Tag: v3.1.23~20 X-Git-Url: https://git.piment-noir.org/?a=commitdiff_plain;ds=sidebyside;h=10c74f8a996cd15f294bdb31ad31d59ab0177db1;p=poolifier.git fix: use estimated cpu speed instead of random one Signed-off-by: Jérôme Benoit --- diff --git a/src/pools/utils.ts b/src/pools/utils.ts index 2c021534..7c1b7866 100644 --- a/src/pools/utils.ts +++ b/src/pools/utils.ts @@ -1,5 +1,4 @@ import cluster, { Worker as ClusterWorker } from 'node:cluster' -import { randomInt } from 'node:crypto' import { existsSync } from 'node:fs' import { cpus } from 'node:os' import { env } from 'node:process' @@ -101,8 +100,19 @@ const getDefaultWeights = ( return weights } -const getDefaultWorkerWeight = (): number => { - const cpuSpeed = randomInt(500, 2500) +const estimatedCpuSpeed = (): number => { + const runs = 150000000 + const begin = performance.now() + // eslint-disable-next-line no-empty + for (let i = runs; i > 0; i--) {} + const end = performance.now() + const duration = end - begin + return Math.trunc(runs / duration / 1000) // in MHz +} + +const estCpuSpeed = estimatedCpuSpeed() + +const getDefaultWorkerWeight = (estimatedCpuSpeed = estCpuSpeed): number => { let cpusCycleTimeWeight = 0 for (const cpu of cpus()) { // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition @@ -110,7 +120,7 @@ const getDefaultWorkerWeight = (): number => { cpu.speed = // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition cpus().find(cpu => cpu.speed != null && cpu.speed !== 0)?.speed ?? - cpuSpeed + estimatedCpuSpeed } // CPU estimated cycle time const numberOfDigits = cpu.speed.toString().length - 1