CORBA IIOP Roundtrip — ZeroDDS vs TAO / omniORB / JacORB

Cross-ORB evidence (Tier A). Reproducible IIOP roundtrip latency against the actively available CORBA ORBs — the data behind the performance claim on the CORBA subsystem page.

Methodology

  • Loopback (127.0.0.1), IIOP/GIOP 1.2, Debian 13 (kernel 6.17).
  • Operation: interface Echo { string ping(in string msg); } — echoes its argument.
  • Separate server + client processes (forces a real wire; omniORB/TAO would short-circuit a colocated call otherwise). IOR exchanged via file.
  • N = 50 000 measured roundtrips after warmup, one connection, p50/p90/p99.
  • Optimised builds (Rust --release, C++ -O2, JVM steady-state after warmup).

Results (32-byte payload, µs — codegen path)

ORBVersionminp50p90p99
ZeroDDS CORBA1.0.0-rc.314.617.825.645.2
omniORB4.3.314.117.822.342.3
TAO (ACE+TAO)2.5.2424.336.242.885.9
JacORB3.9 (JDK 8)43.559.683.6140.2

256-byte payload: p50 ZeroDDS 17.2 / omniORB 18.1 / TAO 37.9 / JacORB 59.2 — 4096-byte: 20.2 / 22.5 / 50.6 / 78.4. All ZeroDDS figures are the codegen path (hand-marshalled p50 17.0 µs).

Findings

  • ZeroDDS CORBA is on par with omniORB (the fastest established C++ ORB) — tied at 32 B, slightly ahead at 256/4096 B — and ~2× faster than TAO, ~3.5× faster than JacORB.
  • IOR byte order: omniORB + TAO emit little-endian (01…), JacORB big-endian (00…) — relevant for cross-ORB interop.
  • JacORB does not run on modern Java (the CORBA module was removed in Java 11), so it needs JDK 8 (Temurin 1.8.0_492).

Reproduce

  • ZeroDDS: cargo run --release -p zerodds-corba-interop --bin echo_bench -- 32 50000
  • Per-ORB server + client + Echo.idl live in competitors/{omniorb,tao,jacorb}/.
  • omniORB 4.3.3 (apt install omniorb omniidl libomniorb4-dev), TAO 2.5.24, JacORB 3.9 + JDK 8.

CORBA-IIOP-Roundtrip — ZeroDDS vs TAO / omniORB / JacORB

Cross-ORB-Beleg (Tier-A). Reproduzierbare IIOP-Roundtrip-Latenz gegen die aktiv verfügbaren CORBA-ORBs — die Datengrundlage für die Performance-Aussage auf der CORBA-Subsystem-Seite.

Methodik

  • Loopback (127.0.0.1), IIOP/GIOP 1.2, Debian 13 (Kernel 6.17).
  • Operation: interface Echo { string ping(in string msg); } — Echo des Arguments.
  • Separate Server- + Client-Prozesse (erzwingt echten Wire; omniORB/TAO würden colocated Calls sonst kurzschließen). IOR-Austausch über Datei.
  • N = 50 000 gemessene Roundtrips nach Warmup, je eine Connection, p50/p90/p99.
  • Optimierte Builds (Rust --release, C++ -O2, JVM Steady-State nach Warmup).

Ergebnisse (32-Byte-Payload, µs — Codegen-Pfad)

ORBVersionminp50p90p99
ZeroDDS CORBA1.0.0-rc.314.617.825.645.2
omniORB4.3.314.117.822.342.3
TAO (ACE+TAO)2.5.2424.336.242.885.9
JacORB3.9 (JDK 8)43.559.683.6140.2

256-Byte-Payload: p50 ZeroDDS 17.2 / omniORB 18.1 / TAO 37.9 / JacORB 59.2 — 4096-Byte: 20.2 / 22.5 / 50.6 / 78.4. Alle ZeroDDS-Werte sind der Codegen-Pfad (hand-marshalled p50 17.0 µs).

Befunde

  • ZeroDDS CORBA ist gleichauf mit omniORB (dem schnellsten etablierten C++-ORB) — bei 32 B gleich, bei 256/4096 B knapp vorn — und ~2× schneller als TAO, ~3,5× schneller als JacORB.
  • IOR-Byte-Order: omniORB + TAO emittieren Little-Endian (01…), JacORB Big-Endian (00…) — relevant für Cross-ORB-Interop.
  • JacORB läuft nicht auf modernem Java (das CORBA-Modul wurde in Java 11 entfernt) und benötigt daher JDK 8 (Temurin 1.8.0_492).

Reproduzieren

  • ZeroDDS: cargo run --release -p zerodds-corba-interop --bin echo_bench -- 32 50000
  • Server + Client + Echo.idl pro ORB liegen in competitors/{omniorb,tao,jacorb}/.
  • omniORB 4.3.3 (apt install omniorb omniidl libomniorb4-dev), TAO 2.5.24, JacORB 3.9 + JDK 8.