iceoryx zero-copy with Cyclone DDS
Bidirectional same-host zero-copy between ZeroDDS and Cyclone DDS over the iceoryx POSH shared-memory transport — no serialization and no UDP loopback on the hot path.
- Example:
iceoryx-cyclone-zerocopy - Repository: zero-dds-snippets
What it shows
- Both ZeroDDS ends use the
zerodds-iceoryx-cyclonecrate, which talks toiox-roudithroughlibiceoryx_binding_c— the same shared-memory service Cyclone'spsmx_ioxplugin uses. - A ZeroDDS sample is written into an iceoryx chunk laid out as Cyclone expects:
[iox ChunkHeader][dds_psmx_metadata_t user header][CDR payload], the user header carrying the writer's real RTPS GUID plussample_stateandcdr_identifier. - The WRITE direction needs Cyclone's
ALLOW_NONDISCOVERED_WRITERS, which makes Cyclone's own publisher iox-ineligible — hence two configs,cyclone_read.xmlandcyclone_write.xml. - Linux only: the legacy
<SharedMemory><Enable>element must not be added, it spawns a shadow default PSMX that overridesINSTANCE_NAME.
Run it
CYCLONE=/opt/cyclone ZERODDS=/path/to/zero-dds ./run.sh
Output
=== READ: Cyclone publisher -> ZeroDDS reader ===
READ PASS
=== WRITE: ZeroDDS writer -> Cyclone subscriber ===
WRITE PASS
PROOF: bidirectional ZeroDDS <-> Cyclone iceoryx SHM — PASS
Taken verbatim from the example's own README.
See also
iceoryx-Zero-Copy mit Cyclone DDS
Bidirektionales Same-Host-Zero-Copy zwischen ZeroDDS und Cyclone DDS über den iceoryx-POSH-Shared-Memory-Transport — keine Serialisierung und kein UDP-Loopback auf dem heißen Pfad.
- Beispiel:
iceoryx-cyclone-zerocopy - Repository: zero-dds-snippets
Was es zeigt
- Beide ZeroDDS-Enden nutzen das Crate
zerodds-iceoryx-cyclone, das überlibiceoryx_binding_cmitiox-roudispricht — demselben Shared-Memory-Dienst, den Cyclonespsmx_iox-Plugin verwendet. - Ein ZeroDDS-Sample wird in einen iceoryx-Chunk geschrieben, den Cyclone so erwartet:
[iox ChunkHeader][dds_psmx_metadata_t User-Header][CDR-Payload]; der User-Header trägt die echte RTPS-GUID des Writers sowiesample_stateundcdr_identifier. - Die WRITE-Richtung braucht Cyclones
ALLOW_NONDISCOVERED_WRITERS, was Cyclones eigenen Publisher iox-untauglich macht — daher zwei Konfigurationen,cyclone_read.xmlundcyclone_write.xml. - Nur Linux: Das alte Element
<SharedMemory><Enable>darf nicht ergänzt werden, es startet ein Schatten-Default-PSMX, dasINSTANCE_NAMEüberschreibt.
Ausführen
CYCLONE=/opt/cyclone ZERODDS=/path/to/zero-dds ./run.sh
Ausgabe
=== READ: Cyclone publisher -> ZeroDDS reader ===
READ PASS
=== WRITE: ZeroDDS writer -> Cyclone subscriber ===
WRITE PASS
PROOF: bidirectional ZeroDDS <-> Cyclone iceoryx SHM — PASS
Wörtlich aus dem README des Beispiels übernommen.