DegradedFailureDumpReport

Struct DegradedFailureDumpReport 

Source
#[non_exhaustive]
pub struct DegradedFailureDumpReport { pub schema: String, pub reason: String, pub vcpu_regs: Vec<Option<VcpuRegSnapshot>>, pub watchpoint_hit: bool, pub bss_latch_state: String, pub exit_kind: Option<u32>, pub elapsed_ms: u64, }
Expand description

Top-level degraded failure-dump report. Emitted by the freeze coordinator when a real error-class trigger fires but the dump path aborts before a full FailureDumpReport can be captured — today only the vCPU rendezvous-timeout path produces this shape.

Carries the partial state the coordinator did collect (per-vCPU registers from any vCPU that parked before timeout) plus the observable trigger state at the moment of degradation (watchpoint hit, BPF .bss latch status, live exit_kind if the gate read it). An operator inspecting the JSON learns WHY the dump degraded from the reason field and WHICH vCPUs stalled from the vcpu_regs Vec’s per-slot None / Some pattern.

Schema discriminant: SCHEMA_DEGRADED. Parsed via the same FailureDumpReportAny::from_json dispatcher as the other two variants.

Fields (Non-exhaustive)§

This struct is marked as non-exhaustive
Non-exhaustive structs could have additional fields added in future. Therefore, non-exhaustive structs cannot be constructed in external crates using the traditional Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.
§schema: String

Wire-format discriminant. Always "degraded" for this variant, pinning SCHEMA_DEGRADED. Mirror of FailureDumpReport::schema / DualFailureDumpReport::schema — consumers branch on it before deserializing.

§reason: String

Operator-readable reason the dump degraded. Carries one of the REASON_DEGRADED_* constants as the canonical prefix, followed by dynamic detail filled in at emit time (e.g. timeout milliseconds, parked-vCPU counts). Stable wire format per the SCHEMA_DEGRADED discriminant contract: new degraded causes add new REASON_DEGRADED_* constants rather than mutating the existing ones.

§vcpu_regs: Vec<Option<VcpuRegSnapshot>>

Per-vCPU register snapshots collected before degradation. Index matches vCPU id (BSP at 0, APs at 1..N). None entries identify the vCPUs that never parked (the operator’s signal for which vCPUs stalled) — distinct from FailureDumpReport::vcpu_regs’s None, which usually means KVM_GET_REGS failed mid-shutdown.

§watchpoint_hit: bool

Hardware-watchpoint hit state at degradation. true when the freeze-coordinator’s *scx_root->exit_kind watchpoint fired on a vCPU thread; false when only the BPF .bss latch fired (or the trigger source was a deferred-capture request).

§bss_latch_state: String

BPF probe .bss latch state at degradation. One of "triggered" (probe latched err exit), "not_triggered" (latch readable, value still 0), "out_of_bounds" (cached .bss PA no longer 4-byte-readable — probe map freed mid-run), or "not_resolved" (cached .bss PA was never populated). Mirror of crate::vmm::freeze_coord’s internal BssReadState enum, serialised as the snake-case of each variant. String-typed for wire-format stability with the rest of the REASON_* / state-name surface — see SCHEMA_DEGRADED for the contract.

§exit_kind: Option<u32>

Live *scx_root->exit_kind value at degradation, when the gate read it. None when the dump path aborted before reaching the gate (rendezvous timed out earlier) or when the KVA translation failed. Some(kind) carries the raw u32 from enum scx_exit_kind — operators read it against the kernel’s scx_exit_kind enum definition to identify whether the scheduler’s intended exit class matched the trigger that fired.

§elapsed_ms: u64

Wall-clock milliseconds from the freeze trigger (capture start) to the degraded-emit decision. Lets an operator see how long the coordinator spent trying to capture before giving up. Mirrors the elapsed_ms field FailureDumpReport surfaces via the post-dump log line — here it’s structured so consumers can read it without parsing the log.

Trait Implementations§

Source§

impl Clone for DegradedFailureDumpReport

Source§

fn clone(&self) -> DegradedFailureDumpReport

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DegradedFailureDumpReport

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for DegradedFailureDumpReport

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Display for DegradedFailureDumpReport

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Renders the degraded report as a short operator-oriented banner: schema label, the human reason, the per-vCPU parked / not_parked pattern that identifies which vCPUs stalled, the watchpoint + bss latch state, the optional live exit_kind, and the elapsed-ms budget the coordinator spent before giving up. Designed to fit a single terminal scroll without paging — the full diagnostic surface lives in the structured fields.

Source§

impl Serialize for DegradedFailureDumpReport

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

§

impl<T> MaybeSend for T
where T: Send,

§

impl<T> MaybeSend for T
where T: Send,