Repository navigation
FreeSBC v0.5.0
FreeSBC v0.5.0 publishes measured capacity numbers. A formal three-host load test (#109) ran FreeSBC on one 4 vCPU VM, with the load generator and the switch on separate hosts. The release also ships the kit to repeat that test. The product code is unchanged from v0.4.0: same binary behaviour, same configuration, and a v0.4.0 file loads unchanged. Still one static binary, one YAML file, no database, no Redis, no kernel modules, no external media process.
Breaking changes
None. No code, configuration key or dependency changed.
Performance
FreeSBC v0.4.0 code on 4 vCPU (2 cores + HT), 8 GiB. SIPp and webrtcload ran as the generator and a SIPp UAS or FreeSWITCH 1.10 as the switch, each on its own host. Media was G.711 20 ms in both directions, anchored on both legs. The pass line was under 0.1% failed calls, under 80% CPU, and no RTP or kernel receive loss.
| Test | Result |
|---|---|
| Concurrent calls with media | 5000 at 80% CPU, 500k packets/s each way, 373 MB RSS |
| A commercial SBC's published test: 1000 calls held 600 s | passes on one vCPU, about 120 MB RSS, 0 of 2000 calls failed |
| Call setup rate (no media) | 3500 CPS carrier to switch, 3250 CPS switch to carrier, 2250+ CPS client to switch |
| Soak: 3500 concurrent calls for 8 hours | 432,000 calls, 0 failed; goroutines, RSS, file descriptors and ports flat |
| Registrations | 19,000 held, 20,000+ REGISTER/s at refresh |
| WebRTC (ICE-Lite, DTLS-SRTP) | 100+ DTLS handshakes/s, 600+ concurrent SRTP calls (generator-limited) |
| With FreeSWITCH as the switch | 3000+ concurrent calls, 1500+ CPS (switch-limited) |
| Latency FreeSBC adds | under 1 ms |
"+" marks a lower bound: the generator, the switch or the test range ran out before FreeSBC did.
Memory follows the sustained call rate, not concurrent calls. It is about 1.25 MB and 44 goroutines per sustained call per second, down from about 2.3 MB and 76 before sipgo v1.6.0 (v0.4.0). An 8 GiB host with GOMEMLIMIT=6GiB reached 5.8 GB RSS at 5000 CPS carrier-in.
docs/performance.md has the method, every result table, profiles, a sizing guide and which figures are lower bounds. The raw reports are on #109.
Documentation
docs/performance.md(#236, #237) now leads with the three-host results, including FreeSBC's version and commit for the run. It gives sizing for CPS, concurrent calls, memory per CPS and per call, andGOMEMLIMIT. The earlier single-host numbers are kept at the end for history.- README gains a Performance section: system under test and results.
Perf tooling
- Three-host kit,
test/perf/hosts/(#236): provisioning for the loadgen, sbc and switch hosts from one address plan, measurement scripts (CPS and concurrency ladders, soak, run and rig checks, pprof capture, daily report) and a runbook. - SIPp client RTP from a thread pool (#236).
uac_call.xmlusesrtp_streaminstead ofplay_pcap_audio, which spawned a thread and socket per call and collapsed the generator at 1000 calls. - The FreeSWITCH perf profile accepts only FreeSBC's private IP, through the
freesbc_privACL (#236).
Known limitations and follow-ups
- #235: kernel receive drops on carrier-in above 3500 CPS. Calls still complete up to 4750 CPS.
- #170: the remaining per-INVITE
drainAcksgoroutine. Its 2xx wait will be bounded. - #173: allocation per request on the signaling path.
- Not measured, or only a lower bound: call setup from more than one client source IP, WebRTC beyond one generator process, TCP/TLS SIP load, SDES-SRTP. See Pending in
docs/performance.md.
Full Changelog: v0.4.0...v0.5.0