Skip navigation

Netty/Incubator/Codec/Quic 0.0.8.Final released

I am happy to announce the release of netty-incubator-codec-quic 0.0.8.Final, just after our release of netty 4.1.60.Final earlier today.

This release not only fixes a few bugs but also makes use of the new GSO support in netty if the EpollDatagramChannel is used. This change helps to improve the throughput in our benchmarks quite a bit when running h2load (patched for QUIC / HTTP3 support) against our HTTP3 implementation.

Without GSO:

norman@ubuntu-dev:~$ LD_PRELOAD="/home/norman/Apps/OpenSSL_1_1_1g-quic-draft-33/lib/libssl.so.1.1 /home/norman/Apps/OpenSSL_1_1_1g-quic-draft-33/lib/libcrypto.so.1.1"  /home/norman/Apps/nghttp2-quic/bin/h2load  -n 10 -m 1 -c 1 -t 1 -T 30 --npn-list=h3-29 https://10.211.55.8:8888
starting benchmark...
spawning thread #0: 1 total client(s). 10 total requests
TLS Protocol: TLSv1.3
Cipher: TLS_AES_128_GCM_SHA256
Server Temp Key: X25519 253 bits
Application protocol: h3-29
progress: 10% done
progress: 20% done
progress: 30% done
progress: 40% done
progress: 50% done
progress: 60% done
progress: 70% done
progress: 80% done
progress: 90% done
progress: 100% done

finished in 4.00s, 2.50 req/s, 250.36MB/s
requests: 10 total, 10 started, 10 done, 10 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 10 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 1000.31MB (1048896064) total, 30B (30) headers (space savings 70.00%), 1000.00MB (1048576000) data
UDP datagram: 18509 sent, 864619 received
                     min         max         mean         sd        +/- sd
time for request:   377.25ms    436.32ms    398.96ms     19.83ms    60.00%
time for connect:     4.46ms      4.46ms      4.46ms         0us   100.00%
time to 1st byte:     6.58ms      6.58ms      6.58ms         0us   100.00%
req/s           :       2.50        2.50        2.50        0.00   100.00%

With GSO:

norman@ubuntu-dev:~$ LD_PRELOAD="/home/norman/Apps/OpenSSL_1_1_1g-quic-draft-33/lib/libssl.so.1.1 /home/norman/Apps/OpenSSL_1_1_1g-quic-draft-33/lib/libcrypto.so.1.1"  /home/norman/Apps/nghttp2-quic/bin/h2load  -n 10 -m 1 -c 1 -t 1 -T 30 --npn-list=h3-29 https://10.211.55.8:8888
starting benchmark...
spawning thread #0: 1 total client(s). 10 total requests
TLS Protocol: TLSv1.3
Cipher: TLS_AES_128_GCM_SHA256
Server Temp Key: X25519 253 bits
Application protocol: h3-29
progress: 10% done
progress: 20% done
progress: 30% done
progress: 40% done
progress: 50% done
progress: 60% done
progress: 70% done
progress: 80% done
progress: 90% done
progress: 100% done

finished in 2.51s, 3.98 req/s, 398.08MB/s
requests: 10 total, 10 started, 10 done, 10 succeeded, 0 failed, 0 errored, 0 timeout
status codes: 10 2xx, 0 3xx, 0 4xx, 0 5xx
traffic: 1000.31MB (1048896064) total, 30B (30) headers (space savings 70.00%), 1000.00MB (1048576000) data
UDP datagram: 4342 sent, 864341 received
                     min         max         mean         sd        +/- sd
time for request:   231.79ms    272.21ms    250.80ms     15.04ms    40.00%
time for connect:     3.50ms      3.50ms      3.50ms         0us   100.00%
time to 1st byte:     4.67ms      4.67ms      4.67ms         0us   100.00%
req/s           :       3.98        3.98        3.98        0.00   100.00%

For more details related to this release see our bug-tracker.

The most important changes are:

  • Add support for qlog (#197)
  • Add QuicStreamLimitChangedEvent that will be fired once we can create more streams again (#198)
  • Ensure we always call quiche_conn_on_timeout(...) when a timeout is about to run (#206)
  • Rewrite QuicheQuicStreamChannel to not do any extra queued and also handle writability better (#208)
  • Update to latest quiche commit (#211)
  • Support shutting down the stream with an error code (#213)
  • Make use of GSO when possible (#204)

For more details about this codec in general please read our initial announcement.