pub struct ExecutorSizing {
pub cbs: usize,
pub sc: usize,
pub arena: usize,
pub nodes: usize,
pub params: usize,
}Expand description
Per-entry executor sizing — the entity counts an Executor
is built to hold. Public + non-generic (the “C/C++ is a thin wrapper”
principle): the entry / macro / FFI supplies these as plain usizes rather
than as type/const generics C can’t name. Used to size + carve the backing.
cbs is capped at 64 by the executor’s u64 ready-set bitmask (asserted in
carve-time / open_in).
Fields§
§cbs: usizeCallback-table slots (entries, the per-entry SC bindings, and the
per-callback-group sched table). ≤ 64.
sc: usizeScheduling-context slots (sched_contexts, the sporadic state tables
and alive supervision’s per-SC records).
arena: usizeBump-allocator arena size in bytes.
nodes: usizephase-409 — Node slots. One worst-case extra session, extra-session id,
node-sched binding, dispatch slot, component slot and callback-group
filter entry per Node, so ONE count covers all seven tables (that is the
upper bound each of them already assumed under MAX_NODES).
params: usizephase-382 W3’ — parameter-store slots carved from the backing.
The default is nros_params::IMPLIED_STORE_SLOTS: the store’s full
MAX_PARAMETERS when the build KNOWS the image builds one (the
contract declares a parameter, the bringup declares param_services,
or the launch seeds a <param>), and ZERO otherwise. Zero is not a
degraded mode: an executor that carved no store and is asked for one
allocates it from the heap exactly as before, with issue 1706’s named
refusal if the heap cannot hold it.
Conditional rather than fixed, and that is a decision measured in
phase-382’s W3’ notes: a fixed MAX_PARAMETERS region adds the whole
store (280,832 B on armv7m at the default 32 slots) to every image’s
backing — Rust EXECUTOR_BACKING, every C/C++ rclc_executor_t, every
tier slot — which is issue 1702’s rejected .bss static, everywhere.
Implementations§
Source§impl ExecutorSizing
impl ExecutorSizing
Sourcepub const DEFAULT: ExecutorSizing
pub const DEFAULT: ExecutorSizing
The build-time default (MAX_CBS/MAX_SC/ARENA_SIZE/MAX_NODES
consts) — the backward-compatible size the alloc convenience
constructors leak.
Sourcepub const fn u64_len(&self) -> usize
pub const fn u64_len(&self) -> usize
u64 words a backing must hold for this sizing (see
executor_storage_u64_len).
Sourcepub const fn assert_covers_model(&self, source: &'static str)
pub const fn assert_covers_model(&self, source: &'static str)
phase-412 #4 — refuse, at COMPILE time, a sizing whose arena is below what this image’s declared entities are modelled to need.
For a caller that supplies its own const sizing for the image’s ONE
executor (open_in over a static sized with u64_len),
so its arena is held to the same model the build-time default is:
const SIZING: nros::ExecutorSizing = nros::ExecutorSizing { .. };
const _: () = SIZING.assert_covers_model("SIZING.arena");Opt-in, deliberately: an executor that holds a SUBSET of the image (one
tier of a tiered boot) legitimately carries less than the whole model,
and only its author knows which kind it is. See
arena_oracle for the arms and why each is or is
not checked here.
Trait Implementations§
Source§impl Clone for ExecutorSizing
impl Clone for ExecutorSizing
Source§fn clone(&self) -> ExecutorSizing
fn clone(&self) -> ExecutorSizing
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more