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.