Table of Contents
Fetching ...

Work-in-Progress: Function-as-Subtask API Replacing Publish/Subscribe for OS-Native DAG Scheduling

Takahiro Ishikawa-Aso, Atsushi Yano, Yutaro Kobayashi, Takumi Jin, Yuuki Takano, Shinpei Kato

TL;DR

This work addresses enforcing DAG task semantics in component-based real-time systems like ROS 2, where the publish/subscribe model fails to strictly enforce precedence constraints. It introduces the Function-as-Subtask (FasS) API, which expresses each DAG subtask as a function whose inputs/outputs map directly to incoming/outgoing edges, enabling the OS to ensure completion boundaries and join synchronization at the API level. The authors implement a DAG-native scheduler in a Rust-based kernel and outline reference designs for Linux sched_ext, along with an evaluation showing improved join fidelity relative to ARR-based ROS 2 configurations. The approach promises more faithful DAG scheduling in real-time systems by reducing reliance on programmer discipline and aligning middleware interfaces with classic DAG scheduling theory.

Abstract

The Directed Acyclic Graph (DAG) task model for real-time scheduling finds its primary practical target in Robot Operating System 2 (ROS 2). However, ROS 2's publish/subscribe API leaves DAG precedence constraints unenforced: a callback may publish mid-execution, and multi-input callbacks let developers choose topic-matching policies. Thus preserving DAG semantics relies on conventions; once violated, the model collapses. We propose the Function-as-Subtask (FasS) API, which expresses each subtask as a function whose arguments/return values are the subtask's incoming/outgoing edges. By minimizing description freedom, DAG semantics is guaranteed at the API rather than by programmer discipline. We implement a DAG-native scheduler using FasS on a Rust-based experimental kernel and evaluate its semantic fidelity, and we outline design guidelines for applying FasS to Linux Linux sched_ext.

Work-in-Progress: Function-as-Subtask API Replacing Publish/Subscribe for OS-Native DAG Scheduling

TL;DR

This work addresses enforcing DAG task semantics in component-based real-time systems like ROS 2, where the publish/subscribe model fails to strictly enforce precedence constraints. It introduces the Function-as-Subtask (FasS) API, which expresses each DAG subtask as a function whose inputs/outputs map directly to incoming/outgoing edges, enabling the OS to ensure completion boundaries and join synchronization at the API level. The authors implement a DAG-native scheduler in a Rust-based kernel and outline reference designs for Linux sched_ext, along with an evaluation showing improved join fidelity relative to ARR-based ROS 2 configurations. The approach promises more faithful DAG scheduling in real-time systems by reducing reliance on programmer discipline and aligning middleware interfaces with classic DAG scheduling theory.

Abstract

The Directed Acyclic Graph (DAG) task model for real-time scheduling finds its primary practical target in Robot Operating System 2 (ROS 2). However, ROS 2's publish/subscribe API leaves DAG precedence constraints unenforced: a callback may publish mid-execution, and multi-input callbacks let developers choose topic-matching policies. Thus preserving DAG semantics relies on conventions; once violated, the model collapses. We propose the Function-as-Subtask (FasS) API, which expresses each subtask as a function whose arguments/return values are the subtask's incoming/outgoing edges. By minimizing description freedom, DAG semantics is guaranteed at the API rather than by programmer discipline. We implement a DAG-native scheduler using FasS on a Rust-based experimental kernel and evaluate its semantic fidelity, and we outline design guidelines for applying FasS to Linux Linux sched_ext.

Paper Structure

This paper contains 11 sections, 3 equations, 6 figures.

Figures (6)

  • Figure 1: Component-oriented real-time system (e.g., ROS 2).
  • Figure 2: Basic example of Function-as-Subtask API.
  • Figure 3: Function-as-Subtask API app. code example.
  • Figure 4: Function-as-Subtask API app. code example2.
  • Figure 5: Reference OS designs based on the FasS API.
  • ...and 1 more figures