pub struct HierarchicalDeficitRoundRobin<VmId, CapabilityId> { /* private fields */ }Expand description
Process-level VM rotation containing a second capability rotation per VM.
The scheduler is intentionally serial: callers select one bounded turn, perform no more than its allowance, then report actual use. This makes the selection order reproducible in tests and keeps requeueing atomic.
Implementations§
Source§impl<VmId, CapabilityId> HierarchicalDeficitRoundRobin<VmId, CapabilityId>
impl<VmId, CapabilityId> HierarchicalDeficitRoundRobin<VmId, CapabilityId>
pub fn new(config: FairnessConfig) -> Result<Self, FairnessError>
pub fn new_with_metrics( config: FairnessConfig, metrics: RuntimeMetrics, ) -> Result<Self, FairnessError>
pub fn config(&self) -> FairnessConfig
Sourcepub fn mark_ready(
&mut self,
vm_id: VmId,
capability_id: CapabilityId,
) -> Result<MembershipUpdate, FairnessError>
pub fn mark_ready( &mut self, vm_id: VmId, capability_id: CapabilityId, ) -> Result<MembershipUpdate, FairnessError>
Insert one ready membership edge. Repeated marks never add queue entries.
Sourcepub fn clear_ready(
&mut self,
vm_id: &VmId,
capability_id: &CapabilityId,
) -> bool
pub fn clear_ready( &mut self, vm_id: &VmId, capability_id: &CapabilityId, ) -> bool
Remove queued readiness without discarding retained, capped deficit.
Sourcepub fn select_next(
&mut self,
) -> Result<Option<FairSelection<VmId, CapabilityId>>, FairnessError>
pub fn select_next( &mut self, ) -> Result<Option<FairSelection<VmId, CapabilityId>>, FairnessError>
Choose the next VM and capability in activation order.
Sourcepub fn complete(
&mut self,
selection: &FairSelection<VmId, CapabilityId>,
used: FairBudget,
still_ready: bool,
) -> Result<(), FairnessError>
pub fn complete( &mut self, selection: &FairSelection<VmId, CapabilityId>, used: FairBudget, still_ready: bool, ) -> Result<(), FairnessError>
Charge actual work and atomically requeue a source that remains ready.
pub fn remove_capability( &mut self, vm_id: &VmId, capability_id: &CapabilityId, ) -> Result<bool, FairnessError>
Sourcepub fn clear_vm_ready(&mut self, vm_id: &VmId) -> bool
pub fn clear_vm_ready(&mut self, vm_id: &VmId) -> bool
Revoke every queued/rearmed turn for a VM without disturbing a turn already issued to native work. VM retirement uses this before attempting removal so no queued capability can run while issued work settles.