Performance release for the Rust backend (serverrs). Wire protocol, REST API and config format are unchanged.
Highlights
- Runtime SIMD dispatch (AVX2/FMA, AVX-512 where available) for the decimator, FM-stereo FIR and NCO block mixer, with a portable fallback in the same binary.
- IQ extractor ~2.1x faster (2.4M → 240k): allocation-free in-place NCO/decimator/Butterworth chain and reusable scratch buffers.
- Decimator 3.4x faster (2.4 MSPS, factor 10, 257 taps: 78.7 → 22.9 µs per 16 KiB chunk).
- FM stereo ~16% faster, Opus WFM pipeline ~13% faster (reused PLL/FIR/audio/PCM buffers, no stereo clone, no per-sample modulo).
- IQ correction ~19% faster (fused DC + imbalance pass).
- New benchmark harness:
cd serverrs && cargo run --release --example bench(dependency-free, best-of-5).
Verification
- RTL2838/R820T, 2.4 MSPS, 8192 FFT @ 8 fps, IQ correction on, WFM + Opus at 100.6 MHz:
- 1 client: 277 FFT frames and 583 Opus packets over 35 s (34.98 s audio), RDS sync, no client errors.
- CPU: ~10.2% of one core average (12.3% on the previous HEAD).
- 4 concurrent clients: 22.95% of one core, all streams real-time.
cargo test: 114/114 (default,--no-default-features, and Opus-only builds).-C target-cpu=nativemeasured within noise of the runtime-dispatched generic build; release artifacts remain portable.
Docker
ghcr.io/gbozo/no-sdr:2.11.2-rust — multi-arch (linux/amd64 + linux/arm64), -rust suffix only; latest remains the Go backend.