pub struct Metrics {Show 51 fields
pub on_cpu: u64,
pub total_runtime: u64,
pub uptime_ns: u64,
pub q1_placements: u64,
pub q2_placements: u64,
pub q3_placements: u64,
pub promotions: u64,
pub demotions: u64,
pub aging_boosts: u64,
pub short_sleep_boosts: u64,
pub preemption_kicks: u64,
pub cpuperf_boosts: u64,
pub steals: u64,
pub steals_same_llc: u64,
pub steals_cross_llc: u64,
pub keep_running: u64,
pub enq_no_tctx: u64,
pub enq_bad_weight: u64,
pub enq_no_deadline: u64,
pub enq_fastpath: u64,
pub enq_regular: u64,
pub enq_pinned_idle: u64,
pub enq_pinned_busy: u64,
pub enq_pinned_global: u64,
pub tree_inference: u64,
pub tree_fallback: u64,
pub tree_disagree: u64,
pub tree_samples_emitted: u64,
pub tree_samples_dropped: u64,
pub rt_takeovers: u64,
pub rt_evacuations: u64,
pub rt_redirects: u64,
pub rt_reenqs: u64,
pub op_lat: Vec<u64>,
pub tree_samples_cap_dropped: u64,
pub tree_model_generation: u64,
pub tree_model_samples: u64,
pub tree_model_nodes: u64,
pub tree_mae_tree_us: u64,
pub tree_mae_ema_us: u64,
pub tree_corr_milli: i64,
pub sys_lat_ema_us: u64,
pub sys_rate_ema: u64,
pub t_l_eff_us: u64,
pub t_h_eff_us: u64,
pub t_int_eff_us: u64,
pub t_bnd_eff_us: u64,
pub guard_eff_us: u64,
pub adapt_shift: i64,
pub wakeup_total: u64,
pub adapt_steps: u64,
}Fields§
§on_cpu: u64Tasks currently executing on a CPU
total_runtime: u64Total CPU runtime in ns
uptime_ns: u64Scheduler uptime (wall clock since attach)
q1_placements: u64Tasks placed in Q1
q2_placements: u64Tasks placed in Q2
q3_placements: u64Tasks placed in Q3
promotions: u64Queue promotions
demotions: u64Queue demotions
aging_boosts: u64Aging boosts to Q1
short_sleep_boosts: u64Short-sleep and I/O wakeup boosts
preemption_kicks: u64Wakeup preemption kicks
cpuperf_boosts: u64Q1 cpuperf target boosts set on running
steals: u64Dispatch moves from remote queue DSQs
steals_same_llc: u64Dispatch moves from remote queue DSQs within the same LLC
steals_cross_llc: u64Dispatch moves from remote queue DSQs across LLC domains
keep_running: u64Solo-task keep-running grants on empty dispatch
enq_no_tctx: u64Enqueues dropped when task state cannot be allocated
enq_bad_weight: u64Enqueues dropped for bad weight
enq_no_deadline: u64Enqueues dropped for missing placement
enq_fastpath: u64Fast-path enqueues
enq_regular: u64Regular-path enqueues
enq_pinned_idle: u64Pinned enqueues to idle CPUs
enq_pinned_busy: u64Pinned enqueues to busy CPUs
enq_pinned_global: u64Pinned enqueues to the global DSQ
tree_inference: u64MLFQ tree inference walks run
tree_fallback: u64Classifications served by the EMA fallback while untrained
tree_disagree: u64Tree queue mappings that disagree with the base EMA mapping
tree_samples_emitted: u64Training samples emitted to the daemon
tree_samples_dropped: u64Training samples dropped (ring buffer full)
rt_takeovers: u64Realtime/DL/stop takeovers of SCX CPUs observed by the sched_switch hook
rt_evacuations: u64DSQ evacuation passes that ran on realtime takeovers
rt_redirects: u64Placements redirected off realtime-occupied CPUs
rt_reenqs: u64SCX_ENQ_REENQ re-enqueues counted at enqueue
op_lat: Vec<u64>Per-op callback latency histogram, 4 ops x 8 buckets in microseconds (stopping, dispatch, enqueue, cpu_release)
tree_samples_cap_dropped: u64Training samples dropped by the per-pid window cap
tree_model_generation: u64Committed tree model generation, 0 while untrained
tree_model_samples: u64Training samples behind the committed tree model
tree_model_nodes: u64Nodes of the committed tree model
tree_mae_tree_us: u64Committed tree MAE in microseconds on the held-out slice of its training window
tree_mae_ema_us: u64Exact EMA-baseline MAE in microseconds on the same held-out slice
tree_corr_milli: i64§sys_lat_ema_us: u64System wakeup-latency gauge (1s half-life EMA), microseconds
sys_rate_ema: u64System wakeup-rate gauge (1s half-life EMA), fixed point; >> 8 = wakeups/s
t_l_eff_us: u64Effective EMA Q1/Q2 band edge, microseconds
t_h_eff_us: u64Effective EMA Q2/Q3 band edge, microseconds
t_int_eff_us: u64Effective tree Q1/Q2 band edge, microseconds
t_bnd_eff_us: u64Effective tree Q2/Q3 band edge, microseconds
guard_eff_us: u64Effective same-queue preemption residency guard, microseconds
adapt_shift: i64Adaptation shift, fixed point (FP_ONE = 1.0)
wakeup_total: u64Wakeup arrivals (interval delta)
adapt_steps: u64Adaptation steps run (interval delta)
Implementations§
Trait Implementations§
Source§impl<'de> Deserialize<'de> for Metrics
impl<'de> Deserialize<'de> for Metrics
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for Metrics
impl RefUnwindSafe for Metrics
impl Send for Metrics
impl Sync for Metrics
impl Unpin for Metrics
impl UnsafeUnpin for Metrics
impl UnwindSafe for Metrics
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> Conv for T
impl<T> Conv for T
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
§impl<T> NoneValue for Twhere
T: Default,
impl<T> NoneValue for Twhere
T: Default,
type NoneType = T
§fn null_value() -> T
fn null_value() -> T
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.