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.
- Harness: crates/corba-interop/competitors
- Raw data: RESULTS.md
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)
| ORB | Version | min | p50 | p90 | p99 |
|---|---|---|---|---|---|
| ZeroDDS CORBA | 1.0.0-rc.3 | 14.6 | 17.8 | 25.6 | 45.2 |
| omniORB | 4.3.3 | 14.1 | 17.8 | 22.3 | 42.3 |
| TAO (ACE+TAO) | 2.5.24 | 24.3 | 36.2 | 42.8 | 85.9 |
| JacORB | 3.9 (JDK 8) | 43.5 | 59.6 | 83.6 | 140.2 |
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.idllive incompetitors/{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.
- Harness: crates/corba-interop/competitors
- Rohdaten: RESULTS.md
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)
| ORB | Version | min | p50 | p90 | p99 |
|---|---|---|---|---|---|
| ZeroDDS CORBA | 1.0.0-rc.3 | 14.6 | 17.8 | 25.6 | 45.2 |
| omniORB | 4.3.3 | 14.1 | 17.8 | 22.3 | 42.3 |
| TAO (ACE+TAO) | 2.5.24 | 24.3 | 36.2 | 42.8 | 85.9 |
| JacORB | 3.9 (JDK 8) | 43.5 | 59.6 | 83.6 | 140.2 |
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.idlpro ORB liegen incompetitors/{omniorb,tao,jacorb}/. - omniORB 4.3.3 (
apt install omniorb omniidl libomniorb4-dev), TAO 2.5.24, JacORB 3.9 + JDK 8.