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.
| Measurement | Result | Box and build |
|---|---|---|
| Whole-stack footprint | ~1.0 / 20 cores (~5%), <1 GiB | QNAP TVS-h874, 8 cameras / 16 streams, production |
| Ingest cost, hub only | ~2.4% of one core | Same box, 16 RTSP streams |
| Detection, GPU | 2.05 ms / inference | yolo11s @ 640, RTX 5090, dev box |
| Detection, OpenVINO on CPU | 8.95 ms / inference | yolo11s @ 640, dev box — ~2.9× faster than the default CPU provider |
| Detection, CPU | 25.85 ms / inference | yolo11s @ 640, ONNX Runtime CPU provider, dev box |
| Bus latency, authenticated TCP | p95 0.064 ms | Loopback, debug build |
| Bus latency, over TLS | p95 0.210 ms | Loopback, debug build |
| Transport floor | UDS ~5× loopback TCP | Synthetic, 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.