ipc_shared_ptr: A Publish/Subscribe-Aware Smart Pointer for Cross-Process Object Lifetime Management
Takahiro Ishikawa-Aso, Atsushi Yano, Koichi Imai, Takuya Azumi, Shinpei Kato

TL;DR
The paper introduces ipc_shared_ptr, a pub/sub-aware smart pointer for cross-process message management in IPC, reducing global communication and enabling scalable, zero-copy message sharing in ROS 2 middleware.
Contribution
It proposes a novel reference management technique exploiting pub/sub structure, with a single-writer approach that simplifies implementation while maintaining scalability.
Findings
Single-writer ipc_shared_ptr reduces global communication by an order of magnitude.
Agnocast with ipc_shared_ptr achieves 2.9x lower end-to-end latency than owner-driven approaches.
Evaluation at scale shows the approach is scalable for large ROS 2 applications.
Abstract
True zero-copy Inter-Process Communication (IPC) in publish/subscribe (pub/sub) middleware such as Robot Operating System 2 (ROS 2) requires subscribers to reference message objects in publisher-owned shared memory. Objects must not be reclaimed while referenced, yet must eventually be reclaimed, with correct handling of crash recovery and Transient Local QoS retention requirements. We propose ipc_shared_ptr, a pub/sub-aware smart pointer for cross-process message lifetime management. ipc_shared_ptr exploits pub/sub structural properties to specialize Birrell's reference listing, limiting global metadata updates to per-subscriber 0<->1 transitions and achieving an order-of-magnitude reduction in global communication over general-purpose distributed reference counting. We analyze the key metadata management tradeoff: scalability versus implementation simplicity. Owner-driven reclaim…
Peer Reviews
No public reviews on file for this paper yet. If you reviewed it on a platform where reviews are public (OpenReview, ICLR, NeurIPS, ICML), you can paste yours below so the community can read it here.
Videos
No videos yet. Explain this paper in a talk, walkthrough, or lecture? Add one.
