forked from lix-project/hydra
queue runner: attempt at slightly smarter scheduling criteria
Instead of just going for "whatever is the oldest build we know of", use the following first: - Is the step more constrained? If so, schedule it first to avoid filling up "more desirable" build slots with less constrained builds. - Does the step have more dependents? If so, schedule it first to try and maximize open parallelism and breadth of scheduling options.
This commit is contained in:
parent
ee1a7a7813
commit
b8d03adaf4
|
@ -133,6 +133,8 @@ system_time State::doDispatch()
|
||||||
comparator is a partial ordering (see MachineInfo). */
|
comparator is a partial ordering (see MachineInfo). */
|
||||||
int highestGlobalPriority;
|
int highestGlobalPriority;
|
||||||
int highestLocalPriority;
|
int highestLocalPriority;
|
||||||
|
size_t numRequiredSystemFeatures;
|
||||||
|
size_t numRevDeps;
|
||||||
BuildID lowestBuildID;
|
BuildID lowestBuildID;
|
||||||
|
|
||||||
StepInfo(Step::ptr step, Step::State & step_) : step(step)
|
StepInfo(Step::ptr step, Step::State & step_) : step(step)
|
||||||
|
@ -141,6 +143,8 @@ system_time State::doDispatch()
|
||||||
lowestShareUsed = std::min(lowestShareUsed, jobset->shareUsed());
|
lowestShareUsed = std::min(lowestShareUsed, jobset->shareUsed());
|
||||||
highestGlobalPriority = step_.highestGlobalPriority;
|
highestGlobalPriority = step_.highestGlobalPriority;
|
||||||
highestLocalPriority = step_.highestLocalPriority;
|
highestLocalPriority = step_.highestLocalPriority;
|
||||||
|
numRequiredSystemFeatures = step->requiredSystemFeatures.size();
|
||||||
|
numRevDeps = step_.rdeps.size();
|
||||||
lowestBuildID = step_.lowestBuildID;
|
lowestBuildID = step_.lowestBuildID;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -193,6 +197,8 @@ system_time State::doDispatch()
|
||||||
a.highestGlobalPriority != b.highestGlobalPriority ? a.highestGlobalPriority > b.highestGlobalPriority :
|
a.highestGlobalPriority != b.highestGlobalPriority ? a.highestGlobalPriority > b.highestGlobalPriority :
|
||||||
a.lowestShareUsed != b.lowestShareUsed ? a.lowestShareUsed < b.lowestShareUsed :
|
a.lowestShareUsed != b.lowestShareUsed ? a.lowestShareUsed < b.lowestShareUsed :
|
||||||
a.highestLocalPriority != b.highestLocalPriority ? a.highestLocalPriority > b.highestLocalPriority :
|
a.highestLocalPriority != b.highestLocalPriority ? a.highestLocalPriority > b.highestLocalPriority :
|
||||||
|
a.numRequiredSystemFeatures != b.numRequiredSystemFeatures ? a.numRequiredSystemFeatures > b.numRequiredSystemFeatures :
|
||||||
|
a.numRevDeps != b.numRevDeps ? a.numRevDeps > b.numRevDeps :
|
||||||
a.lowestBuildID < b.lowestBuildID;
|
a.lowestBuildID < b.lowestBuildID;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue