X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fpools%2Futils.ts;h=724c4ab960c691e8f4a5d8661f9c442ff14d5b3d;hb=e0ab0e1d05daf5f2e815866272ce41716f6f6703;hp=533ca9cc7c27e6a9dc066315aa2e9560536a5775;hpb=bbbf303c069e3763defd0452177340d805e9b1f6;p=poolifier.git diff --git a/src/pools/utils.ts b/src/pools/utils.ts index 533ca9cc..724c4ab9 100644 --- a/src/pools/utils.ts +++ b/src/pools/utils.ts @@ -100,21 +100,39 @@ const getDefaultWeights = ( return weights } +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 getDefaultWorkerWeight = (): number => { + const currentCpus = cpus() + let estCpuSpeed: number | undefined + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + if (currentCpus.every(cpu => cpu.speed == null || cpu.speed === 0)) { + estCpuSpeed = estimatedCpuSpeed() + } let cpusCycleTimeWeight = 0 - for (const cpu of cpus()) { + for (const cpu of currentCpus) { // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition if (cpu.speed == null || cpu.speed === 0) { cpu.speed = - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/no-non-null-assertion, - cpus().find(cpu => cpu.speed != null && cpu.speed !== 0)!.speed + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + currentCpus.find(cpu => cpu.speed != null && cpu.speed !== 0)?.speed ?? + estCpuSpeed ?? + 2000 } // CPU estimated cycle time const numberOfDigits = cpu.speed.toString().length - 1 const cpuCycleTime = 1 / (cpu.speed / Math.pow(10, numberOfDigits)) cpusCycleTimeWeight += cpuCycleTime * Math.pow(10, numberOfDigits) } - return Math.round(cpusCycleTimeWeight / cpus().length) + return Math.round(cpusCycleTimeWeight / currentCpus.length) } export const checkFilePath = (filePath: string | undefined): void => {