|
1 | 1 | # What is Eclipse iceoryx? |
| 2 | + |
| 3 | +The technology behind Eclipse iceoryx originated in the automotive domain. With the introduction of video-based driver |
| 4 | +assistance, the amount of data to be exchanged between different threads of execution increased to GBytes/sec. The |
| 5 | +resources on these embedded systems were constrained and a solution was needed to use precious runtime for functional |
| 6 | +computations, not for shifting around bytes in memory. |
| 7 | + |
| 8 | +The simple answer was to avoid copying of messages inside the middleware that manages the data communication between |
| 9 | +the different software nodes. This can be done by using shared memory that can be accessed by the producers and |
| 10 | +consumers of messages. On its own, this is not a new innovation as the approach has been used since the 1970s. |
| 11 | +However, iceoryx takes the approach further, ending up in an inter-process-communication technology with a |
| 12 | +publish/subscribe architecture that is fast, flexible and dependable. |
| 13 | + |
| 14 | + |
| 15 | +## Fast |
| 16 | + |
| 17 | +With the iceoryx API, a publisher can write the message directly into a chunk of memory that was previously requested |
| 18 | +from the middleware. When the message is delivered, subscribers receive reference counted pointers to these memory |
| 19 | +chunks, which are stored in queues with configurable capacities. With this iceoryx achieves what we refer to as true |
| 20 | +zero-copy — an end-to-end approach from publishers to subscribers without creating a single copy. |
| 21 | + |
| 22 | +Avoiding the copies on API level is crucial when GBytes of sensor data have to be processed per second on robotics and |
| 23 | +autonomous driving systems. Therefore the iceoryx team contributed to the standardization of true zero-copy capable |
| 24 | +APIs in [ROS 2](https://www.ros.org/) and [AUTOSAR Adaptive](https://www.autosar.org/standards/adaptive-platform/). |
| 25 | + |
| 26 | +On modern processors iceoryx has a latency of less than 1 µs for transferring a message. And the best message is that |
| 27 | +this latency is constant as size doesn't matter. Want to give it a try? Then have a look at our |
| 28 | +[iceperf example](../examples/iceperf) after having made the first steps. |
| 29 | + |
| 30 | +## Flexible |
| 31 | + |
| 32 | +iceoryx already supports Linux, QNX and MacOS as operating systems as well as C and C++ as user APIs. Windows and Rust |
| 33 | +are the next ones on the list. The typed C++ API is the most comfortable when you want to directly use the iceoryx API |
| 34 | +on the user side. The untyped C++ API and the C API provide a data agnostic interface that is often preferred when |
| 35 | +integrating iceoryx as shared memory backbone into a bigger framework. |
| 36 | + |
| 37 | +The APIs support polling access and event-driven interactions with the [Waitset](../overview/#waitset) and |
| 38 | +[Listener](../overview/#listener). Applications can be started and stopped flexibly as there is a service discovery |
| 39 | +behind the scenes that dynamically connects matching communication entities. |
| 40 | + |
| 41 | +That iceoryx has the right set of features can be seen from the already existing integrations in middleware and |
| 42 | +frameworks such as [Eclipse Cyclone DDS](https://github.com/eclipse-cyclonedds/cyclonedds), |
| 43 | + [eCAL from Continental](https://continental.github.io/ecal/), |
| 44 | + [RTA-VRTE from ETAS](https://www.etas.com/en/products/rta-vrte.php) and |
| 45 | + [Apex.OS from Apex.AI](https://www.apex.ai/apex-os). |
| 46 | + |
| 47 | +## Dependable |
| 48 | + |
| 49 | +The predecessor of iceoryx is running in millions of vehicles worldwide. All iceoryx maintainers hail from the |
| 50 | +safety critical automotive domain. Hence, they know the necessary requirements and have these in mind for the |
| 51 | +design and implementation of features. The usage of heap, exceptions and any undefined behavior are to be avoided |
| 52 | +to increase the predictability. Instead a custom memory allocation is being used, based on static memory pools. |
| 53 | +Additionally, the handling of return values and error cases was inspired by upcoming C++ features and other |
| 54 | +languages like Rust (details can be found |
| 55 | +[here](../../advanced/how-optional-and-error-values-are-returned-in-iceoryx/)). |
| 56 | + |
| 57 | +As different processes are operating on shared data structures, avoiding deadlocks is becoming all the more important. |
| 58 | +iceoryx uses look-free data structures like the multi-producer multi-consumer (MPMC) queue that was written portably |
| 59 | +thanks to modern C++. |
| 60 | + |
| 61 | +The tools available for automotive-compliant software development are always one or two releases behind the latest C++ |
| 62 | +standard. This fact, combined with our already mentioned constraints, led to a bunch of STL like C++ classes that have |
| 63 | +the goal to combine modern C++ with the reliability needed for the domains iceoryx is used in. They can be found in |
| 64 | +the iceoryx utils which are introduced [here](../../advanced/iceoryx_utils/) |
0 commit comments