Benchmarks · iperf3
Saphira Linux hits 713 Gbit/s aggregate TCP throughput
A measured ten-second iperf3 run transferred 830 GB at 713 Gbit/s. The number is unusual; the console output and the limits of the test are published with it.
The result
These are measurements taken from the Saphira system used to build and test the platform, not a synthetic marketing chart. A parallel TCP run reached 713 Gbit/s over ten seconds, transferring 830 GB. That is 0.713 Tbit/s — not 0.75 Tbit/s — so 713 Gbit/s is the headline we publish.
We said the exact number because it is the true number. We do not do marketing bullshit: if we cannot prove a figure with its command, route and terminal output, we do not tell it. It's so simple it hurts.
It's so fast the wires may get warm. Or they may not — claiming that they do would be marketing. What the evidence does show is that this has turned the heat up on an otherwise untuned network stack.
The useful finding is the shape of the scaling curve. Three streams reached 404 Gbit/s; four reached 524 Gbit/s; five reached 573 Gbit/s; and the observed eight-stream peak reached 713 Gbit/s. A second eight-stream run still delivered 691 Gbit/s with zero retransmissions. Higher concurrency did not improve the completed-run total: the nineteen-stream run recorded 312 Gbit/s with 33 retransmissions, suggesting CPU scheduling, queue contention and processing overhead had become the limiting work.
| Parallel streams | Transfer | Receiver throughput | Sender retransmissions |
|---|---|---|---|
| -P3 | 470 GB | 404 Gbit/s | 0 |
| -P4 | 610 GB | 524 Gbit/s | 0 |
| -P5 | 668 GB | 573 Gbit/s | 0 |
| -P8 (peak) | 830 GB | 713 Gbit/s | Not recorded by server |
| -P8 (repeat) | 804 GB | 691 Gbit/s | 0 |
| -P12 | 569 GB | 488 Gbit/s | 40 |
| -P16 | 293 GB | 251 Gbit/s | 78 |
| -P18 | 296 GB | 254 Gbit/s | 93 |
| -P19 | 364 GB | 312 Gbit/s | 33 |
| -P24 | 276 GB | 237 Gbit/s | 103 |
Real network paths
The following runs use Egg's routable address, 2a02:8012:bc57:c0ff::babe, rather than loopback. They are therefore reported separately from the local TCP results above.
From Minimer, the path crosses its gateway and gateway.akadata.ltd before entering Egg. The stated topology has two 1 Gbit/s sections before the 2.5 Gbit/s segment and KVM port. Both the single-stream and four-stream results settle at about 950 Mbit/s: exactly what the narrowest 1 Gbit/s path can deliver. Four streams divide the bandwidth almost perfectly at about 238 Mbit/s each; they fill the link, rather than bypass it. A later Minimer run repeats the result at 957 Mbit/s with one stream and 949 Mbit/s with two: the same three-hop path, the same 1 Gbit/s ceiling, and a second data point.
Route provides the next step up: its traceroute reaches Egg through gateway.akadata.ltd in two hops, over the stated 2.5 Gbit/s route into Homer, KVM and VirtIO. One TCP stream delivers 2.47 Gbit/s for ten seconds, transferring 2.87 GB with no retransmissions. Four streams also total 2.47 Gbit/s and transfer 2.88 GB, again with zero retransmissions. This is a real network-path result that reaches the expected 2.5 Gbit/s ceiling rather than a localhost or host-only measurement.
Spaghetti, a KVM guest at www.az2.co.uk, provides a separate three-hop route to Egg: VirtIO → Route → 2.5 Gbit/s → Homer → KVM. Its single-stream run transfers 2.86 GB at 2.46 Gbit/s; four streams transfer 2.87 GB at 2.47 Gbit/s. Both client results record zero retransmissions. This is a second routed, virtual-machine-to-virtual-machine validation of the 2.5 Gbit/s path.
The separate one-hop peer capture from c0ff::1reaches 226 Gbit/s with four streams, and the supplied eight-stream network summary records 177 Gbit/s. Those totals cannot have crossed a physical 2.5 Gbit/s port, so this page does not describe them as a 2.5 Gbit/s-wire result. The server output establishes the endpoints and totals; its virtual topology will be published when that route is captured.
| Client / capture | Streams | Transfer | Receiver throughput | Scope |
|---|---|---|---|---|
| Minimer initial · 2a02:8012:bc57:253::2 | -P1 | 1.10 GB | 946 Mbit/s | Three-hop path; 1 Gbit/s limited |
| Minimer initial · 2a02:8012:bc57:253::2 | -P4 | 1.11 GB | 951 Mbit/s | Three-hop path; 1 Gbit/s limited |
| Minimer repeat · 2a02:8012:bc57:253::2 | -P1 | 1.11 GB | 957 Mbit/s | Three-hop path; 1 Gbit/s limited |
| Minimer repeat · 2a02:8012:bc57:253::2 | -P2 | 1.11 GB | 949 Mbit/s | Three-hop path; 1 Gbit/s limited |
| Route · 2a02:8012:bc57:db00:cafe:c0ff:ee:db | -P1 | 2.87 GB | 2.47 Gbit/s | Two-hop route; 2.5 Gbit/s path into KVM/VirtIO |
| Route · 2a02:8012:bc57:db00:cafe:c0ff:ee:db | -P4 | 2.88 GB | 2.47 Gbit/s | Two-hop route; 0 retransmissions |
| Spaghetti VM · 2a02:8012:bc57:fead::bbbb | -P1 | 2.86 GB | 2.46 Gbit/s | Three-hop VirtIO → Route → 2.5 Gbit/s → Homer → KVM |
| Spaghetti VM · 2a02:8012:bc57:fead::bbbb | -P4 | 2.87 GB | 2.47 Gbit/s | Three-hop VirtIO → Route → 2.5 Gbit/s → Homer → KVM; 0 retransmissions |
| One-hop peer · 2a02:8012:bc57:c0ff::1 | -P4 | 263 GB | 226 Gbit/s | Server capture; virtual path details pending |
| Network P8 capture | -P8 | 206 GB | 177 Gbit/s | Server summary supplied without peer line |
Minimer → gateway → gateway.akadata.ltd → Egg
[root@minimer network]# traceroute 2a02:8012:bc57:c0ff::babe
traceroute to 2a02:8012:bc57:c0ff::babe (2a02:8012:bc57:c0ff::babe), 30 hops max, 80 byte packets
1 _gateway (2a02:8012:bc57:253::1) 0.175 ms 0.102 ms 0.140 ms
2 gateway.akadata.ltd (2a02:8012:bc57:1::2) 0.240 ms 0.215 ms 0.187 ms
3 egg.saphira.vm2.uk (2a02:8012:bc57:c0ff::babe) 1.244 ms 1.254 ms 1.073 ms
Minimer repeat results
[smalley@minimer ~]$ traceroute egg.saphira.vm2.uk
traceroute to egg.saphira.vm2.uk (2a02:8012:bc57:c0ff::babe), 30 hops max, 80 byte packets
1 _gateway (2a02:8012:bc57:253::1) 0.124 ms 0.082 ms 0.108 ms
2 gateway.akadata.ltd (2a02:8012:bc57:1::2) 0.276 ms 0.264 ms 0.284 ms
3 egg.saphira.vm2.uk (2a02:8012:bc57:c0ff::babe) 0.732 ms * 0.714 ms
Server listening on 5201 (test #14)
Accepted connection from 2a02:8012:bc57:253::2, port 32778
[ 5] 0.00-10.00 sec 1.11 GBytes 957 Mbits/sec receiver
Server listening on 5201 (test #15)
Accepted connection from 2a02:8012:bc57:253::2, port 53874
[ 5] 0.00-10.00 sec 566 MBytes 474 Mbits/sec receiver
[ 8] 0.00-10.00 sec 566 MBytes 474 Mbits/sec receiver
[SUM] 0.00-10.00 sec 1.11 GBytes 949 Mbits/sec receiver
Route → gateway.akadata.ltd → Egg (2.5 Gbit/s path)
route:~$ traceroute -6 egg.saphira.vm2.uk
traceroute to egg.saphira.vm2.uk (2a02:8012:bc57:c0ff::babe), 30 hops max, 80 byte packets
1 gateway.akadata.ltd (2a02:8012:bc57:1::2) 0.163 ms 0.170 ms 0.151 ms
2 egg.saphira.vm2.uk (2a02:8012:bc57:c0ff::babe) 1.487 ms 1.410 ms *
Route client results
route:~$ iperf3 -c egg.saphira.vm2.uk
Connecting to host egg.saphira.vm2.uk, port 5201
[ 5] local 2a02:8012:bc57:db00:cafe:c0ff:ee:db port 43272 connected to 2a02:8012:bc57:c0ff::babe port 5201
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 2.88 GBytes 2.47 Gbits/sec 0 sender
[ 5] 0.00-10.00 sec 2.87 GBytes 2.47 Gbits/sec receiver
route:~$ iperf3 -c egg.saphira.vm2.uk -P4
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 737 MBytes 618 Mbits/sec 0 sender
[ 7] 0.00-10.00 sec 737 MBytes 618 Mbits/sec 0 sender
[ 9] 0.00-10.00 sec 982 MBytes 824 Mbits/sec 0 sender
[ 11] 0.00-10.00 sec 492 MBytes 413 Mbits/sec 0 sender
[SUM] 0.00-10.00 sec 2.88 GBytes 2.47 Gbits/sec 0 sender
[SUM] 0.00-10.00 sec 2.88 GBytes 2.47 Gbits/sec receiver
Spaghetti → gateway → gateway.akadata.ltd → Egg
[smalley@spaghetti ~]$ traceroute egg.saphira.vm2.uk
traceroute to egg.saphira.vm2.uk (2a02:8012:bc57:c0ff::babe), 30 hops max, 80 byte packets
1 _gateway (2a02:8012:bc57:fead::1) 0.184 ms 0.150 ms 0.131 ms
2 gateway.akadata.ltd (2a02:8012:bc57:1::2) 0.369 ms 0.344 ms 0.327 ms
3 egg.saphira.vm2.uk (2a02:8012:bc57:c0ff::babe) 1.664 ms 1.481 ms 1.617 ms
[smalley@spaghetti ~]$ iperf3 -c egg.saphira.vm2.uk
[ 5] local 2a02:8012:bc57:fead::bbbb port 48874 connected to 2a02:8012:bc57:c0ff::babe port 5201
[ 5] 0.00-10.00 sec 2.87 GBytes 2.46 Gbits/sec 0 sender
[ 5] 0.00-10.00 sec 2.86 GBytes 2.46 Gbits/sec receiver
[smalley@spaghetti ~]$ iperf3 -c egg.saphira.vm2.uk -P4
[SUM] 0.00-10.00 sec 2.88 GBytes 2.48 Gbits/sec 0 sender
[SUM] 0.00-10.00 sec 2.87 GBytes 2.47 Gbits/sec receiver
Network server summaries
Server listening on 5201 (test #1)
Accepted connection from 2a02:8012:bc57:253::2, port 53926
[ 5] local 2a02:8012:bc57:c0ff::babe port 5201 connected to 2a02:8012:bc57:253::2 port 53940
[ ID] Interval Transfer Bitrate
[ 5] 0.00-10.00 sec 1.10 GBytes 946 Mbits/sec receiver
Server listening on 5201 (test #2)
Accepted connection from 2a02:8012:bc57:253::2, port 43426
[ ID] Interval Transfer Bitrate
[ 5] 0.00-10.00 sec 283 MBytes 238 Mbits/sec receiver
[ 8] 0.00-10.00 sec 283 MBytes 238 Mbits/sec receiver
[ 10] 0.00-10.00 sec 283 MBytes 238 Mbits/sec receiver
[ 12] 0.00-10.00 sec 283 MBytes 238 Mbits/sec receiver
[SUM] 0.00-10.00 sec 1.11 GBytes 951 Mbits/sec receiver
Server listening on 5201 (test #3)
Accepted connection from 2a02:8012:bc57:c0ff::1, port 44914
[SUM] 0.00-10.00 sec 263 GBytes 226 Gbits/sec receiver
Server listening on 5201 (test #6)
[SUM] 0.00-10.00 sec 206 GBytes 177 Gbits/sec receiver
Virtual switching and external baseline
These results use the existing system configuration. No benchmark-specific sysctl tuning was applied. Internal network segments use an MTU of 9000, and Open vSwitch is used extensively on Minimer, Homer and the current Route host to join guests, gateways and service networks.
The Route host currently runs Alpine Linux. It is intended to be replaced with Saphira-S after the pppd and rp-pppoe stacks have been proven. The planned external path isrp-pppoe → Route (10 GbE) → Route (2.5 GbE) → Homer (2.5 GbE) → KVM.
Homer's external connection establishes that the available Internet service is not the 1 Gbit/s ceiling seen on Minimer. A multi-connection speed test measured 2,216.19 Mbit/s download, 2,232.67 Mbit/s upload and 4 ms ping; download latency was 74 ms and upload latency 7 ms.
Open vSwitch topology summary
Minimer
Bridge dnsnet0
Port vnet4
Port dnsgw0 (internal)
Bridge mailnetwork0
Port vnet3
Port mailgw0 (internal)
[smalley@homer ~]$ sudo ovs-vsctl show
Bridge aka0
Port vnet62
Port vnet61
Port vnet59
Port agw0 (internal)
[smalley@route ~]$ sudo ovs-vsctl show
Bridge servernet0
Port vnet32
Port vnet31
Port vnet25
Port vnet33
Port vnet23
Port servergw0 (internal)
Additional Route bridges: datanet0, ns1network0, internet0, ns0net0
2,216.19
Mbit/s download
2,232.67
Mbit/s upload
4 ms
Ping
Test run on Homer via Speedtest result 19612689410.
Test system and scope
Egg is a 24-vCPU Intel Core i9-13900K virtual machine running under libvirt/KVM. Its VirtIO network device is configured with 24 queues. iperf3 was run as a TCP client and server on Egg for ten seconds per completed run.
The captured commands target ::1. This is therefore an IPv6 loopback benchmark: it exercises the Linux TCP/IP stack and host CPU, but does not traverse Egg's VirtIO NIC, Open vSwitch or a physical link. The queue count is useful system context, not the path measured by these results.
DNS may be active elsewhere in the test environment, but the recorded iperf3 commands use a literal IPv6 address. Name resolution is therefore not part of this measured TCP flow, and these results are not presented as a DNS benchmark.
No 800G network card or cable carried the loopback traffic. The guest-to-guest and externally routed cases above are separately labelled with their client address, route and available VirtIO/Open vSwitch context.
- System
- Egg
- CPU allocation
- 24 vCPU, Intel Core i9-13900K
- Virtualisation
- libvirt/KVM
- VirtIO queues
- 24
- Protocol
- TCP over IPv6 loopback
- Endpoint
- ::1:5201
- Duration
- 10 seconds per completed run
The console behind the peak
The eight-stream client command is reconstructed from the server transcript, which records eight accepted connections. The supplied client capture starts after that command, but records its final receiver total below. We keep that distinction visible rather than invent a complete transcript.
smalley@egg:~$ iperf3 -c ::1 -P8
...
[SUM] 6.00-7.00 sec 81.1 GBytes 696 Gbits/sec
[SUM] 7.00-8.00 sec 81.6 GBytes 701 Gbits/sec
[SUM] 8.00-9.00 sec 85.0 GBytes 730 Gbits/sec
[SUM] 9.00-10.00 sec 74.7 GBytes 642 Gbits/sec
...
[SUM] 0.00-10.00 sec 830 GBytes 713 Gbits/sec receiver
More real client results
The zero-retransmission three-, four- and five-stream runs show that the aggregate result did not depend on a single stream. Full client and server transcripts are kept with the project as tests/iperf3.client.txt and tests/iperf3.server.txt.
smalley@egg:~$ iperf3 -c ::1 -P5
...
[SUM] 0.00-10.00 sec 668 GBytes 573 Gbits/sec 0 sender
[SUM] 0.00-10.00 sec 668 GBytes 573 Gbits/sec receiver
smalley@egg:~$ iperf3 -c ::1 -P4
...
[SUM] 0.00-10.00 sec 610 GBytes 524 Gbits/sec 0 sender
[SUM] 0.00-10.00 sec 610 GBytes 524 Gbits/sec receiver
smalley@egg:~$ iperf3 -c ::1 -P3
...
[SUM] 0.00-10.00 sec 470 GBytes 404 Gbits/sec 0 sender
[SUM] 0.00-10.00 sec 470 GBytes 404 Gbits/sec receiver
Local -P8 repeat and -P19 comparison
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 90.6 GBytes 77.8 Gbits/sec 0 sender
[ 7] 0.00-10.00 sec 92.9 GBytes 79.8 Gbits/sec 0 sender
[ 9] 0.00-10.00 sec 122 GBytes 105 Gbits/sec 0 sender
[ 11] 0.00-10.00 sec 99.5 GBytes 85.5 Gbits/sec 0 sender
[ 13] 0.00-10.00 sec 89.8 GBytes 77.1 Gbits/sec 0 sender
[ 15] 0.00-10.00 sec 117 GBytes 100 Gbits/sec 0 sender
[ 17] 0.00-10.00 sec 87.0 GBytes 74.7 Gbits/sec 0 sender
[ 19] 0.00-10.00 sec 105 GBytes 90.5 Gbits/sec 0 sender
[SUM] 0.00-10.00 sec 804 GBytes 691 Gbits/sec 0 sender
[SUM] 0.00-10.00 sec 804 GBytes 691 Gbits/sec receiver
[ ID] Interval Transfer Bitrate Retr
[SUM] 0.00-10.00 sec 364 GBytes 312 Gbits/sec 33 sender
[SUM] 0.00-10.01 sec 364 GBytes 312 Gbits/sec receiver
iperf Done.
What comes next
Raw TCP is only the first layer. Saphira networking includes Linux, VirtIO, Open vSwitch, nftables, IPVS/LVS and the userspace needed to build real infrastructure. The next results will move up that stack: guest network topology and queue-count comparisons, Open vSwitch flow distribution, LVS/IPVS connection scaling, HAProxy HTTP/TLS workloads, IPv4-versus-IPv6 paths, and storage-backed service traffic.
The intention is to measure the whole path, not merely the easiest number to publish. Every benchmark here will retain its role, CPU allocation, queue count, protocol, command, duration and terminal output. Extraordinary numbers are easy to type. We prefer to show the console.
That is not a slogan. It is the rule: no proof, no claim. The truth can occasionally hurt, but it is more useful than marketing bullshit.
713 Gbit/s was not the target. It was simply what happened when Saphira had work to do. The interesting benchmarks are still to come.