neqo
neqo copied to clipboard
fix(transport/ecn): start after handshake and path validation
Fixes https://github.com/mozilla/neqo/issues/2490.
Only start ECN marking and thus ECN-Path validation when:
- Connection handshake is confirmed.
- AND, for any secondary path, path is validated (e.g. via
PATH_RESPONSE).
Draft for now. Opening up early to prevent duplicate work.
Failed Interop Tests
QUIC Interop Runner, client vs. server, differences relative to 0bd3933b2ccfed140b903cc76e7a7f8c1daa3c56.
neqo-latest as client
- neqo-latest vs. aioquic: :warning:DC LR C20 M 3 :rocket:~~L2 C1~~ C2 :rocket:~~BP BA~~ :warning:V2
- neqo-latest vs. go-x-net: :rocket:~~DC M~~ :warning:H LR L2 C2 BP BA
- neqo-latest vs. haproxy: :rocket:~~H~~ :warning:DC C20 :warning:M 3 B :warning:U L1 :rocket:~~6~~ :warning:L2 C1 C2 BP BA
- neqo-latest vs. kwik: :rocket:~~H DC U A~~ :warning:S L1 :warning:L2 C1 :rocket:~~C2~~ BP BA
- neqo-latest vs. linuxquic: S :rocket:~~3~~ U :warning:E L1 C1 :rocket:~~C2 V2 BP~~ :warning:6 BA
- neqo-latest vs. lsquic: DC :rocket:~~M~~ :warning:U E L1 L2 C1 :rocket:~~C2 CM~~ :warning:V2 BA
- neqo-latest vs. msquic: :rocket:~~LR C20 M~~ :warning:H DC S R Z B U A L1 L2 C1 :rocket:~~BP~~ :warning:V2
- neqo-latest vs. mvfst: :rocket:~~H DC~~ :warning:LR Z :rocket:~~B~~ :warning:U A L1 :warning:C1 BP
- neqo-latest vs. neqo: :warning:R Z U A :rocket:~~L2 C1 CM~~ :warning:L1 C2 6 V2 BP
- neqo-latest vs. neqo-latest: :rocket:~~LR C20~~ :warning:M S R :rocket:~~U~~ A L2 :rocket:~~C1 BP~~ :warning:C2 V2 BA
- neqo-latest vs. nginx: :rocket:~~H~~ DC :warning:LR C20 M :rocket:~~R~~ Z :warning:3 B U A L1 L2 :warning:C1 C2 :rocket:~~6~~ BP BA
- neqo-latest vs. ngtcp2: :rocket:~~S L1 L2~~ :warning:DC LR C20 R Z E C1 C2 6 BA CM
- neqo-latest vs. picoquic: :rocket:~~C20 S R Z 3 U~~ :warning:H B E A L1 C1 :rocket:~~C2~~ :warning:6 BP :rocket:~~BA~~
- neqo-latest vs. quic-go: H :rocket:~~DC LR R 3 U~~ :warning:M S A :rocket:~~L1 L2~~ BA
- neqo-latest vs. quiche: H :rocket:~~LR C2~~ :warning:M S 3 BP BA
- neqo-latest vs. quinn: :rocket:~~LR M~~ :warning:C20 S R Z 3 A L1 :rocket:~~C1 BA~~
- neqo-latest vs. s2n-quic: :warning:DC LR S R :warning:3 E :warning:A L1 :rocket:~~C1~~ :warning:C2 BA CM
- neqo-latest vs. tquic: :rocket:~~H LR~~ :warning:DC C20 S :rocket:~~C2~~ :warning:U A BP BA
- neqo-latest vs. xquic: :rocket:~~LR~~ R :warning:3 A L1 C1 :rocket:~~BP BA~~
neqo-latest as server
- aioquic vs. neqo-latest: run cancelled after 20 min
- chrome vs. neqo-latest: 3
- go-x-net vs. neqo-latest: :rocket:~~L2 C2~~ :warning:H DC 6 CM
- kwik vs. neqo-latest: H :rocket:~~LR 6~~ :warning:S Z B L2 BP :warning:BA
- linuxquic vs. neqo-latest: :warning:H DC E 6 V2
- lsquic vs. neqo-latest: run cancelled after 20 min
- msquic vs. neqo-latest: :rocket:~~C20 S B L2 C2~~ :warning:LR CM
- mvfst vs. neqo-latest: LR Z :rocket:~~A~~ L1 :warning:L2 C1 CM
- neqo vs. neqo-latest: H C20 :rocket:~~M R Z 3 U~~ :warning:S E A C2 :rocket:~~6 BP~~
- ngtcp2 vs. neqo-latest: :warning:C1 C2 6
- openssl vs. neqo-latest: LR :rocket:~~C20~~ M :rocket:~~S~~ R :rocket:~~3~~ A :rocket:~~L2 BA~~ :warning:C2 6 CM
- picoquic vs. neqo-latest: :warning:3 A C2 V2 BP BA
- quic-go vs. neqo-latest: :rocket:~~DC~~ C20 :rocket:~~M~~ S :rocket:~~R~~ Z :rocket:~~3~~ :warning:A L1 L2 :rocket:~~BP~~ :warning:C2 CM
- quiche vs. neqo-latest: H :rocket:~~DC R 3 C2~~ :warning:S B L1 BP :warning:BA CM
- quinn vs. neqo-latest: :rocket:~~DC~~ :warning:H LR :rocket:~~B~~ :warning:R U A L1 L2 :rocket:~~C1 C2 6~~ V2 :warning:BP CM
- s2n-quic vs. neqo-latest: LR :rocket:~~B C2 6~~ :warning:E A L2 BA CM
- tquic vs. neqo-latest: run cancelled after 20 min
- xquic vs. neqo-latest: :warning:H M 3 6
All results
Succeeded Interop Tests
QUIC Interop Runner, client vs. server
neqo-latest as client
- neqo-latest vs. aioquic: H :warning:DC LR C20 S R Z B U A L1 :rocket:~~L2 C1~~ 6 :warning:V2 :rocket:~~BP BA~~
- neqo-latest vs. go-x-net: :warning:H LR :rocket:~~DC M~~ B U A :warning:L2 C2 6
- neqo-latest vs. haproxy: :warning:DC :rocket:~~H~~ LR :warning:M S R Z :warning:3 U A :warning:L2 C1 C2 :rocket:~~6~~ V2
- neqo-latest vs. kwik: :rocket:~~H DC~~ LR C20 M :warning:S R Z 3 B :warning:L2 :rocket:~~U A C2~~ 6 V2
- neqo-latest vs. linuxquic: H DC LR C20 M R Z :rocket:~~3~~ B :warning:E A L2 :warning:6 BA :rocket:~~C2 V2 BP~~ CM
- neqo-latest vs. lsquic: H LR C20 :rocket:~~M~~ S R Z 3 B :warning:U E A :rocket:~~C2~~ 6 :warning:V2 BP :warning:BA :rocket:~~CM~~
- neqo-latest vs. msquic: :warning:H DC S :rocket:~~LR C20 M~~ C2 6 :warning:V2 :rocket:~~BP~~ BA
- neqo-latest vs. mvfst: :warning:LR :rocket:~~H DC~~ M R 3 :warning:U :rocket:~~B~~ L2 :warning:C1 C2 6 :warning:BP BA
- neqo-latest vs. neqo: H DC LR C20 M S :warning:R Z 3 B :warning:U E :warning:L1 C2 6 V2 BP :rocket:~~L2 C1~~ BA :rocket:~~CM~~
- neqo-latest vs. neqo-latest: H DC :warning:M S :rocket:~~LR C20~~ Z 3 B :rocket:~~U~~ E L1 :warning:C2 :rocket:~~C1~~ 6 :warning:V2 BA :rocket:~~BP~~ CM
- neqo-latest vs. nginx: :warning:LR :rocket:~~H~~ S :warning:3 B U A L1 C1 :rocket:~~R 6~~
- neqo-latest vs. ngtcp2: H :warning:DC LR C20 M :warning:R Z :rocket:~~S~~ 3 B U :warning:E A :warning:C1 C2 6 :rocket:~~L1 L2~~ V2 BP :warning:BA
- neqo-latest vs. picoquic: :warning:H DC LR :rocket:~~C20~~ M :warning:B E :rocket:~~S R Z 3 U~~ L2 :warning:6 :rocket:~~C2~~ V2 :rocket:~~BA~~
- neqo-latest vs. quic-go: :rocket:~~DC LR~~ C20 :warning:M S :rocket:~~R~~ Z :rocket:~~3~~ B :rocket:~~U L1 L2~~ C1 C2 6 BP
- neqo-latest vs. quiche: DC :rocket:~~LR~~ C20 :warning:M S R Z :warning:3 B U A L1 L2 C1 :rocket:~~C2~~ 6
- neqo-latest vs. quinn: H DC :warning:C20 S :rocket:~~LR M~~ B U E L2 :rocket:~~C1~~ C2 6 BP :rocket:~~BA~~
- neqo-latest vs. s2n-quic: H :warning:DC LR C20 M :warning:S 3 B U :warning:A L2 :warning:C2 :rocket:~~C1~~ 6 BP
- neqo-latest vs. tquic: :warning:DC C20 :rocket:~~H LR~~ M R Z 3 B :warning:U A L1 L2 C1 :rocket:~~C2~~ 6
- neqo-latest vs. xquic: H DC :rocket:~~LR~~ C20 M Z :warning:3 B U L2 C2 6 :rocket:~~BP BA~~
neqo-latest as server
- go-x-net vs. neqo-latest: :warning:H DC LR M B U :warning:6 :rocket:~~L2 C2~~ BP BA
- kwik vs. neqo-latest: DC :rocket:~~LR~~ C20 :warning:M S R :warning:Z 3 :warning:B U :rocket:~~A~~ L1 :warning:L2 C1 C2 :rocket:~~6~~ V2
- linuxquic vs. neqo-latest: :rocket:~~LR C20 M S R Z 3 B U A L1 L2 C1 C2 BP BA CM~~
- msquic vs. neqo-latest: H DC :warning:LR :rocket:~~C20~~ M :rocket:~~S R~~ Z :rocket:~~B~~ U L1 :rocket:~~L2~~ C1 :rocket:~~C2~~ 6 V2 :warning:BP BA
- mvfst vs. neqo-latest: H DC M 3 B :warning:L2 C2 6 BP :warning:BA
- neqo vs. neqo-latest: DC LR :warning:S :rocket:~~M R Z 3~~ B :warning:E :rocket:~~U~~ L1 L2 C1 :rocket:~~6~~ V2 :rocket:~~BP~~ BA CM
- ngtcp2 vs. neqo-latest: :rocket:~~H DC LR C20 M S R Z 3 B U E A L1 L2 V2 BA~~
- openssl vs. neqo-latest: H DC :rocket:~~C20 S 3~~ B :warning:C2 6 :rocket:~~L2~~ BP :rocket:~~BA~~
- picoquic vs. neqo-latest: :rocket:~~H DC LR C20 M S R Z B U E L1 L2 C1 6 CM~~
- quic-go vs. neqo-latest: H :rocket:~~DC~~ LR :rocket:~~M R 3~~ B U :warning:A L1 C1 :warning:C2 6 :rocket:~~BP~~ BA
- quiche vs. neqo-latest: :rocket:~~DC~~ LR M :warning:S :rocket:~~R~~ Z :warning:B :rocket:~~3~~ A :warning:L1 L2 C1 :rocket:~~C2~~ 6 :warning:BA
- quinn vs. neqo-latest: :warning:H :rocket:~~DC~~ C20 M S :warning:R Z 3 :warning:U :rocket:~~B~~ E :warning:A BP :rocket:~~C1 C2 6~~ BA
- s2n-quic vs. neqo-latest: H DC M S R 3 :warning:E A :rocket:~~B~~ L1 :warning:L2 C1 :rocket:~~C2 6~~ BP :warning:BA
- xquic vs. neqo-latest: :rocket:~~DC LR C20 S R Z B U A L1 L2 C1 C2 BP BA~~
Unsupported Interop Tests
QUIC Interop Runner, client vs. server
neqo-latest as client
- neqo-latest vs. aioquic: E CM
- neqo-latest vs. go-x-net: C20 S R Z 3 E L1 C1 V2 CM
- neqo-latest vs. haproxy: E CM
- neqo-latest vs. kwik: E CM
- neqo-latest vs. msquic: 3 E CM
- neqo-latest vs. mvfst: C20 S E V2 CM
- neqo-latest vs. nginx: E V2 CM
- neqo-latest vs. picoquic: CM
- neqo-latest vs. quic-go: E V2 CM
- neqo-latest vs. quiche: E V2 CM
- neqo-latest vs. quinn: V2 CM
- neqo-latest vs. s2n-quic: Z V2
- neqo-latest vs. tquic: E V2 CM
- neqo-latest vs. xquic: S E V2 CM
neqo-latest as server
- chrome vs. neqo-latest: H DC LR C20 M S R Z B U E A L1 L2 C1 C2 6 V2 BP BA CM
- go-x-net vs. neqo-latest: C20 S R Z 3 E A L1 C1 V2 CM
- kwik vs. neqo-latest: M E A BA CM
- msquic vs. neqo-latest: R 3 E A BP
- mvfst vs. neqo-latest: C20 S R U E A V2 BA
- ngtcp2 vs. neqo-latest: BP CM
- openssl vs. neqo-latest: Z U E L1 C1 V2
- quic-go vs. neqo-latest: E V2
- quiche vs. neqo-latest: C20 U E V2
- s2n-quic vs. neqo-latest: C20 Z U V2
- xquic vs. neqo-latest: E V2 CM
Benchmark results
Performance differences relative to 3909abe17a4f9a6e8d85fd0a0d0b80571042c88c.
1-conn/1-100mb-resp/mtu-1504 (aka. Download)/client: Change within noise threshold.
time: [653.17 ms 654.62 ms 656.13 ms]
thrpt: [152.41 MiB/s 152.76 MiB/s 153.10 MiB/s]
change:
time: [−0.6433% −0.3870% −0.1110%] (p = 0.00 +0.3885% +0.6475%]
Found 4 outliers among 100 measurements (4.00%)
4 (4.00%) high mild
1-conn/10_000-parallel-1b-resp/mtu-1504 (aka. RPS)/client: No change in performance detected.
time: [305.14 ms 306.57 ms 307.97 ms]
thrpt: [32.471 Kelem/s 32.619 Kelem/s 32.771 Kelem/s]
change:
time: [−0.3048% +0.3810% +1.0538%] (p = 0.27 > 0.05)
thrpt: [−1.0428% −0.3796% +0.3058%]
1-conn/1-1b-resp/mtu-1504 (aka. HPS)/client: No change in performance detected.
time: [26.913 ms 27.053 ms 27.213 ms]
thrpt: [36.748 elem/s 36.965 elem/s 37.156 elem/s]
change:
time: [−0.4503% +0.2610% +1.0196%] (p = 0.47 > 0.05)
thrpt: [−1.0093% −0.2603% +0.4523%]
Found 6 outliers among 100 measurements (6.00%)
6 (6.00%) high severe
1-conn/1-100mb-req/mtu-1504 (aka. Upload)/client: Change within noise threshold.
time: [660.83 ms 662.31 ms 663.80 ms]
thrpt: [150.65 MiB/s 150.99 MiB/s 151.32 MiB/s]
change:
time: [−0.6393% −0.3896% −0.1148%] (p = 0.00 +0.3911% +0.6435%]
decode 4096 bytes, mask ff: No change in performance detected.
time: [11.818 µs 11.864 µs 11.914 µs]
change: [−0.0598% +0.2597% +0.6180%] (p = 0.13 > 0.05)
Found 15 outliers among 100 measurements (15.00%)
3 (3.00%) low mild
1 (1.00%) high mild
11 (11.00%) high severe
decode 1048576 bytes, mask ff: No change in performance detected.
time: [3.0218 ms 3.0312 ms 3.0423 ms]
change: [−0.4463% +0.0386% +0.5230%] (p = 0.89 > 0.05)
Found 10 outliers among 100 measurements (10.00%)
1 (1.00%) low mild
9 (9.00%) high severe
decode 4096 bytes, mask 7f: No change in performance detected.
time: [19.922 µs 19.964 µs 20.014 µs]
change: [−0.5146% −0.0800% +0.4248%] (p = 0.75 > 0.05)
Found 17 outliers among 100 measurements (17.00%)
2 (2.00%) low severe
5 (5.00%) low mild
1 (1.00%) high mild
9 (9.00%) high severe
decode 1048576 bytes, mask 7f: No change in performance detected.
time: [5.0444 ms 5.0556 ms 5.0685 ms]
change: [−0.4599% −0.0952% +0.2405%] (p = 0.60 > 0.05)
Found 12 outliers among 100 measurements (12.00%)
12 (12.00%) high severe
decode 4096 bytes, mask 3f: No change in performance detected.
time: [8.2596 µs 8.2896 µs 8.3259 µs]
change: [−0.3200% +0.0738% +0.5247%] (p = 0.75 > 0.05)
Found 23 outliers among 100 measurements (23.00%)
2 (2.00%) low severe
6 (6.00%) low mild
3 (3.00%) high mild
12 (12.00%) high severe
decode 1048576 bytes, mask 3f: No change in performance detected.
time: [1.5849 ms 1.5905 ms 1.5973 ms]
change: [−0.6282% −0.1014% +0.4344%] (p = 0.70 > 0.05)
Found 8 outliers among 100 measurements (8.00%)
2 (2.00%) high mild
6 (6.00%) high severe
1000 streams of 1 bytes/multistream: :broken_heart: Performance has regressed.
time: [50.923 ns 51.040 ns 51.164 ns]
change: [+55.287% +56.773% +58.245%] (p = 0.00 Found 31 outliers among 500 measurements (6.20%)
2 (0.40%) low severe
9 (1.80%) low mild
3 (0.60%) high mild
17 (3.40%) high severe1000 streams of 1000 bytes/multistream: :broken_heart: Performance has regressed.
time: [51.241 ns 51.379 ns 51.525 ns]
change: [+61.845% +63.311% +64.761%] (p = 0.00 Found 43 outliers among 500 measurements (8.60%)
1 (0.20%) low severe
5 (1.00%) low mild
13 (2.60%) high mild
24 (4.80%) high severe
Criterion.rs ERROR: Error in Gnuplot: line 0: Can't plot with an empty x range!: No change in performance detected.
coalesce_acked_from_zero 1+1 entries time: [88.271 ns 88.555 ns 88.835 ns] change: [−0.4836% +0.2282% +1.2638%] (p = 0.66 > 0.05)
Found 9 outliers among 100 measurements (9.00%) 8 (8.00%) high mild 1 (1.00%) high severe
coalesce_acked_from_zero 3+1 entries: No change in performance detected.
time: [106.10 ns 106.51 ns 106.93 ns]
change: [−0.4317% +1.0524% +3.5603%] (p = 0.54 > 0.05)
Found 17 outliers among 100 measurements (17.00%)
1 (1.00%) low mild
4 (4.00%) high mild
12 (12.00%) high severe
coalesce_acked_from_zero 10+1 entries: No change in performance detected.
time: [105.25 ns 105.48 ns 105.82 ns]
change: [−0.4960% +0.0515% +0.6013%] (p = 0.86 > 0.05)
Found 9 outliers among 100 measurements (9.00%)
1 (1.00%) low severe
3 (3.00%) low mild
1 (1.00%) high mild
4 (4.00%) high severe
coalesce_acked_from_zero 1000+1 entries: No change in performance detected.
time: [88.708 ns 92.298 ns 100.45 ns]
change: [−0.5587% +2.6888% +8.3111%] (p = 0.37 > 0.05)
Found 8 outliers among 100 measurements (8.00%)
2 (2.00%) high mild
6 (6.00%) high severe
RxStreamOrderer::inbound_frame(): Change within noise threshold.
time: [111.03 ms 111.10 ms 111.17 ms]
change: [+0.9502% +1.0311% +1.1131%] (p = 0.00 Found 7 outliers among 100 measurements (7.00%)
7 (7.00%) low mildsent::Packets::take_ranges: No change in performance detected.
time: [8.3071 µs 8.5386 µs 8.7568 µs]
change: [−0.1886% +6.0934% +16.006%] (p = 0.15 > 0.05)
Found 21 outliers among 100 measurements (21.00%)
5 (5.00%) low severe
11 (11.00%) low mild
2 (2.00%) high mild
3 (3.00%) high severe
transfer/pacing-false/varying-seeds: :green_heart: Performance has improved.
time: [34.603 ms 34.664 ms 34.724 ms]
change: [−3.5790% −3.3105% −3.0545%] (p = 0.00 Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) low mildtransfer/pacing-true/varying-seeds: Change within noise threshold.
time: [36.047 ms 36.139 ms 36.231 ms]
change: [−1.8788% −1.5171% −1.1519%] (p = 0.00 Found 2 outliers among 100 measurements (2.00%)
2 (2.00%) high mildtransfer/pacing-false/same-seed: Change within noise threshold.
time: [35.061 ms 35.111 ms 35.161 ms]
change: [−2.4981% −2.2964% −2.1088%] (p = 0.00 Found 3 outliers among 100 measurements (3.00%)
2 (2.00%) low mild
1 (1.00%) high mildtransfer/pacing-true/same-seed: Change within noise threshold.
time: [36.492 ms 36.556 ms 36.621 ms]
change: [−2.4463% −2.2170% −1.9969%] (p = 0.00 Client/server transfer results
Performance differences relative to 3909abe17a4f9a6e8d85fd0a0d0b80571042c88c.
Transfer of 33554432 bytes over loopback, min. 100 runs. All unit-less numbers are in milliseconds.
| Client vs. server (params) | Mean ± σ | Min | Max | MiB/s ± σ | Δ main |
Δ main |
|---|---|---|---|---|---|---|
| google vs. google | 528.9 ± 32.0 | 506.5 | 734.1 | 60.5 ± 1.0 | ||
| google vs. neqo (cubic, paced) | 389.9 ± 36.2 | 358.8 | 626.6 | 82.1 ± 0.9 | -2.1 | -0.5% |
| msquic vs. msquic | 150.0 ± 19.6 | 135.3 | 230.0 | 213.3 ± 1.6 | ||
| msquic vs. neqo (cubic, paced) | 302.6 ± 54.4 | 271.3 | 618.5 | 105.8 ± 0.6 | -3.7 | -1.2% |
| neqo vs. google (cubic, paced) | 808.7 ± 18.5 | 768.5 | 955.1 | 39.6 ± 1.7 | -0.7 | -0.1% |
| neqo vs. msquic (cubic, paced) | 210.3 ± 14.6 | 194.0 | 258.7 | 152.2 ± 2.2 | -8.3 | -3.8% |
| neqo vs. neqo (cubic) | 263.0 ± 12.3 | 241.9 | 296.5 | 121.7 ± 2.6 | 2.4 | 0.9% |
| neqo vs. neqo (cubic, paced) | 273.2 ± 60.9 | 249.7 | 832.3 | 117.2 ± 0.5 | :broken_heart: 18.0 | 7.0% |
| neqo vs. neqo (reno) | 261.1 ± 11.2 | 244.1 | 288.2 | 122.6 ± 2.9 | -0.5 | -0.2% |
| neqo vs. neqo (reno, paced) | 269.8 ± 35.9 | 240.9 | 493.3 | 118.6 ± 0.9 | :broken_heart: 10.9 | 4.2% |
| neqo vs. quiche (cubic, paced) | 245.6 ± 12.5 | 230.6 | 294.5 | 130.3 ± 2.6 | :green_heart: -13.2 | -5.1% |
| neqo vs. s2n (cubic, paced) | 263.0 ± 36.4 | 228.4 | 491.1 | 121.7 ± 0.9 | 7.6 | 3.0% |
| quiche vs. neqo (cubic, paced) | 413.6 ± 37.4 | 377.6 | 611.7 | 77.4 ± 0.9 | 8.7 | 2.1% |
| quiche vs. quiche | 203.0 ± 48.9 | 175.1 | 558.9 | 157.6 ± 0.7 | ||
| s2n vs. neqo (cubic, paced) | 314.0 ± 20.6 | 286.8 | 394.5 | 101.9 ± 1.6 | -9.0 | -2.8% |
| s2n vs. s2n | 255.9 ± 31.3 | 232.4 | 422.5 | 125.1 ± 1.0 |
Download data for profiler.firefox.com or download performance comparison data.
Bencher Report
| Branch | ecn-after-handshake |
| Testbed | t-linux64-ms-280 |
🚨 1 Alert
| Benchmark | Measure Units | View | Benchmark Result (Result Δ%) | Upper Boundary (Limit %) |
|---|---|---|---|---|
| coalesce_acked_from_zero 1000+1 entries | Latency nanoseconds (ns) | 📈 plot 🚷 threshold 🚨 alert (🔔) | 92.30 ns(+3.32%)Baseline: 89.33 ns | 91.78 ns (100.56%) |
Click to view all benchmark results
| Benchmark | Latency | Benchmark Result nanoseconds (ns) (Result Δ%) | Upper Boundary nanoseconds (ns) (Limit %) |
|---|---|---|---|
| 1-conn/1-100mb-req/mtu-1504 (aka. Upload)/client | 📈 view plot 🚷 view threshold | 662,310,000.00 ns(-0.33%)Baseline: 664,484,459.46 ns | 731,705,113.47 ns (90.52%) |
| 1-conn/1-100mb-resp/mtu-1504 (aka. Download)/client | 📈 view plot 🚷 view threshold | 654,620,000.00 ns(+3.58%)Baseline: 631,997,027.03 ns | 832,542,305.02 ns (78.63%) |
| 1-conn/1-1b-resp/mtu-1504 (aka. HPS)/client | 📈 view plot 🚷 view threshold | 27,053,000.00 ns(-0.50%)Baseline: 27,189,675.68 ns | 27,661,578.21 ns (97.80%) |
| 1-conn/10_000-parallel-1b-resp/mtu-1504 (aka. RPS)/client | 📈 view plot 🚷 view threshold | 306,570,000.00 ns(+0.57%)Baseline: 304,834,189.19 ns | 316,066,323.62 ns (97.00%) |
| 1000 streams of 1 bytes/multistream | 📈 view plot 🚷 view threshold | 51.04 ns(+35.41%)Baseline: 37.69 ns | 54.95 ns (92.89%) |
| 1000 streams of 1000 bytes/multistream | 📈 view plot 🚷 view threshold | 51.38 ns(+37.96%)Baseline: 37.24 ns | 54.62 ns (94.07%) |
| RxStreamOrderer::inbound_frame() | 📈 view plot 🚷 view threshold | 111,100,000.00 ns(+0.55%)Baseline: 110,495,959.46 ns | 114,561,444.98 ns (96.98%) |
| coalesce_acked_from_zero 1+1 entries | 📈 view plot 🚷 view threshold | 88.56 ns(-0.15%)Baseline: 88.69 ns | 89.30 ns (99.17%) |
| coalesce_acked_from_zero 10+1 entries | 📈 view plot 🚷 view threshold | 105.48 ns(-0.43%)Baseline: 105.93 ns | 106.88 ns (98.69%) |
| coalesce_acked_from_zero 1000+1 entries | 📈 view plot 🚷 view threshold 🚨 view alert (🔔) | 92.30 ns(+3.32%)Baseline: 89.33 ns | 91.78 ns (100.56%) |
| coalesce_acked_from_zero 3+1 entries | 📈 view plot 🚷 view threshold | 106.51 ns(-0.02%)Baseline: 106.53 ns | 107.40 ns (99.17%) |
| decode 1048576 bytes, mask 3f | 📈 view plot 🚷 view threshold | 1,590,500.00 ns(-1.60%)Baseline: 1,616,313.51 ns | 1,764,082.52 ns (90.16%) |
| decode 1048576 bytes, mask 7f | 📈 view plot 🚷 view threshold | 5,055,600.00 ns(-0.16%)Baseline: 5,063,533.78 ns | 5,090,572.93 ns (99.31%) |
| decode 1048576 bytes, mask ff | 📈 view plot 🚷 view threshold | 3,031,200.00 ns(-0.14%)Baseline: 3,035,586.49 ns | 3,067,625.58 ns (98.81%) |
| decode 4096 bytes, mask 3f | 📈 view plot 🚷 view threshold | 8,289.60 ns(+4.60%)Baseline: 7,924.70 ns | 10,163.54 ns (81.56%) |
| decode 4096 bytes, mask 7f | 📈 view plot 🚷 view threshold | 19,964.00 ns(+0.22%)Baseline: 19,919.30 ns | 20,405.80 ns (97.83%) |
| decode 4096 bytes, mask ff | 📈 view plot 🚷 view threshold | 11,864.00 ns(+0.40%)Baseline: 11,816.19 ns | 11,975.56 ns (99.07%) |
| sent::Packets::take_ranges | 📈 view plot 🚷 view threshold | 8,538.60 ns(+1.16%)Baseline: 8,440.78 ns | 8,591.80 ns (99.38%) |
| transfer/pacing-false/same-seed | 📈 view plot 🚷 view threshold | 35,111,000.00 ns(+0.53%)Baseline: 34,926,486.49 ns | 36,611,004.30 ns (95.90%) |
| transfer/pacing-false/varying-seeds | 📈 view plot 🚷 view threshold | 34,664,000.00 ns(-1.15%)Baseline: 35,066,513.51 ns | 36,805,390.21 ns (94.18%) |
| transfer/pacing-true/same-seed | 📈 view plot 🚷 view threshold | 36,556,000.00 ns(+0.06%)Baseline: 36,534,000.00 ns | 38,140,269.54 ns (95.85%) |
| transfer/pacing-true/varying-seeds | 📈 view plot 🚷 view threshold | 36,139,000.00 ns(+0.65%)Baseline: 35,906,418.92 ns | 37,523,651.23 ns (96.31%) |
Bencher Report
| Branch | ecn-after-handshake |
| Testbed | t-linux64-ms-280 |
Click to view all benchmark results
| Benchmark | Latency | Benchmark Result milliseconds (ms) (Result Δ%) | Upper Boundary milliseconds (ms) (Limit %) |
|---|---|---|---|
| s2n vs. neqo (cubic, paced) | 📈 view plot 🚷 view threshold | 310.42 ms(-0.45%)Baseline: 311.83 ms | 327.11 ms (94.90%) |
@mxinden I tried to "help" and I think I messed up the rebase...
No worries. Rebased on to latest main now.
Client/server transfer results
Performance differences relative to 531cb0b6c21d27ff1ccec5502ecc346a6a922d71.
Transfer of 33554432 bytes over loopback, min. 100 runs. All unit-less numbers are in milliseconds.
| Client vs. server (params) | Mean ± σ | Min | Max | MiB/s ± σ | Δ main |
Δ main |
|---|---|---|---|---|---|---|
| google vs. google | 451.0 ± 4.8 | 443.9 | 462.0 | 70.9 ± 6.7 | ||
| google vs. neqo (cubic, paced) | 270.3 ± 4.7 | 261.9 | 288.0 | 118.4 ± 6.8 | -0.7 | -0.3% |
| msquic vs. msquic | 124.0 ± 13.0 | 109.9 | 178.0 | 258.0 ± 2.5 | ||
| msquic vs. neqo (cubic, paced) | 150.9 ± 34.3 | 120.8 | 374.9 | 212.0 ± 0.9 | 4.6 | 3.1% |
| neqo vs. google (cubic, paced) | 752.1 ± 4.6 | 744.6 | 764.5 | 42.5 ± 7.0 | 0.4 | 0.1% |
| neqo vs. msquic (cubic, paced) | 156.2 ± 5.1 | 148.2 | 175.6 | 204.9 ± 6.3 | -0.2 | -0.1% |
| neqo vs. neqo (cubic) | 92.2 ± 4.9 | 82.9 | 110.9 | 347.0 ± 6.5 | :broken_heart: 2.3 | 2.5% |
| neqo vs. neqo (cubic, paced) | 94.8 ± 4.2 | 85.4 | 107.8 | 337.4 ± 7.6 | :broken_heart: 3.8 | 4.2% |
| neqo vs. neqo (reno) | 91.0 ± 4.9 | 80.8 | 111.8 | 351.6 ± 6.5 | 0.9 | 1.0% |
| neqo vs. neqo (reno, paced) | 92.2 ± 4.3 | 85.5 | 101.3 | 347.1 ± 7.4 | :broken_heart: 2.1 | 2.3% |
| neqo vs. quiche (cubic, paced) | 195.1 ± 4.6 | 186.9 | 204.9 | 164.1 ± 7.0 | 0.7 | 0.3% |
| neqo vs. s2n (cubic, paced) | 217.7 ± 4.9 | 211.5 | 235.3 | 147.0 ± 6.5 | -0.4 | -0.2% |
| quiche vs. neqo (cubic, paced) | 160.3 ± 4.5 | 149.2 | 169.9 | 199.6 ± 7.1 | :broken_heart: 3.4 | 2.1% |
| quiche vs. quiche | 146.5 ± 5.2 | 137.4 | 163.6 | 218.4 ± 6.2 | ||
| s2n vs. neqo (cubic, paced) | 169.4 ± 4.6 | 161.3 | 185.1 | 188.9 ± 7.0 | :green_heart: -1.8 | -1.0% |
| s2n vs. s2n | 249.8 ± 30.5 | 229.4 | 347.8 | 128.1 ± 1.0 |
Download data for profiler.firefox.com or download performance comparison data.
Benchmark results
Performance differences relative to 531cb0b6c21d27ff1ccec5502ecc346a6a922d71.
1-conn/1-100mb-resp/mtu-1504 (aka. Download)/client: Change within noise threshold.
time: [199.38 ms 199.81 ms 200.29 ms]
thrpt: [499.27 MiB/s 500.47 MiB/s 501.55 MiB/s]
change:
time: [+0.4936% +0.7774% +1.0872%] (p = 0.00 −0.7714% −0.4912%]
Found 6 outliers among 100 measurements (6.00%)
1 (1.00%) low mild
2 (2.00%) high mild
3 (3.00%) high severe
1-conn/10_000-parallel-1b-resp/mtu-1504 (aka. RPS)/client: No change in performance detected.
time: [303.36 ms 304.87 ms 306.37 ms]
thrpt: [32.640 Kelem/s 32.801 Kelem/s 32.964 Kelem/s]
change:
time: [−0.5614% +0.1751% +0.8849%] (p = 0.63 > 0.05)
thrpt: [−0.8771% −0.1748% +0.5646%]
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) low mild
1-conn/1-1b-resp/mtu-1504 (aka. HPS)/client: No change in performance detected.
time: [27.455 ms 27.546 ms 27.660 ms]
thrpt: [36.153 B/s 36.303 B/s 36.424 B/s]
change:
time: [−0.1785% +0.2806% +0.7581%] (p = 0.26 > 0.05)
thrpt: [−0.7524% −0.2799% +0.1788%]
Found 19 outliers among 100 measurements (19.00%)
1 (1.00%) low mild
18 (18.00%) high severe
1-conn/1-100mb-req/mtu-1504 (aka. Upload)/client: :green_heart: Performance has improved.
time: [614.57 ms 619.13 ms 622.98 ms]
thrpt: [160.52 MiB/s 161.52 MiB/s 162.72 MiB/s]
change:
time: [−4.4209% −3.3279% −2.2884%] (p = 0.00 +3.4424% +4.6254%]
Found 8 outliers among 100 measurements (8.00%)
5 (5.00%) low severe
2 (2.00%) low mild
1 (1.00%) high severe
decode 4096 bytes, mask ff: No change in performance detected.
time: [11.813 µs 11.845 µs 11.885 µs]
change: [−0.1456% +0.3796% +1.1232%] (p = 0.27 > 0.05)
Found 16 outliers among 100 measurements (16.00%)
3 (3.00%) low severe
4 (4.00%) low mild
1 (1.00%) high mild
8 (8.00%) high severe
decode 1048576 bytes, mask ff: No change in performance detected.
time: [3.0206 ms 3.0301 ms 3.0412 ms]
change: [−0.7263% −0.1769% +0.3167%] (p = 0.53 > 0.05)
Found 10 outliers among 100 measurements (10.00%)
1 (1.00%) high mild
9 (9.00%) high severe
decode 4096 bytes, mask 7f: No change in performance detected.
time: [20.003 µs 20.051 µs 20.106 µs]
change: [−0.0550% +0.4063% +1.0006%] (p = 0.13 > 0.05)
Found 17 outliers among 100 measurements (17.00%)
3 (3.00%) low severe
1 (1.00%) low mild
13 (13.00%) high severe
decode 1048576 bytes, mask 7f: No change in performance detected.
time: [5.0432 ms 5.0585 ms 5.0769 ms]
change: [−0.2586% +0.1203% +0.5741%] (p = 0.58 > 0.05)
Found 15 outliers among 100 measurements (15.00%)
1 (1.00%) low mild
14 (14.00%) high severe
decode 4096 bytes, mask 3f: No change in performance detected.
time: [8.2880 µs 8.3257 µs 8.3692 µs]
change: [−0.4558% +0.3830% +1.1278%] (p = 0.37 > 0.05)
Found 23 outliers among 100 measurements (23.00%)
9 (9.00%) low mild
2 (2.00%) high mild
12 (12.00%) high severe
decode 1048576 bytes, mask 3f: No change in performance detected.
time: [1.5852 ms 1.5908 ms 1.5976 ms]
change: [−0.7821% −0.1839% +0.4184%] (p = 0.53 > 0.05)
Found 6 outliers among 100 measurements (6.00%)
1 (1.00%) high mild
5 (5.00%) high severe
1000 streams of 1 bytes/multistream: No change in performance detected.
time: [27.109 ns 27.307 ns 27.516 ns]
change: [−34.524% −14.331% +1.7113%] (p = 0.60 > 0.05)
Found 75 outliers among 500 measurements (15.00%)
60 (12.00%) high mild
15 (3.00%) high severe
Criterion.rs ERROR: Error in Gnuplot: line 0: Can't plot with an empty x range!
:
Criterion.rs ERROR: Error in Gnuplot: line 0: Can't plot with an empty x range!
: No change in performance detected.
1000 streams of 1000 bytes/multistream time: [27.389 ns 31.185 ns 38.586 ns] change: [+0.8046% +15.030% +54.391%] (p = 0.21 > 0.05)
Found 38 outliers among 500 measurements (7.60%) 27 (5.40%) high mild 11 (2.20%) high severe
coalesce_acked_from_zero 1+1 entries: No change in performance detected.
time: [88.160 ns 88.528 ns 88.893 ns]
change: [−0.3781% +0.1738% +0.7427%] (p = 0.55 > 0.05)
Found 12 outliers among 100 measurements (12.00%)
9 (9.00%) high mild
3 (3.00%) high severe
coalesce_acked_from_zero 3+1 entries: No change in performance detected.
time: [105.48 ns 105.83 ns 106.22 ns]
change: [−0.6046% −0.1401% +0.3511%] (p = 0.57 > 0.05)
Found 14 outliers among 100 measurements (14.00%)
3 (3.00%) high mild
11 (11.00%) high severe
coalesce_acked_from_zero 10+1 entries: No change in performance detected.
time: [104.84 ns 105.19 ns 105.63 ns]
change: [−0.3236% +0.2731% +0.9357%] (p = 0.40 > 0.05)
Found 13 outliers among 100 measurements (13.00%)
5 (5.00%) low mild
3 (3.00%) high mild
5 (5.00%) high severe
coalesce_acked_from_zero 1000+1 entries: Change within noise threshold.
time: [88.548 ns 88.715 ns 88.921 ns]
change: [−1.5290% −0.7327% −0.0641%] (p = 0.05 Found 10 outliers among 100 measurements (10.00%)
3 (3.00%) high mild
7 (7.00%) high severeRxStreamOrderer::inbound_frame(): Change within noise threshold.
time: [108.44 ms 108.57 ms 108.74 ms]
change: [−1.2441% −1.0937% −0.9305%] (p = 0.00 Found 5 outliers among 100 measurements (5.00%)
1 (1.00%) low mild
2 (2.00%) high mild
2 (2.00%) high severesent::Packets::take_ranges: No change in performance detected.
time: [8.0682 µs 8.3085 µs 8.5428 µs]
change: [−1.9447% +4.0692% +14.590%] (p = 0.40 > 0.05)
Found 23 outliers among 100 measurements (23.00%)
4 (4.00%) low severe
13 (13.00%) low mild
3 (3.00%) high mild
3 (3.00%) high severe
transfer/pacing-false/varying-seeds: Change within noise threshold.
time: [37.289 ms 37.367 ms 37.446 ms]
change: [+0.8769% +1.2026% +1.5124%] (p = 0.00 Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mildtransfer/pacing-true/varying-seeds: Change within noise threshold.
time: [38.069 ms 38.191 ms 38.323 ms]
change: [+0.5182% +0.9683% +1.4091%] (p = 0.00 Found 4 outliers among 100 measurements (4.00%)
1 (1.00%) low mild
2 (2.00%) high mild
1 (1.00%) high severetransfer/pacing-false/same-seed: Change within noise threshold.
time: [36.904 ms 36.988 ms 37.087 ms]
change: [+0.5750% +0.8624% +1.1783%] (p = 0.00 Found 2 outliers among 100 measurements (2.00%)
1 (1.00%) high mild
1 (1.00%) high severetransfer/pacing-true/same-seed: Change within noise threshold.
time: [38.733 ms 38.816 ms 38.901 ms]
change: [+0.1120% +0.4055% +0.6994%] (p = 0.01 Found 2 outliers among 100 measurements (2.00%)
2 (2.00%) high mildDownload data for profiler.firefox.com or download performance comparison data.
~~Only 10 more tests to go:~~
failures:
connection::tests::keys::discarded_initial_keys
connection::tests::migration::migrate_same_fail
connection::tests::priority::critical
connection::tests::priority::high_normal
connection::tests::priority::important
connection::tests::recovery::pto_handshake_complete
connection::tests::resumption::ticket_rtt_larger_than_default
connection::tests::resumption::ticket_rtt_less_than_default
connection::tests::vn::compatible_upgrade
connection::tests::vn::compatible_upgrade_large_initial
Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:
Project coverage is 94.89%. Comparing base (
531cb0b) to head (aa968f9).
Additional details and impacted files
@@ Coverage Diff @@
## main #2560 +/- ##
==========================================
- Coverage 94.92% 94.89% -0.04%
==========================================
Files 115 115
Lines 34281 34286 +5
Branches 34281 34286 +5
==========================================
- Hits 32541 32534 -7
- Misses 1733 1745 +12
Partials 7 7
| Components | Coverage Δ | |
|---|---|---|
| neqo-common | 97.10% <ø> (ø) |
|
| neqo-crypto | 89.64% <ø> (ø) |
|
| neqo-http3 | 93.71% <ø> (ø) |
|
| neqo-qpack | 95.45% <ø> (ø) |
|
| neqo-transport | 95.95% <100.00%> (-0.07%) |
:arrow_down: |
| neqo-udp | 89.37% <ø> (-0.49%) |
:arrow_down: |