Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Scheduling Wiring Matrix

Which scheduling capabilities nano-ros delivers per platform, and which portable executor classes are live in dispatch — derived from the two artifacts the runtime executes, not from prose. The per-platform rows are parsed from sched_caps_for() (nros-orchestration-ir), the exact function the workload realizer calls to decide Native-vs-Degrade for a deployment; its rule, quoted from the source: caps describe what nano-ros DELIVERS, not what the OS could do (issue 0261).

Kernel capabilities per platform

PlatformKernel EDFReservation / sporadic serverPreemption thresholdSMP affinityPriority levelsLow number = high priority
Linux host99
Zephyr32
FreeRTOS16
ThreadX32
NuttX255
Bare-metal (RTIC / NVIC)8

Notes carried from the source arms: the Linux row is deliberately conservative — no SCHED_DEADLINE consumer exists, so edf is false even though Linux could; its affinity is sched_setaffinity, which is Linux and not POSIX (absent from libc’s apple module), so the row’s reach is linux while the platform layer beneath it stays posix; Zephyr’s EDF is CONFIG_SCHED_DEADLINE; NuttX’s reservation is POSIX SCHED_SPORADIC; ThreadX’s preemption threshold is native; the bare-metal row is NVIC hardware priorities with SRP ceilings (RTIC), single core. These are PLATFORM DEFAULTS and there is no per-image override today: [deploy.<board>] edf = <bool> / cores = <n> was documented here but never authorable — the knob read an extras bag no table wrote, and upstream’s deny_unknown_fields rejected the keys outright. Retired with issue 0951; issue 0259 wants the override to exist and needs an authoring path first.

Portable executor classes (SchedClass)

These run inside the executor on every platform — they need no kernel support, which is what makes them portable; where the kernel HAS the native capability (table above), the realizer places the workload natively instead. “Dispatch sites” counts SchedClass::<X> references in the executor’s spin path — a class with zero sites is a type, not a behavior.

ClassDispatch sites in spin.rsStatus
Fifo2Live — the default class; bucketed FIFO ready-set.
Edf1Live — earliest-deadline-first ready-set ordering.
Sporadic5Live — budget/period enforcement in dispatch.
TimeTriggered1Accepted but deprecated in favour of cooperating TT-with-other-classes (see the enum’s deprecation note); dispatches as Fifo.