#[non_exhaustive]pub struct ProbeBssCounters {Show 15 fields
pub probe_count: u64,
pub kprobe_returns: u64,
pub meta_miss: u64,
pub ringbuf_drops: u64,
pub timeline_count: u64,
pub timeline_drops: u64,
pub pi_count: u64,
pub pi_orphan_fexits: u64,
pub pi_class_change_count: u64,
pub pi_drops: u64,
pub lock_contend_count: u64,
pub lock_contend_drops: u64,
pub preempt_disable_count: u64,
pub preempt_enable_count: u64,
pub trigger_count: u64,
}Expand description
Cross-CPU sum of every per-CPU diagnostic counter slot in the
probe BPF program’s .bss ktstr_pcpu_counters array.
The probe declares one fixed-shape per-CPU array
(pcpu_counter ktstr_pcpu_counters[MAX_CPUS][KTSTR_PCPU_NR] —
see src/bpf/probe.bpf.c); each tracepoint / kprobe handler
bumps a slot via ktstr_pcpu_inc(KTSTR_PCPU_<NAME>). The host
reader sums across the CPU axis to recover the cumulative count
each handler reports. Field names mirror the slot names from
enum ktstr_pcpu_idx so an operator can walk back from the
failure-dump field to the probe source by exact name.
All counters are monotonic-since-probe-attach. Zero values
indicate either “the corresponding tracepoint never fired” (the
common case for pi_* and lock_contend_* on tests that don’t
exercise PI / lock contention) or “the tracepoint never attached”
(e.g. preempt_* on a kernel without
CONFIG_TRACE_PREEMPT_TOGGLE); the counter alone cannot
distinguish those two cases — pair with the attach-state surface
in crate::probe::process::ProbeDiagnostics when the
distinction matters.
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.probe_count: u64KTSTR_PCPU_PROBE_COUNT summed across CPUs — total kprobe
fires past the ktstr_enabled gate.
kprobe_returns: u64KTSTR_PCPU_KPROBE_RETURNS summed across CPUs — kprobe fires
that committed an entry to probe_data (past func_meta_map
lookup and scratch-slot allocation).
meta_miss: u64KTSTR_PCPU_META_MISS summed across CPUs — kprobe fires
whose IP missed func_meta_map. probe_count - kprobe_returns is the total bail count; meta_miss is the
subset whose bail came from the func_meta_map lookup.
ringbuf_drops: u64KTSTR_PCPU_RINGBUF_DROPS summed across CPUs — failed
bpf_ringbuf_reserve calls inside the trigger handler.
timeline_count: u64KTSTR_PCPU_TIMELINE_COUNT summed across CPUs — successful
timeline-event submissions across the three timeline
tracepoints (sched_switch + sched_migrate_task + sched_wakeup).
timeline_drops: u64KTSTR_PCPU_TIMELINE_DROPS summed across CPUs — timeline
submissions that failed because the dedicated
timeline_events ringbuf was full at submit time.
pi_count: u64KTSTR_PCPU_PI_COUNT summed across CPUs — PI boost / unboost
records committed via fexit/rt_mutex_setprio.
pi_orphan_fexits: u64KTSTR_PCPU_PI_ORPHAN_FEXITS summed across CPUs — fexit
fires whose entry-side snapshot was never recorded (attach
race or pi_scratch overflow).
pi_class_change_count: u64KTSTR_PCPU_PI_CLASS_CHANGE_COUNT summed across CPUs —
PI events that observed a sched_class flip from fentry
to fexit (e.g. CFS → RT under a boost).
pi_drops: u64KTSTR_PCPU_PI_DROPS summed across CPUs — TL_EVT_PI_BOOST
submissions that failed because the timeline ringbuf was
full at the PI fexit handler.
lock_contend_count: u64KTSTR_PCPU_LOCK_CONTEND_COUNT summed across CPUs —
tp_btf/contention_begin fires that committed a
TL_EVT_LOCK_CONTEND timeline record.
lock_contend_drops: u64KTSTR_PCPU_LOCK_CONTEND_DROPS summed across CPUs —
TL_EVT_LOCK_CONTEND submissions that failed because the
timeline ringbuf was full.
preempt_disable_count: u64KTSTR_PCPU_PREEMPT_DISABLE_COUNT summed across CPUs —
tp_btf/preempt_disable outermost-transition fires.
preempt_enable_count: u64KTSTR_PCPU_PREEMPT_ENABLE_COUNT summed across CPUs —
tp_btf/preempt_enable outermost-transition fires.
trigger_count: u64KTSTR_PCPU_TRIGGER_COUNT summed across CPUs — every
tp_btf/sched_ext_exit fire (including non-error
kinds like DONE / UNREG, not just error-class exits).
Trait Implementations§
Source§impl Clone for ProbeBssCounters
impl Clone for ProbeBssCounters
Source§fn clone(&self) -> ProbeBssCounters
fn clone(&self) -> ProbeBssCounters
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ProbeBssCounters
impl Debug for ProbeBssCounters
Source§impl Default for ProbeBssCounters
impl Default for ProbeBssCounters
Source§fn default() -> ProbeBssCounters
fn default() -> ProbeBssCounters
Source§impl<'de> Deserialize<'de> for ProbeBssCounters
impl<'de> Deserialize<'de> for ProbeBssCounters
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 ProbeBssCounters
impl RefUnwindSafe for ProbeBssCounters
impl Send for ProbeBssCounters
impl Sync for ProbeBssCounters
impl Unpin for ProbeBssCounters
impl UnwindSafe for ProbeBssCounters
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