Performance

Ratios travel. Absolutes are box-dependent.

Every number here is measured, and every number carries the box and the build it was measured on. Read the caption before you plan a deployment around a figure.

~5%
of a 20-core NAS for the whole stack, under 1 GiB of RAM
2.4%
of one core to ingest 16 RTSP streams, hub only
0.064 ms
p95 bus latency, authenticated TCP on loopback
Measurement Result Box and build
Whole-stack footprint~1.0 / 20 cores (~5%), <1 GiBQNAP TVS-h874, 8 cameras / 16 streams, production
Ingest cost, hub only~2.4% of one coreSame box, 16 RTSP streams
Detection, GPU2.05 ms / inferenceyolo11s @ 640, RTX 5090, dev box
Detection, OpenVINO on CPU8.95 ms / inferenceyolo11s @ 640, dev box — ~2.9× faster than the default CPU provider
Detection, CPU25.85 ms / inferenceyolo11s @ 640, ONNX Runtime CPU provider, dev box
Bus latency, authenticated TCPp95 0.064 msLoopback, debug build
Bus latency, over TLSp95 0.210 msLoopback, debug build
Transport floorUDS ~5× loopback TCPSynthetic, 1 KiB frames

Why it is this small

One epoll thread in the core, raw syscalls, no libc, and each camera ingested exactly once regardless of how many consumers want it. Recording is motion-gated, so disk cost follows events rather than wall-clock time.

How to size a box

Ingest scales with stream count and is cheap. Detection dominates, and the provider ladder decides how much: a GPU, an Intel iGPU or plain CPU, in that order of appetite. Pick the rung, then the box.

Reproducing this

The benchmark board is part of the documentation set, with the method next to each figure. Latency figures come from a debug build on loopback, which is the honest way to read them: a floor, not a promise.