AtrekesLibHFTDocumentationKernel bypass

Networking

Three acceleration classes.

“Kernel bypass” can mean a socket interposer, a vendor user-space TCP stack or direct frame reception. LibHFT names each path separately because its build, runtime and measurement boundary are different.

SolarflareMellanox / NVIDIAInitiator and acceptor evidence

Mechanisms

The APIs are not interchangeable.

PRELOAD INTERPOSER

Onload / VMA

Accelerates ordinary sockets below the application. It can sit beneath native and managed runtimes without rewriting the FIX session API.

USER-SPACE TCP

TCPDirect / SocketXtreme

Uses a vendor SDK and a dedicated LibHFT transport implementation. Build-time integration and session role matter.

RAW RECEIVE

ef_vi / ibverbs

Receives Ethernet frames directly. This is a packet-ingest API, not a TCP FIX session.

KERNEL BASELINE

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.

MechanismC++Java PureJava/JNI.NET Pure.NET Native
Solarflare OnloadYesYesYesYesYes
Mellanox VMA preloadYesLoads; verify accelerationYesYesYes
Solarflare TCPDirectYes—Initiator + acceptor—Initiator + acceptor
Mellanox SocketXtremeYes—Initiator + acceptor—Initiator + acceptor
ef_vi / ibverbs raw RXYes—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.

Pathp50p99Tail ratio
Solarflare TCPDirect2.858 µs2.908 µs1.02
Mellanox SocketXtreme3.145 µs3.964 µs1.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.

Pure Java VMA caveat

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.