Closing the gap to in-kernel TCP
HTTP Workshop 2026 · Max Inden · Mozillasendto/recvfrom per datagram) with a modern Rust stack.Tracking: Bugzilla 1901292: [meta] Fast UDP for Firefox. Background: max-inden.de/post/fast-udp-io-in-firefox.
How many segments one sendmsg carries via GSO.
How many datagrams one recvmmsg / GRO read returns.
The GSO segment size chosen on send.
The size of each datagram the network delivers to us.
Total bytes handed to one sendmsg.
Total bytes returned by one recvmmsg / GRO read.
sendmmsg / recvmmsg; macOS sendmsg_x / recvmsg_x (Apple, undocumented, quinn#1993).<1 → 4 Gbit/s on CPU-bound transfers.
HttpConnectionUDP::OnPacketReceived, Firefox 154 loading a page: neqo’s per-packet receive path. Widest leaves are sendmsg / recvmmsg; the tall middle branch is Connection::input → decrypt. Profile: share.firefox.dev/3T9RKSh. Throughput: max-inden.de/post/fast-udp-io-in-firefox.Windows
macOS
sendmsg_x/recvmsg_x are now enabled (bug 2028797): a dedicated background thread exercises them once against localhost sockets before we trust them (AppleFastDatapathProbe).Linux
EIO, resend individually (bug 2049334, quinn#2399).Android
socketcall; seccomp blocks it (quinn#1966).EINVAL when setting ECN, retry without (quinn#2079).sendmsg_x on macOS (bug 2028797).~5.7 / 5.5 Gbit/s single-connection. These are artificial benchmarks: neqo’s criterion suite over loopback (127.0.0.1), one machine, no real network and no browser, so an upper bound, not field performance. Source: neqo#3768 benchmark run.
HTTP/3 upload throughput is up ~60-90% across percentiles over the last ~11 Firefox releases.
No single cause: many small compounding wins, including
Takeaways