pub struct SchedulerKnobs {
pub config: SchedulerConfig,
pub seed: u64,
}Expand description
The knobs that parameterize the emitted deterministic scheduler. This is the SAME
SchedulerConfig the oracle runtime (logicaffeine_runtime) runs — the ready-queue policy
(FIFO / LIFO / round-robin / seeded-random / priority), the clock (virtual Logical vs Wall),
the default channel capacity, and the M:N workers count (1 = cooperative single core, N =
work-stealing) — plus the seed that drives the seeded chooser for the random-choice points
(TaskPick under Random, SelectWinner, TimerTieBreak). Emitting C straight from a
SchedulerConfig guarantees the AOT scheduler’s knobs are ONE-TO-ONE with the oracle’s, so a
program run at knobs on the VM and the same knobs in AOT-C agree.
The DEFAULT — Fifo / workers = 1 / Logical / seed = 0 — is the exact point every
determinism lock pins against run_vm_concurrent (which uses SchedulerConfig::default()), and is
the fixed policy the hand-written scheduler already implements (child-first spawn, FIFO ready queue,
earliest-timer-first virtual clock).
Fields§
§config: SchedulerConfigThe oracle-shared scheduler config: policy / clock / default_channel_capacity /
preempt_every / workers.
seed: u64Seed for the emitted SplitMix64 chooser (mirrors logicaffeine_runtime::seed::SeededRng). Only
observable under SchedulePolicy::Random or on a genuine multi-ready Select / timer tie.
Implementations§
Source§impl SchedulerKnobs
impl SchedulerKnobs
Sourcepub fn emit_defines(&self) -> String
pub fn emit_defines(&self) -> String
The C #define block the emitted scheduler reads for its knobs. Prepended to the stepped tier’s C.
The policy / clock enums match the emitted scheduler’s LOGOS_SCHED_* / LOGOS_CLOCK_* constants
one-to-one; logos_ready_pop branches on LOGOS_SCHED_POLICY, the timer/select tie-breaks draw
from a SplitMix64 seeded by LOGOS_SCHED_SEED, and channels default to LOGOS_CHAN_DEFAULT_CAP.
Trait Implementations§
Source§impl Clone for SchedulerKnobs
impl Clone for SchedulerKnobs
Source§fn clone(&self) -> SchedulerKnobs
fn clone(&self) -> SchedulerKnobs
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for SchedulerKnobs
impl Debug for SchedulerKnobs
Source§impl Default for SchedulerKnobs
impl Default for SchedulerKnobs
Source§impl PartialEq for SchedulerKnobs
impl PartialEq for SchedulerKnobs
impl Copy for SchedulerKnobs
impl Eq for SchedulerKnobs
impl StructuralPartialEq for SchedulerKnobs
Auto Trait Implementations§
impl Freeze for SchedulerKnobs
impl RefUnwindSafe for SchedulerKnobs
impl Send for SchedulerKnobs
impl Sync for SchedulerKnobs
impl Unpin for SchedulerKnobs
impl UnsafeUnpin for SchedulerKnobs
impl UnwindSafe for SchedulerKnobs
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.