Methodology, up front. Each result names its scenario, its hardware, and a
status. A measured result is a real number off a real rig — trust it for the
scenario it describes, not as an SLA. A prototype result comes from a
purpose-built test harness, not the production stack — treat it as directional
evidence for a design choice. A model is a calculator, not a measurement — it
has assumed inputs you must replace with your own. We do not publish a headline
dollar figure or a peak packet-rate number, because the harnesses that would
produce them still stub parts of the path. When in doubt, re-run the measurement
on your traffic.
How to read these numbers
| Result | Status | Scenario | Hardware |
|---|---|---|---|
| Calls per %CPU vs Asterisk | Measured | Inbound answer + G.711 playback, media-plane load | GCE c4-highcpu-8 |
| QUIC vs TCP turn latency | Prototype | End-of-speech → agent-speech, WAN 50 ms RTT / ~1% loss | Purpose-built quic-go rig |
| Browser diversion tax | Prototype | Loopback capture → encoded frame round trip | Localhost Chrome |
| HTTP/3 stream throughput | Measured | 1 connection × 100 concurrent streams | Single box |
| Media fan-out CPU vs a WebRTC SFU | Measured | 1 publisher → N subscribers | Localhost and GCE c4-highcpu-8 |
| $/1k-call-minute | Model | Cost calculator, assumed media inputs | — |
Media plane: calls per unit of CPU
The gateway is a modular, shard-per-core engine with an in-process RTP media plane — audio is mixed and paced inside the same process that terminates SIP, with no per-call transcode hop and, on a fully NIC-owned deployment, a zero-copy AF_XDP fast path. The practical consequence is that it carries far more concurrent audio per CPU than a channel-driver PBX. On identical hardware (GCEc4-highcpu-8), an inbound-answer + G.711-playback
media-plane test measured:
| Engine | Sustained calls | Box CPU | Calls per %CPU |
|---|---|---|---|
| TeleQuick Voice | 3,500 | 8.38% | ~418 |
Asterisk 20.6 (chan_pjsip) | 5,000 | 44.75% | ~112 |
- Both systems capped on SIP call setup, not media. TeleQuick’s signalling runs on a single shard (shard-0), which is what pinned it at 3,500 in this test; the media plane itself sat near-idle with large headroom (media load spread dead-even across all 8 shards, ~300 Mbps NIC egress). These are floor numbers for the media plane — the ratio is a media-per-CPU advantage, not a max-concurrent-calls promise.
- It is a synthetic G.711-playback scenario. Your codec mix, recording, AI attachment, and trunk topology all move the number.
Transport: QUIC turn latency vs TCP
This is the hop where the transport choice shows up as a number. In a controlled prototype rig over a WAN link (50 ms RTT, ~1% loss), measuring the same turn — end-of-user-speech to start-of-agent-speech — over QUIC versus a TCP+TLS baseline:| Turn latency (prototype, 50 ms RTT / ~1% loss) | QUIC | TCP + TLS |
|---|---|---|
| p50 | 91.2 ms | 193.0 ms |
| p99 | 91.9 ms | 193.8 ms |
The browser diversion tax
Reusing the browser’s encoder and shipping the tapped Opus frames over QUIC instead of native SRTP/UDP is not free, but it is close to it. In the localhost diversion prototype, the JS-layer round trip measured 1.20 ms over QUIC versus 0.84 ms for raw WebRTC SRTP/UDP — a +0.36 ms tax for the tap and the QUIC hop. That is noise next to a single 20 ms Opus frame, and it buys you a single:443 plane, no SFU, and encoded-frame E2EE readiness. See
WebRTC diversion for how the
tap works.
Control plane: HTTP/3 stream throughput
The same QUIC transport carries the control plane (call setup, signalling RPC). On a single connection multiplexing 100 concurrent streams, targeted work on the stream scheduler took request throughput from 1.3K → ~47K req/s — a ~36× improvement — landing on par with a leading reference HTTP/3 implementation. Head-of-line-free multiplexing is what lets one connection carry many concurrent call-control operations without the tail blowup a TCP path shows under concurrency (see the c = 20 tail above).Media fan-out: CPU vs a WebRTC SFU
For one-to-many audio/video fan-out (supervisor monitoring, broadcast), the engine shares one encoded buffer across subscribers rather than re-encrypting per peer. Against pion (an open-source WebRTC SFU) on a 1-publisher → N-viewer fan-out, the localhost result looked lopsided:| Viewers | TeleQuick CPU | pion CPU | Ratio |
|---|---|---|---|
| 10 | 4.0% | 8.7% | 2.2× |
| 30 | 8.3% | 17% | 2.0× |
| 60 | 12.3% | 34% | 2.8× |
Cost: a model, not a headline number
There is no measured$/1k-call-minute figure to publish. The cost harness that
would produce one still stubs parts of the media-spawn path, so its dollar
tables are explicitly placeholders — a cost model you parameterize, not a
measurement of the running stack.
What the model captures is genuinely useful as a method: for a given call
profile, cost per thousand call-minutes is a function of
- compute — CPU-seconds per call-minute (the media-plane efficiency above is the lever here) times your instance’s $/CPU-hour,
- egress — bytes per call-minute (codec choice: G.711 ~64 kbps/leg vs Opus narrowband far less) times your provider’s $/GB, and
- AI runtime — per-minute ASR/LLM/TTS or speech-to-speech provider spend, which usually dominates and is entirely your vendor’s pricing.
Your mileage varies — a lot. Codec, recording, region, instance type, AI
provider, and concurrency each move cost by more than any transport optimization.
Treat the three terms above as the calculator and plug in your own measured
inputs; do not carry a single headline number between workloads.
Measure your own
Every number here is reproducible on your traffic, and doing so is the only way to get a figure you can quote to your own stakeholders.Turn latency
Log
end-of-user-speech → first-audio-out per turn and take p50/p95/p99.
The five hops and how to attribute each are in
Latency Breakdown.Media quality under load
Watch MOS, jitter, and packet loss as concurrency climbs — the media plane’s
E-model MOS is scored per call. See
MOS, Jitter & Loss.
Cost inputs
Read per-tenant, per-modality bytes and bandwidth off the traffic dashboard
and combine them with your instance and provider pricing using the model
above. See Dashboards.
Related
Latency Breakdown
The five hops of a voice turn and how to measure yours.
MOS, Jitter & Loss
Media-quality metrics scored per call under load.
From Asterisk / FreeSWITCH
The migration behind the calls-per-CPU comparison.
Architecture
The shard-per-core, in-process media design these numbers come from.