FAQ
Questions before you reach for it.
Short, accurate answers. If yours isn’t here, write to us or open an issue on GitHub.
What is numaperf?
A NUMA-first runtime for latency-critical Rust applications. It gives explicit, observable control over memory placement, thread pinning, and work scheduling on multi-socket (NUMA) systems, as a workspace of focused crates. MIT licensed, maintained by Skelf Research.
When does NUMA actually matter?
Two conditions. First, the box must be NUMA — a single-socket server has one node and zero cross-node traffic by definition. Second, the workload must be latency-critical. NUMA primitives earn their keep at the tail-latency end: HFT, packet processing, real-time control loops. Throughput-bound work usually does not care enough to justify the code.
How much does NUMA affect latency?
On multi-socket servers, cross-node memory access latency is typically 2–3× local access, per the project README. numaperf does not publish fabricated benchmark numbers; where a measurement has not been made, the site does not invent one.
Which platforms are supported?
Linux x86_64 and Linux aarch64 are fully supported. macOS degrades gracefully (no NUMA hardware). Windows is not currently supported. Minimum supported Rust version is 1.70.
How does thread pinning work?
Via ScopedPin, a RAII handle that pins the current thread to a set of CPUs (e.g. a node’s CPUs) and restores the previous affinity when it drops. That means affinity does not leak across scopes or worker-pool transitions.
What memory placement policies are available?
Four: Bind, Preferred, Interleave, and Local. Pair a policy with Prefault::Touch to fault pages in and make the placement decision stick at allocation time rather than relying on the kernel’s first-touch heuristic.
Is numaperf a replacement for Tokio or async-std?
No. It is not a general-purpose async runtime. The common pattern is a hybrid: keep your general-purpose runtime for the control plane and carve out a dedicated set of numaperf workers for the latency-critical hot path, handing off over a bounded channel.
Do I have to adopt the whole thing at once?
No. numaperf is a workspace with a facade crate plus seven focused crates (topo, affinity, mem, sched, sharded, io, perf). Adopt them incrementally — start with topology discovery, add placement and pinning for one hot buffer, and reach for the scheduler only when you want to own scheduling.
How do I install it?
cargo add numaperf. It is published on crates.io as numaperf, with full documentation at docs.skelfresearch.com/numaperf/ and source at github.com/Skelf-Research/numaperf.
Is it open source?
Yes, MIT licensed. Source, issues, and contributing guidelines are on GitHub under Skelf-Research/numaperf.