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.

What it shows

  • Both ZeroDDS ends use the zerodds-iceoryx-cyclone crate, which talks to iox-roudi through libiceoryx_binding_c — the same shared-memory service Cyclone's psmx_iox plugin 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 plus sample_state and cdr_identifier.
  • The WRITE direction needs Cyclone's ALLOW_NONDISCOVERED_WRITERS, which makes Cyclone's own publisher iox-ineligible — hence two configs, cyclone_read.xml and cyclone_write.xml.
  • Linux only: the legacy <SharedMemory><Enable> element must not be added, it spawns a shadow default PSMX that overrides INSTANCE_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.

Was es zeigt

  • Beide ZeroDDS-Enden nutzen das Crate zerodds-iceoryx-cyclone, das über libiceoryx_binding_c mit iox-roudi spricht — demselben Shared-Memory-Dienst, den Cyclones psmx_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 sowie sample_state und cdr_identifier.
  • Die WRITE-Richtung braucht Cyclones ALLOW_NONDISCOVERED_WRITERS, was Cyclones eigenen Publisher iox-untauglich macht — daher zwei Konfigurationen, cyclone_read.xml und cyclone_write.xml.
  • Nur Linux: Das alte Element <SharedMemory><Enable> darf nicht ergänzt werden, es startet ein Schatten-Default-PSMX, das INSTANCE_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.

Verwandt