HORD transports HTTP/1.1 over RDMA, giving ideally unmodified HTTP semantics a byte-stream over RDMA's message-oriented queue pairs, with an optional zero-copy path that places response bodies straight into client memory.
The target is AI/compute clusters consuming object storage over an RDMA fabric: an edge cache speaks plain HTTP upstream and HORD on the last hop to compute nodes.
This repository is the reference implementation — a Rust workspace plus the specification it implements.
Working prototype, demonstrated end-to-end over Soft-RoCE (rxe). Implemented:
- Stream path — RC queue pairs, the message envelope, credit-based flow
control, and a byte-stream (
Read/Write+ asyncAsyncRead/AsyncWrite) that carries unmodified HTTP/1.1 (incl.hyper). Spec §4–§6, §8, §9. - Zero-copy — one-sided
RDMA_WRITEinto a client-registered buffer, advertised viaX-HORD-RDMA-Write. Spec §7.1–§7.4. - Protocol splitting —
RDMA_WRITE_WITH_IMMdelivers payload + a transfer-ID immediate to the client's CQ, so a data-plane consumer collects bodies off the completion queue without parsing HTTP. Spec §7.7. - Range requests — single-range
Range/Content-Range, composed with the zero-copy write. Spec §7.6.
Not yet built: §7.5 GPUDirect RDMA — the addr/rkey path is opaque to the
server, so it should work unchanged on capable hardware.
| Crate | Responsibility |
|---|---|
hord-core |
RDMA transport: device/PD/QP lifecycle, MR registration, CQ processing. Wraps libibverbs/librdmacm via the modified sideway crate. |
hord-stream |
HORD wire protocol: handshake, envelope, credit flow control, the HordStream byte stream, and the zero-copy / split-mode write drivers. |
hord-zerocopy |
Zero-copy HTTP semantics (§7). Default: the pure X-HORD-RDMA-Write header codec (RdmaWriteReq/RdmaWriteStatus/RdmaWriteAction) — no dependencies, links with no NIC or RDMA libraries. rdma feature: adds the client/server write orchestration, the source-buffer pool, and the SplitReceiver data plane (depends on hord-stream). |
hord-async |
tokio AsyncRead/AsyncWrite over a HordStream, driving the CQ event fd with AsyncFd (no busy-poll); reactor split for multi-task duplex + data plane. |
hord-demo |
hord-server/hord-client (sync) and hord-server-async/hord-client-async (hyper). |
Needs the RDMA userspace dev packages, then a normal release build:
sudo apt-get install -y libibverbs-dev librdmacm-dev
cargo build --releaseBoth endpoints run against the local rxe device and connect over its RoCEv2 IP.
The default is 192.0.2.1 (a reserved RFC 5737 documentation address, so no real
host IP is baked into the tree) on port 4791 — so out of the box you must either
assign that address to the rxe-backing NIC (sudo ip addr add 192.0.2.1/32 dev <netdev>) or point the binaries at your device IP with $HORD_TEST_IP (or
--bind on the server / --server on the client). 127.0.0.1 will not work:
it routes via lo, which has no RDMA device. See CLAUDE.md for the
device setup.
export HORD_TEST_IP=<rxe device IP> # or assign 192.0.2.1 to the rxe-backing NIC
# Terminal 1
./target/release/hord-server # listens on $HORD_TEST_IP:4791
# Terminal 2
./target/release/hord-client --path /size/67108864 # 64 MiB, integrity-checked
./target/release/hord-client --path /size/67108864 --zero-copy # via one-sided RDMA writeThe *-async binaries behave identically over hyper; --split (async) exercises §7.7.
# Full suite incl. the RDMA loopback tests (need the rxe device up). Same address
# rule as above: $HORD_TEST_IP, or assign the 192.0.2.1 default to the NIC. The
# ignored data-path tests also need a raised RLIMIT_MEMLOCK — they register 4–16
# MiB buffers, and the usual 8 MiB default fails them; see the "Locked memory"
# caveat in CLAUDE.md.
HORD_TEST_IP=<rxe device IP> cargo test --workspace -- --include-ignored --test-threads=1
# Logic tests only: no device to run, but still
# builds the transport, so it needs the RDMA dev packages installed:
cargo test --workspace
# Pure header codec only: needs neither a NIC nor rdma-core, the hord-zerocopy
# `rdma` feature is off — how an embedder unit-tests X-HORD-RDMA-Write on a laptop.
cargo test -p hord-zerocopy| Document | Contents |
|---|---|
| SPEC.md | The HORD specification (v0.1.0 draft). |
| PROTOTYPE.md | The long form of this README: feature-by-feature detail, design notes, prototype limitations, the deferred code-review items, and findings to fold back into the spec. |
| testing.md | Hardware / GPUDirect (§7.5) test plan. |
| TODO.md | Remaining work and deferred review items. |
| CLAUDE.md | The Soft-RoCE dev environment: device bring-up, the RLIMIT_MEMLOCK caveat, host-specific setup notes. |
Apache-2.0. © Per Buer, Varnish Software.