pub struct LayerStats {Show 56 fields
pub index: usize,
pub util: f64,
pub util_protected_frac: f64,
pub util_protected_preempt_frac: f64,
pub util_open_frac: f64,
pub util_frac: f64,
pub tasks: u32,
pub total: u64,
pub sel_local: f64,
pub enq_local: f64,
pub enq_wakeup: f64,
pub enq_expire: f64,
pub enq_reenq: f64,
pub enq_dsq: f64,
pub min_exec: f64,
pub min_exec_us: u64,
pub open_idle: f64,
pub preempt: f64,
pub preempt_xllc: f64,
pub preempt_xnuma: f64,
pub preempt_first: f64,
pub preempt_idle: f64,
pub preempt_fail: f64,
pub affn_viol: f64,
pub keep: f64,
pub keep_fail_max_exec: f64,
pub keep_fail_busy: f64,
pub is_excl: u32,
pub excl_collision: f64,
pub excl_preempt: f64,
pub yielded: f64,
pub yield_ignore: u64,
pub migration: f64,
pub xnuma_migration: f64,
pub xllc_migration: f64,
pub xllc_migration_skip: f64,
pub xlayer_wake: f64,
pub xlayer_rewake: f64,
pub llc_drain_try: f64,
pub llc_drain: f64,
pub skip_remote_node: f64,
pub cpus: Vec<u64>,
pub cur_nr_cpus: u32,
pub min_nr_cpus: u32,
pub max_nr_cpus: u32,
pub nr_llc_cpus: Vec<u32>,
pub slice_us: u64,
pub llc_fracs: Vec<f64>,
pub llc_lats: Vec<f64>,
pub membw_pct: f64,
pub dsq_insert_ewma: f64,
pub node_utils: Vec<f64>,
pub node_pinned_utils: Vec<f64>,
pub node_pinned_tasks: Vec<u64>,
pub node_loads: Vec<f64>,
pub xnuma_active: u32,
}Fields§
§index: usizeindex
util: f64Total CPU utilization (100% means one full CPU)
util_protected_frac: f64Protected CPU utilization %
util_protected_preempt_frac: f64Preempt-protected CPU utilization %
util_open_frac: f64Open CPU utilization %
util_frac: f64fraction of total CPU utilization
tasks: u32number of tasks
total: u64count of sched events during the period
sel_local: f64% dispatched into idle CPU from select_cpu
enq_local: f64% dispatched into idle CPU from enqueue
enq_wakeup: f64% enqueued after wakeup
enq_expire: f64% enqueued after slice expiration
enq_reenq: f64% re-enqueued due to RT preemption
enq_dsq: f64% enqueued into the layer’s LLC DSQs
min_exec: f64count of times exec duration < min_exec_us
min_exec_us: u64total exec durations extended due to min_exec_us
open_idle: f64% dispatched into idle CPUs occupied by other layers
preempt: f64% preempted other tasks
preempt_xllc: f64% preempted XLLC tasks
preempt_xnuma: f64% preempted across NUMA nodes
preempt_first: f64% first-preempted other tasks
preempt_idle: f64% idle-preempted other tasks
preempt_fail: f64% attempted to preempt other tasks but failed
affn_viol: f64% violated config due to CPU affinity
keep: f64% continued executing after slice expiration
keep_fail_max_exec: f64% disallowed to continue executing due to max_exec
keep_fail_busy: f64% disallowed to continue executing due to other tasks
is_excl: u32whether is exclusive
excl_collision: f64count of times an excl task skipped a CPU as the sibling was also excl
excl_preempt: f64% a sibling CPU was preempted for an exclusive task
yielded: f64% yielded
yield_ignore: u64count of times yield was ignored
migration: f64% migrated across CPUs
xnuma_migration: f64% migrated across NUMA nodes
xllc_migration: f64% migrated across LLCs
xllc_migration_skip: f64% migration skipped across LLCs due to xllc_mig_min_us
xlayer_wake: f64% wakers across layers
xlayer_rewake: f64% rewakers across layers where waker has waken the task previously
llc_drain_try: f64% LLC draining tried
llc_drain: f64% LLC draining succeeded
skip_remote_node: f64% skip LLC dispatch on remote node
cpus: Vec<u64>mask of allocated CPUs
cur_nr_cpus: u32count of CPUs assigned
min_nr_cpus: u32minimum # of CPUs assigned
max_nr_cpus: u32maximum # of CPUs assigned
nr_llc_cpus: Vec<u32>count of CPUs assigned per LLC
slice_us: u64slice duration config
llc_fracs: Vec<f64>Per-LLC scheduling event fractions
llc_lats: Vec<f64>Per-LLC average latency
membw_pct: f64Layer memory bandwidth as a % of total allowed (0 for “no limit”
dsq_insert_ewma: f64DSQ insertion ratio EWMA (10s window)
node_utils: Vec<f64>Per-node layer utilization (100% = one full CPU)
node_pinned_utils: Vec<f64>Per-node pinned task utilization (100% = one full CPU)
node_pinned_tasks: Vec<u64>Per-node pinned task counts
node_loads: Vec<f64>Per-node load (100% = one full CPU, from duty cycle sum)
xnuma_active: u32Whether xnuma gating is active for this layer (0/1)
Implementations§
Trait Implementations§
Source§impl Clone for LayerStats
impl Clone for LayerStats
Source§fn clone(&self) -> LayerStats
fn clone(&self) -> LayerStats
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for LayerStats
impl Debug for LayerStats
Source§impl Default for LayerStats
impl Default for LayerStats
Source§fn default() -> LayerStats
fn default() -> LayerStats
Source§impl<'de> Deserialize<'de> for LayerStats
impl<'de> Deserialize<'de> for LayerStats
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 LayerStats
impl RefUnwindSafe for LayerStats
impl Send for LayerStats
impl Sync for LayerStats
impl Unpin for LayerStats
impl UnsafeUnpin for LayerStats
impl UnwindSafe for LayerStats
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> 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>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> 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.