- private findLastFreeWorkerNodeKey (): number {
- // It requires node >= 18.0.0:
- // return this.workerNodes.findLastIndex(workerNode => {
- // return workerNode.tasksUsage.running === 0
- // })
- for (let i = this.pool.workerNodes.length - 1; i >= 0; i--) {
- if (this.pool.workerNodes[i].tasksUsage.running === 0) {
- return i
- }
+ protected getWorkerTaskElu (workerNodeKey: number): number {
+ return this.taskStatisticsRequirements.elu.median
+ ? this.pool.workerNodes[workerNodeKey].usage.elu.active?.median ?? 0
+ : this.pool.workerNodes[workerNodeKey].usage.elu.active?.average ?? 0
+ }
+
+ protected computeDefaultWorkerWeight (): number {
+ let cpusCycleTimeWeight = 0
+ for (const cpu of cpus()) {
+ // 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)