Mechanisms
The APIs are not interchangeable.
Onload / VMA
Accelerates ordinary sockets below the application. It can sit beneath native and managed runtimes without rewriting the FIX session API.
TCPDirect / SocketXtreme
Uses a vendor SDK and a dedicated LibHFT transport implementation. Build-time integration and session role matter.
ef_vi / ibverbs
Receives Ethernet frames directly. This is a packet-ingest API, not a TCP FIX session.
Ordinary TCP
The reference path every accelerated result must be compared with under the same workload and flavor.
Surface coverage
Where each mechanism can run.
| Mechanism | C++ | Java Pure | Java/JNI | .NET Pure | .NET Native |
|---|---|---|---|---|---|
| Solarflare Onload | Yes | Yes | Yes | Yes | Yes |
| Mellanox VMA preload | Yes | Loads; verify acceleration | Yes | Yes | Yes |
| Solarflare TCPDirect | Yes | — | Initiator + acceptor | — | Initiator + acceptor |
| Mellanox SocketXtreme | Yes | — | Initiator + acceptor | — | Initiator + acceptor |
| ef_vi / ibverbs raw RX | Yes | — | Vendor-neutral facade | — | Vendor-neutral facade |
Rust Pure uses its own transport track and is not included in the established vendor-SDK matrix above. Preload interposition may be technically possible beneath ordinary sockets, but it is not published here without the same classified and measured evidence.
Measured transport-floor campaign
Back-to-back cards, isolated cores.
On the dual-card HP rig, the canonical 500,000-sample raw transport comparison pinned both receiver paths to isolated cores. This campaign measures the transport path rather than the sustained FIX workload shown on the performance page.
| Path | p50 | p99 | Tail ratio |
|---|---|---|---|
| Solarflare TCPDirect | 2.858 µs | 2.908 µs | 1.02 |
| Mellanox SocketXtreme | 3.145 µs | 3.964 µs | 1.27 |
SocketXtreme recorded 500,000 zero-copy borrows with zero gather copies. The remaining tail difference is documented as a property of the measured completion paths after warm-up and affinity corrections—not as a universal vendor ranking.
Verification
Refuse a label the process cannot prove.
LibHFT treats preload mechanisms as runtime-gated and vendor stacks as build-gated. A requested preload mode must be visible in the process; a dedicated stack token must not silently fall back to kernel TCP when its SDK was not compiled in.
VMA initialized beneath one pure-Java NIO test but delivered only 1.03× its own kernel baseline. Onload accelerated the same pure-Java path, while Java/JNI accelerated under VMA. A mapped library proves initialization—not offload or improvement.
Deployment checklist
Measure the actual card and runtime.
- Record NIC model, firmware, driver and vendor-stack versions.
- Verify interface, route, offload counters and the selected initiator/acceptor path.
- Pin owner and receiver loops deliberately; document housekeeping and isolated cores.
- Compare with the same flavor’s own kernel baseline.
- Keep raw-Ethernet, transport-floor and FIX-session measurements separate.