#[non_exhaustive]pub struct RqScxState {
pub cpu: u32,
pub nr_running: u32,
pub flags: u32,
pub cpu_released: bool,
pub ops_qseq: u64,
pub kick_sync: Option<u64>,
pub nr_immed: Option<u32>,
pub rq_clock: Option<u64>,
pub curr_pid: Option<i32>,
pub curr_comm: Option<String>,
pub runnable_task_kvas: Vec<u64>,
pub runnable_truncated: bool,
}Expand description
Snapshot of one CPU’s struct rq.scx state at freeze time.
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.cpu: u32CPU index (0-based) this state describes.
nr_running: u32rq->scx.nr_running.
flags: u32rq->scx.flags.
cpu_released: boolrq->scx.cpu_released — true when the kernel released
the CPU back to the BPF scheduler (see scx_pre_release_cpu
in kernel/sched/ext.c).
ops_qseq: u64rq->scx.ops_qseq.
kick_sync: Option<u64>rq->scx.kick_sync — the per-rq pick-next sequence counter.
Version-renamed in the kernel: named pnt_seq on v6.12–v6.18
and kick_sync on v6.19+. ScxRqOffsets::from_btf resolves
the offset via a kick_sync-then-pnt_seq fallback, so this
is Some (captured) across the supported range. None only when
neither name resolves (stripped BTF / sched_ext not built in).
Skipped on serde when None so those dumps stay tight.
nr_immed: Option<u32>rq->scx.nr_immed — count of ENQ_IMMED tasks on local_dsq.
A feature-branch (for-7.1) field, absent on every release
tag in the supported range (v6.12 → v7.0-rc5); the offset
resolves None there and the JSON elides the field. Distinct
provenance from Self::kick_sync, which is present across
the range via its pnt_seq fallback.
rq_clock: Option<u64>rq->scx.clock — per-CPU scx_rq clock (the value
scx_bpf_now() returns) at the freeze instant. Optional
because the field was added by the scx_bpf_now() series in
v6.14 (commit 3a9910b5904d); v6.12 and v6.13 release kernels
have no equivalent member on struct scx_rq. None when the
BTF lookup of rq->scx.clock resolves absent — consumers
that need the value gate on Some.
curr_pid: Option<i32>rq->curr->pid — the currently-running task. None when
the curr pointer didn’t translate (idle or torn read).
curr_comm: Option<String>rq->curr->comm. Mirrors curr_pid.
runnable_task_kvas: Vec<u64>task_struct KVAs of every entry walked off
rq->scx.runnable_list. The freeze coordinator passes this
vec into the per-task enrichment capture so the same
task list drives both rq->scx state AND per-task records.
runnable_truncated: boolTrue when the runnable_list walk hit the
MAX_NODES_PER_LIST safety cap before reaching the head
— typical only on a corrupted chain.
Trait Implementations§
Source§impl Clone for RqScxState
impl Clone for RqScxState
Source§fn clone(&self) -> RqScxState
fn clone(&self) -> RqScxState
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for RqScxState
impl Debug for RqScxState
Source§impl Default for RqScxState
impl Default for RqScxState
Source§fn default() -> RqScxState
fn default() -> RqScxState
Source§impl<'de> Deserialize<'de> for RqScxState
impl<'de> Deserialize<'de> for RqScxState
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 RqScxState
impl RefUnwindSafe for RqScxState
impl Send for RqScxState
impl Sync for RqScxState
impl Unpin for RqScxState
impl UnwindSafe for RqScxState
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> 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>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more