X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fpools%2Fselection-strategies%2Ffair-share-worker-choice-strategy.ts;h=88e12b94fa8ef50b50ede22026e95f0242000d45;hb=884743b122a66be45c94d83d9230e28a9ab43836;hp=58982f192ee457865e46115203b9509bdc24e29d;hpb=39618ede0e08d380c1ac82005bcc2ab1f3c227b6;p=poolifier.git diff --git a/src/pools/selection-strategies/fair-share-worker-choice-strategy.ts b/src/pools/selection-strategies/fair-share-worker-choice-strategy.ts index 58982f19..88e12b94 100644 --- a/src/pools/selection-strategies/fair-share-worker-choice-strategy.ts +++ b/src/pools/selection-strategies/fair-share-worker-choice-strategy.ts @@ -1,4 +1,3 @@ -import { DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS } from '../../utils.js' import type { IPool } from '../pool.js' import type { IWorker } from '../worker.js' import { AbstractWorkerChoiceStrategy } from './abstract-worker-choice-strategy.js' @@ -6,13 +5,12 @@ import { type IWorkerChoiceStrategy, Measurements, type TaskStatisticsRequirements, - type WorkerChoiceStrategyOptions + type WorkerChoiceStrategyOptions, } from './selection-strategies-types.js' /** * Selects the next worker with a fair share scheduling algorithm. * Loosely modeled after the fair queueing algorithm: https://en.wikipedia.org/wiki/Fair_queuing. - * * @typeParam Worker - Type of worker which manages the strategy. * @typeParam Data - Type of data sent to the worker. This can only be structured-cloneable data. * @typeParam Response - Type of execution response. This can only be structured-cloneable data. @@ -29,14 +27,18 @@ export class FairShareWorkerChoiceStrategy< runTime: { aggregate: true, average: true, - median: false + median: false, + }, + waitTime: { + aggregate: true, + average: true, + median: false, }, - waitTime: DEFAULT_MEASUREMENT_STATISTICS_REQUIREMENTS, elu: { aggregate: true, average: true, - median: false - } + median: false, + }, } /** @inheritDoc */ @@ -60,7 +62,7 @@ export class FairShareWorkerChoiceStrategy< public update (workerNodeKey: number): boolean { this.pool.workerNodes[workerNodeKey].strategyData = { virtualTaskEndTimestamp: - this.computeWorkerNodeVirtualTaskEndTimestamp(workerNodeKey) + this.computeWorkerNodeVirtualTaskEndTimestamp(workerNodeKey), } return true } @@ -83,7 +85,7 @@ export class FairShareWorkerChoiceStrategy< if (workerNode.strategyData?.virtualTaskEndTimestamp == null) { workerNode.strategyData = { virtualTaskEndTimestamp: - this.computeWorkerNodeVirtualTaskEndTimestamp(workerNodeKey) + this.computeWorkerNodeVirtualTaskEndTimestamp(workerNodeKey), } } return this.isWorkerNodeReady(workerNodeKey) && @@ -100,7 +102,6 @@ export class FairShareWorkerChoiceStrategy< /** * Computes the worker node key virtual task end timestamp. - * * @param workerNodeKey - The worker node key. * @returns The worker node key virtual task end timestamp. */ @@ -117,12 +118,13 @@ export class FairShareWorkerChoiceStrategy< workerNodeKey: number, workerNodeVirtualTaskStartTimestamp: number ): number { - const workerNodeTaskRunTime = + const workerNodeTaskExecutionTime = + this.getWorkerNodeTaskWaitTime(workerNodeKey) + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - this.opts!.measurement === Measurements.elu + (this.opts!.measurement === Measurements.elu ? this.getWorkerNodeTaskElu(workerNodeKey) - : this.getWorkerNodeTaskRunTime(workerNodeKey) - return workerNodeVirtualTaskStartTimestamp + workerNodeTaskRunTime + : this.getWorkerNodeTaskRunTime(workerNodeKey)) + return workerNodeVirtualTaskStartTimestamp + workerNodeTaskExecutionTime } private getWorkerNodeVirtualTaskStartTimestamp ( @@ -132,7 +134,7 @@ export class FairShareWorkerChoiceStrategy< this.pool.workerNodes[workerNodeKey]?.strategyData ?.virtualTaskEndTimestamp const now = performance.now() - return now < (virtualTaskEndTimestamp ?? -Infinity) + return now < (virtualTaskEndTimestamp ?? Number.NEGATIVE_INFINITY) ? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion virtualTaskEndTimestamp! : now