From 600b87db24c301b7a91c12b894548828d9492801 Mon Sep 17 00:00:00 2001 From: atsushi421 Date: Sun, 15 Feb 2026 15:40:48 +0900 Subject: [PATCH 1/4] docs: add comparison table of real-time executors --- docs/comparison_with_other_executors.md | 101 ++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 docs/comparison_with_other_executors.md diff --git a/docs/comparison_with_other_executors.md b/docs/comparison_with_other_executors.md new file mode 100644 index 0000000..be4c83c --- /dev/null +++ b/docs/comparison_with_other_executors.md @@ -0,0 +1,101 @@ +# Comparison of Real-Time Performance with Other ROS 2 Executors + +This document compares the real-time performance of the ROS 2 Default Executor and Executors proposed in academic literature from the following perspectives: + +**Immediate Enqueue of Ready Callbacks** + +In the ROS 2 Default Executor, a callback instance that becomes ready is enqueued only when the queue becomes empty. If the callback is enqueued immediately at the moment it becomes ready, ✔ is marked. + +**Per-Callback Priority Assignment** + +The ROS 2 Default Executor does not provide an API to assign priorities on a per-callback basis. If an Executor provides such an API, or allows users to assign priorities per callback through another mechanism, ✔ is marked. + +**Non-Nested Scheduling** + +In many Executors, the Executor maintains its own scheduling layer (e.g., a ready queue with priority ordering), and the OS independently schedules the threads that run callbacks. This two-level structure is referred to as nested scheduling. +If the Executor's scheduling and the OS scheduling do not form such a nested structure, ✔ is marked. + +**Fully Preemptive** + +If a lower-priority callback can be preempted by any higher-priority callback during execution, ✔ is marked. + +**Support for Reentrant Callbacks** + +If, when a callback becomes ready while it is executing, it can be properly enqueued and executed, ✔ is marked. + +**ROS 2 Mainline** + +If the Executor has been merged into the ROS 2 mainline, or can be introduced without modifying the ROS 2 implementation, ✔ is marked. + +--- + +## Comparison Table + +| Executor | Immediate Enqueue | Per-Callback Priority | Non-Nested Scheduling | Fully Preemptive | Support for Reentrant Callbacks | ROS 2 Mainline | +| ---------------------------------------------- | :---------------: | :-------------------: | :-------------------: | :--------------: | :-----------------------------: | :------------: | +| SingleThreadedExecutor / MultiThreadedExecutor | | | | | | ✔ | +| EventExecutor | ✔ | | | | ✔ | ✔ | +| PiCAS Single [1] | | ✔ | | | | | +| PiCAS Multi [2] | ✔*1 | ✔ | | | | | +| Dynamic-Priority-based Executor [3,4] | ✔*1 | ✔ | | | | | +| Extended EventExecutor [5] | ✔ | ✔ | | | ✔ | | +| RTeX [6] | ✔ | ✔ | | | ✔ | | +| Budget-based Real-Time Executor [7] | ✔*1 | ✔ | ✔ | ✔ | | | +| Preemptive EDF Executor [8] | ✔*1 | ✔ | ✔ | ✔ | | | +| Ros-RT [9] | ✔ | ✔ | ✔ | ✔ | ✔ | | +| CallbackIsolatedExecutor [10] | ✔*1 | ✔ | ✔ | ✔ | ✔ | ✔ | + +***1**: The ready queue is updated each time a thread selects a callback to execute. + +--- + +# References + +1. H. Choi, Y. Xiang and H. Kim, + “PiCAS: New Design of Priority-Driven Chain-Aware Scheduling for ROS2,” + *2021 IEEE 27th Real-Time and Embedded Technology and Applications Symposium (RTAS)*, Nashville, TN, USA, 2021, pp. 251–263. + doi: 10.1109/RTAS52030.2021.00028 + +2. H. Sobhani, H. Choi and H. Kim, + “Timing Analysis and Priority-driven Enhancements of ROS 2 Multi-threaded Executors,” + *2023 IEEE 29th RTAS*, San Antonio, TX, USA, 2023, pp. 106–118. + doi: 10.1109/RTAS58335.2023.00016 + +3. A. Al Arafat et al., + “Response time analysis for dynamic priority scheduling in ROS2,” + *DAC ’22*, ACM, 2022, pp. 301–306. + doi: 10.1145/3489517.3530447 + +4. A. Al Arafat et al., + “Dynamic Priority Scheduling of Multithreaded ROS 2 Executor With Shared Resources,” + *IEEE Transactions on CAD*, vol. 43, no. 11, pp. 3732–3743, Nov. 2024. + doi: 10.1109/TCAD.2024.3445259 + +5. H. Teper et al., + “Reconciling ROS 2 with Classical Real-Time Scheduling of Periodic Tasks,” + *2025 IEEE 31st RTAS*, Irvine, CA, USA, 2025, pp. 177–189. + doi: 10.1109/RTAS65571.2025.00027 + +6. S. Liu et al., + “RTeX: An Efficient and Timing-Predictable Multithreaded Executor for ROS 2,” + *IEEE Transactions on CAD*, vol. 43, no. 9, pp. 2578–2591, Sept. 2024. + doi: 10.1109/TCAD.2024.3380551 + +7. J. Staschulat et al., + “Budget-based real-time Executor for Micro-ROS,” + arXiv:2105.05590, 2021. + +8. K. Wilson et al., + “Physics-Informed Mixed-Criticality Scheduling for F1Tenth Cars with Preemptable ROS 2 Executors,” + *2025 IEEE 31st RTAS*, Irvine, CA, USA, 2025, pp. 215–227. + doi: 10.1109/RTAS65571.2025.00030 + +9. S. Liu et al., + “Ros-RT: Enabling Flexible Scheduling in ROS 2,” + *2025 IEEE Real-Time Systems Symposium (RTSS)*, Dec. 2025, pp. 42–54. + doi: 10.1109/RTSS66672.2025.00013 + +10. T. Ishikawa-Aso et al., + “Middleware-Transparent Callback Enforcement in Commoditized Component-Oriented Real-Time Systems,” + *2025 IEEE 31st RTAS*, Irvine, CA, USA, 2025, pp. 426–429. + doi: 10.1109/RTAS65571.2025.00017 From 9a6d031f8b960d10791009d5140a2bfcc4c2509f Mon Sep 17 00:00:00 2001 From: atsushi yano <55824710+atsushi421@users.noreply.github.com> Date: Sun, 15 Feb 2026 15:43:54 +0900 Subject: [PATCH 2/4] Update docs/comparison_with_other_executors.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- docs/comparison_with_other_executors.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/comparison_with_other_executors.md b/docs/comparison_with_other_executors.md index be4c83c..9fc9d2d 100644 --- a/docs/comparison_with_other_executors.md +++ b/docs/comparison_with_other_executors.md @@ -49,7 +49,7 @@ If the Executor has been merged into the ROS 2 mainline, or can be introduced wi --- -# References +## References 1. H. Choi, Y. Xiang and H. Kim, “PiCAS: New Design of Priority-Driven Chain-Aware Scheduling for ROS2,” From 150aca587fb1e36e1ce3df4828f72c50e208079c Mon Sep 17 00:00:00 2001 From: atsushi yano <55824710+atsushi421@users.noreply.github.com> Date: Sun, 15 Feb 2026 15:45:25 +0900 Subject: [PATCH 3/4] Update docs/comparison_with_other_executors.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- docs/comparison_with_other_executors.md | 26 ++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/comparison_with_other_executors.md b/docs/comparison_with_other_executors.md index 9fc9d2d..d9d03c1 100644 --- a/docs/comparison_with_other_executors.md +++ b/docs/comparison_with_other_executors.md @@ -33,19 +33,19 @@ If the Executor has been merged into the ROS 2 mainline, or can be introduced wi | Executor | Immediate Enqueue | Per-Callback Priority | Non-Nested Scheduling | Fully Preemptive | Support for Reentrant Callbacks | ROS 2 Mainline | | ---------------------------------------------- | :---------------: | :-------------------: | :-------------------: | :--------------: | :-----------------------------: | :------------: | -| SingleThreadedExecutor / MultiThreadedExecutor | | | | | | ✔ | -| EventExecutor | ✔ | | | | ✔ | ✔ | -| PiCAS Single [1] | | ✔ | | | | | -| PiCAS Multi [2] | ✔*1 | ✔ | | | | | -| Dynamic-Priority-based Executor [3,4] | ✔*1 | ✔ | | | | | -| Extended EventExecutor [5] | ✔ | ✔ | | | ✔ | | -| RTeX [6] | ✔ | ✔ | | | ✔ | | -| Budget-based Real-Time Executor [7] | ✔*1 | ✔ | ✔ | ✔ | | | -| Preemptive EDF Executor [8] | ✔*1 | ✔ | ✔ | ✔ | | | -| Ros-RT [9] | ✔ | ✔ | ✔ | ✔ | ✔ | | -| CallbackIsolatedExecutor [10] | ✔*1 | ✔ | ✔ | ✔ | ✔ | ✔ | - -***1**: The ready queue is updated each time a thread selects a callback to execute. +| SingleThreadedExecutor / MultiThreadedExecutor | | | | | | ✔ | +| EventExecutor | ✔ | | | | ✔ | ✔ | +| PiCAS Single [1] | | ✔ | | | | | +| PiCAS Multi [2] | ✔\*1 | ✔ | | | | | +| Dynamic-Priority-based Executor [3,4] | ✔\*1 | ✔ | | | | | +| Extended EventExecutor [5] | ✔ | ✔ | | | ✔ | | +| RTeX [6] | ✔ | ✔ | | | ✔ | | +| Budget-based Real-Time Executor [7] | ✔\*1 | ✔ | ✔ | ✔ | | | +| Preemptive EDF Executor [8] | ✔\*1 | ✔ | ✔ | ✔ | | | +| Ros-RT [9] | ✔ | ✔ | ✔ | ✔ | ✔ | | +| CallbackIsolatedExecutor [10] | ✔\*1 | ✔ | ✔ | ✔ | ✔ | ✔ | + +**\*1**: The ready queue is updated each time a thread selects a callback to execute. --- From 7404f897f565d0cae02b2694a6561895f96aef6c Mon Sep 17 00:00:00 2001 From: atsushi421 Date: Sun, 15 Feb 2026 15:46:14 +0900 Subject: [PATCH 4/4] fix --- docs/comparison_with_other_executors.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/comparison_with_other_executors.md b/docs/comparison_with_other_executors.md index d9d03c1..cd67308 100644 --- a/docs/comparison_with_other_executors.md +++ b/docs/comparison_with_other_executors.md @@ -45,7 +45,7 @@ If the Executor has been merged into the ROS 2 mainline, or can be introduced wi | Ros-RT [9] | ✔ | ✔ | ✔ | ✔ | ✔ | | | CallbackIsolatedExecutor [10] | ✔\*1 | ✔ | ✔ | ✔ | ✔ | ✔ | -**\*1**: The ready queue is updated each time a thread selects a callback to execute. +\*1: The ready queue is updated each time a thread selects a callback to execute. ---