Skip to content

colibri 0.13.0

Choose a tag to compare

@c4milo c4milo released this 05 Nov 15:22
· 178 commits to main since this release

colibri 0.13.0 lets a QUIC connection resume its congestion state by RFC 9959's Careful Resume, and adds RFC 9002's NewReno as a third congestion controller. It pins stdx 51c91698, which carries stdx's Zstandard encoder, so a program that links colibri can encode zstd with the same stdx. The h3 server spends 15% fewer instructions a request. It pins chapulin 965668d2.

Breaking changes

  • stdx's platform.Cpu gains avx2 and vaes. A program that writes a platform.Cpu literal, for example in a tls.Cpu, must name both. A program that passes the value probe() returns changes nothing.
  • The QUIC structs grow: quic.Connection from 208,304 to 208,456 bytes, and server.Endpoint at its default capacity from 52,433,296 to 52,448,528 bytes. docs/performance.md lists each size.

What's new

  • Careful Resume (RFC 9959, decision 149). A server or a client gives a ResumeProvider with take, put and drop, and a connection starts from the window and round-trip time saved for its peer. It runs under CUBIC, NewReno and BBRv3 (Appendix C). ResumeState is a versioned structure of 32 bytes, and ResumeBounds limits what a connection takes. examples/server_resume.zig shows it.
  • NewReno (RFC 9002 §7, decision 133 as amended) is a third value of quic.CongestionController. BBRv3 stays the default.
  • The bulk run of bench/run.sh measures NewReno, and can keep each colibri connection's qlog.

Planned

These are ruled and documented, not built:

  • Decision 150: serve, which binds, reads its files and runs the loop through a std.Io.
  • Decision 151: JSON in server through stdx's json module.
  • Decision 152: client.Headers and client.Trailers replace WantedHeader, wanted and values, and a client can send trailers. This breaks dependents' code in a later release.

Speed

The judge counted the h3 server's instructions over steps 29d.9 to 29d.12 (design §8):

  • h3-many fell from 42,280 to 35,552 instructions a request.
  • Each step won on h3-many, and no h2 input lost.

Checked

tools/ci.sh passed all 39 sections on a62c4eb9, with Zig 0.16.0 on macOS arm64.