A somewhat niche, but significant goal for middleware in the software-defined vehicle space is maximizing data throughput with low latency by leveraging platform-specific interfaces or buses.
Eclipse p3com was created to address that need. It’s been in incubation for over a year, but just recently made its first code contribution. Project Lead Jakub Sosnovec sat down to explain how and why the project got started and where it fits into the broader SDV ecosystem.
What is the p3com project exactly?
In the software-defined vehicle space, everyone’s striving for maximum throughput and minimum latency. This is particularly relevant when we’re talking about middleware, such as the Robotic Operating System (ROS) or the AUTOSAR Communication Management functional cluster. At the very core of these is a software library, or API, that applications can use to communicate with each other.
This is obviously very important in vehicles. If different components are communicating with each other for safety-critical functions, such as rear-view cameras connecting with, say, brakes, or side-view cameras communicating with the steering wheel to pull you back from crossing the median, delays or data loss can be critical.
Hence the need for maximum throughput and minimum latency for this middleware, which is where Eclipse p3com comes in.
How does it work?
AUTOSAR is a great example of adaptive API, as it can increase performance when running on a single CPU core cluster: If you need two applications to communicate, you could just use the Ethernet stack and send data over with TCP or UDP protocols. However, it is possible to optimize this by using the OS’s inter-process communication mechanisms that are potentially much more efficient and performant.
Many SDV platforms contain platform-specific hardware interfaces for data transfer. Leveraging them to maximize data throughput and minimize latency analogously to the above example presents challenges.
To support this, p3com provides an open source and modular communication middleware based on Eclipse iceoryx with two key components:
- A platform-agnostic infrastructure
- Platform-specific transport layers
These two key components give p3com its three main attributes that make it useful in the SDV space:
- It’s portable because it supports Linux and FreeRTOS.
- It’s pluggable because it provides a modular transport layer architecture and integrates into existing middleware libraries such as Eclipse Cyclone DDS.
- It supports the publish/subscribe communication model.
In practice, an example deployment of p3com running over a PCI Express transport layer can be sketched as below.
Where is the project at with the current release?
For the moment we have been mostly developing on NXP-specific boards and platforms. In particular, we have implemented a mature and well-optimized PCI Express transport layer for the BlueBox3 development platform. But we want p3com to be more broadly usable than that.
We would appreciate feedback from application developers using other middleware libraries on how easy or difficult they have found it to integrate and make use of p3com. Our goal is to make it as easy to use as possible and have it basically be invisible once it’s set up — when the p3com process is running on the system, communication and data sharing should “magically” run faster. That’s the dream. But we need feedback from the community to get there.
Furthermore, at this stage we would like to reach out to the community for adding support for other platforms, which means implementing new transport layers. There are hardware-specific considerations; the drivers are always a little bit different, for example, depending on which controllers you have in your platform. So, for instance, there is work to do to support a PCI Express bus on a different platform. We would love to get feedback on the process of implementing a new transport layer and we are ready to support it.
What should someone interested in the project do?
Take a look at our GitHub page, which has all of our code and documentation to date. Look at what’s there, raise an issue, start a discussion, or even open a support request if you want to make us really happy.