fix: Add some crate features for performance
Let's see if they do.
Also, @mxinden, I was wondering why we went with a multi-threaded tokio client and server. I'm wondering if the thread-management overheads are worth it compared to using just the rt scheduler?
Codecov Report
:white_check_mark: All modified and coverable lines are covered by tests.
:white_check_mark: Project coverage is 94.91%. Comparing base (8c65240) to head (f01b7a3).
:warning: Report is 10 commits behind head on main.
Additional details and impacted files
@@ Coverage Diff @@
## main #2477 +/- ##
==========================================
+ Coverage 94.88% 94.91% +0.03%
==========================================
Files 115 115
Lines 34313 34313
Branches 34313 34313
==========================================
+ Hits 32558 32569 +11
+ Misses 1748 1737 -11
Partials 7 7
| Components | Coverage Δ | |
|---|---|---|
| neqo-common | 97.61% <ø> (ø) |
|
| neqo-crypto | 89.64% <ø> (ø) |
|
| neqo-http3 | 93.71% <ø> (ø) |
|
| neqo-qpack | 95.45% <ø> (ø) |
|
| neqo-transport | 95.95% <ø> (+0.05%) |
:arrow_up: |
| neqo-udp | 89.85% <ø> (+0.48%) |
:arrow_up: |
Failed Interop Tests
QUIC Interop Runner, client vs. server, differences relative to 8c6524015e07834a72d566804041544d746e93ef.
neqo-latest as client
- neqo-latest vs. go-x-net: BP BA
- neqo-latest vs. haproxy: :warning:C1 BP BA
- neqo-latest vs. kwik: L1 C1 BP BA
- neqo-latest vs. linuxquic: L1 C1
- neqo-latest vs. lsquic: E L1 C1
- neqo-latest vs. msquic: :warning:R Z A L1 C1
- neqo-latest vs. mvfst: A :warning:L1 C1
- neqo-latest vs. neqo: A
- neqo-latest vs. neqo-latest: A
- neqo-latest vs. nginx: BP BA
- neqo-latest vs. ngtcp2: E CM
- neqo-latest vs. picoquic: Z E A :rocket:~~L1~~ :warning:C1
- neqo-latest vs. quic-go: A
- neqo-latest vs. quiche: BP BA
- neqo-latest vs. s2n-quic: E :warning:BP BA CM
- neqo-latest vs. tquic: S :warning:A BP BA
- neqo-latest vs. xquic: :warning:A L1 C1
neqo-latest as server
- aioquic vs. neqo-latest: :rocket:~~BA~~ CM
- go-x-net vs. neqo-latest: CM
- kwik vs. neqo-latest: BP BA CM
- msquic vs. neqo-latest: :rocket:~~BA~~ :warning:U CM
- mvfst vs. neqo-latest: Z A L1 C1 CM
- neqo vs. neqo-latest: A
- openssl vs. neqo-latest: LR M A CM
- quic-go vs. neqo-latest: CM
- quiche vs. neqo-latest: :rocket:~~L1~~ CM
- quinn vs. neqo-latest: V2 CM
- s2n-quic vs. neqo-latest: CM
- tquic vs. neqo-latest: CM
- xquic vs. neqo-latest: M CM
All results
Succeeded Interop Tests
QUIC Interop Runner, client vs. server
neqo-latest as client
- neqo-latest vs. aioquic: H DC LR C20 M S R Z 3 B U A L1 L2 C1 C2 6 V2 BP BA
- neqo-latest vs. go-x-net: H DC LR M B U A L2 C2 6
- neqo-latest vs. haproxy: H DC LR C20 M S R Z 3 B U A L1 L2 :warning:C1 C2 6 V2
- neqo-latest vs. kwik: H DC LR C20 M S R Z 3 B U A L2 C2 6 V2
- neqo-latest vs. linuxquic: H DC LR C20 M S R Z 3 B U E A L2 C2 6 V2 BP BA CM
- neqo-latest vs. lsquic: H DC LR C20 M S R Z 3 B U A L2 C2 6 V2 BP BA CM
- neqo-latest vs. msquic: H DC LR C20 M S :warning:R Z B U L2 C2 6 V2 BP BA
- neqo-latest vs. mvfst: H DC LR M R Z 3 B U :warning:L1 L2 C2 6 BP BA
- neqo-latest vs. neqo: H DC LR C20 M S R Z 3 B U E L1 L2 C1 C2 6 V2 BP BA CM
- neqo-latest vs. neqo-latest: H DC LR C20 M S R Z 3 B U E L1 L2 C1 C2 6 V2 BP BA CM
- neqo-latest vs. nginx: H DC LR C20 M S R Z 3 B U A L1 L2 C1 C2 6
- neqo-latest vs. ngtcp2: H DC LR C20 M S R Z 3 B U A L1 L2 C1 C2 6 V2 BP BA
- neqo-latest vs. picoquic: H DC LR C20 M S R 3 B U :rocket:~~L1~~ L2 :warning:C1 C2 6 V2 BP BA
- neqo-latest vs. quic-go: H DC LR C20 M S R Z 3 B U L1 L2 C1 C2 6 BP BA
- neqo-latest vs. quiche: H DC LR C20 M S R Z 3 B U A L1 L2 C1 C2 6
- neqo-latest vs. quinn: H DC LR C20 M S R Z 3 B U E :rocket:~~A~~ L1 L2 C1 C2 6 BP BA
- neqo-latest vs. s2n-quic: H DC LR C20 M S R 3 B U A L1 L2 C1 C2 6 :warning:BP
- neqo-latest vs. tquic: H DC LR C20 M R Z 3 B U :warning:A L1 L2 C1 C2 6
- neqo-latest vs. xquic: :rocket:~~H DC LR C20 M R Z 3 B U L2 C2 6 BP BA~~
neqo-latest as server
- aioquic vs. neqo-latest: H DC LR C20 M S R Z 3 B A L1 L2 C1 C2 6 V2 BP :rocket:~~BA~~
- chrome vs. neqo-latest: 3
- go-x-net vs. neqo-latest: H DC LR M B U A L2 C2 6 BP BA
- kwik vs. neqo-latest: H DC LR C20 M S R Z 3 B U A L1 L2 C1 C2 6 V2
- linuxquic vs. neqo-latest: H DC LR C20 M S R Z 3 B U E A L1 L2 C1 C2 6 V2 BP BA CM
- lsquic vs. neqo-latest: H DC LR C20 M S R 3 B E A L1 L2 :rocket:~~C1~~ C2 6 V2 BP BA CM
- msquic vs. neqo-latest: H DC LR C20 M S R Z B :warning:U A L1 L2 C1 C2 6 V2 BP :rocket:~~BA~~
- mvfst vs. neqo-latest: H DC LR M 3 B L2 C2 6 BP BA
- neqo vs. neqo-latest: H DC LR C20 M S R Z 3 B U E L1 L2 C1 C2 6 V2 BP BA CM
- ngtcp2 vs. neqo-latest: H DC LR C20 M S R Z 3 B U E A L1 L2 C1 C2 6 V2 BP BA CM
- openssl vs. neqo-latest: H DC C20 S R 3 B L2 C2 6 BP BA
- picoquic vs. neqo-latest: H DC LR C20 M S R Z 3 B U E A L1 L2 C1 C2 6 V2 BP BA CM
- quic-go vs. neqo-latest: H DC LR C20 M S R Z 3 B U A L1 L2 C1 C2 6 BP BA
- quiche vs. neqo-latest: H DC LR M S R Z 3 B A :rocket:~~L1~~ L2 C1 C2 6 BP BA
- quinn vs. neqo-latest: H DC LR C20 M S R Z 3 B U E A L1 L2 C1 C2 6 BP BA
- s2n-quic vs. neqo-latest: H DC LR M S R 3 B E A L1 L2 C1 C2 6 BP BA
- tquic vs. neqo-latest: H DC LR M S R Z 3 B A L1 L2 C1 C2 6 BP BA
- xquic vs. neqo-latest: H DC LR C20 S R Z 3 B U A L1 L2 C1 C2 6 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
- aioquic vs. neqo-latest: U E
- 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 L1 C1 V2
- kwik vs. neqo-latest: E
- lsquic vs. neqo-latest: Z U
- msquic vs. neqo-latest: 3 E
- mvfst vs. neqo-latest: C20 S R U E V2
- 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
- tquic vs. neqo-latest: C20 U E V2
- xquic vs. neqo-latest: E V2
Benchmark results
Performance differences relative to a341259e7b317445bc9dee12172a160722819b9d.
1-conn/1-100mb-resp/mtu-1504 (aka. Download)/client: :green_heart: Performance has improved.
time: [198.58 ms 198.94 ms 199.30 ms]
thrpt: [501.76 MiB/s 502.67 MiB/s 503.58 MiB/s]
change:
time: [−2.0523% −1.7659% −1.4888%] (p = 0.00 +1.7976% +2.0953%]
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild
1-conn/10_000-parallel-1b-resp/mtu-1504 (aka. RPS)/client: No change in performance detected.
time: [302.98 ms 304.36 ms 305.74 ms]
thrpt: [32.708 Kelem/s 32.856 Kelem/s 33.006 Kelem/s]
change:
time: [−0.0873% +0.5531% +1.2132%] (p = 0.09 > 0.05)
thrpt: [−1.1987% −0.5500% +0.0874%]
1-conn/1-1b-resp/mtu-1504 (aka. HPS)/client: No change in performance detected.
time: [27.349 ms 27.439 ms 27.558 ms]
thrpt: [36.287 B/s 36.444 B/s 36.564 B/s]
change:
time: [−0.7745% −0.2244% +0.3429%] (p = 0.45 > 0.05)
thrpt: [−0.3417% +0.2249% +0.7806%]
Found 22 outliers among 100 measurements (22.00%)
2 (2.00%) low severe
20 (20.00%) high severe
1-conn/1-100mb-req/mtu-1504 (aka. Upload)/client: :green_heart: Performance has improved.
time: [622.90 ms 627.59 ms 632.27 ms]
thrpt: [158.16 MiB/s 159.34 MiB/s 160.54 MiB/s]
change:
time: [−5.0735% −4.1248% −3.2188%] (p = 0.00 +4.3022% +5.3446%]
Found 9 outliers among 100 measurements (9.00%)
3 (3.00%) low severe
3 (3.00%) low mild
1 (1.00%) high mild
2 (2.00%) high severe
decode 4096 bytes, mask ff: Change within noise threshold.
time: [11.629 µs 11.672 µs 11.721 µs]
change: [−1.4598% −1.0726% −0.5453%] (p = 0.00 Found 15 outliers among 100 measurements (15.00%)
1 (1.00%) low severe
3 (3.00%) low mild
11 (11.00%) high severedecode 1048576 bytes, mask ff: Change within noise threshold.
time: [3.0583 ms 3.0679 ms 3.0805 ms]
change: [+0.7403% +1.2257% +1.7377%] (p = 0.00 Found 8 outliers among 100 measurements (8.00%)
1 (1.00%) low mild
7 (7.00%) high severedecode 4096 bytes, mask 7f: :green_heart: Performance has improved.
time: [19.363 µs 19.446 µs 19.562 µs]
change: [−4.0416% −3.0524% −2.3825%] (p = 0.00 Found 17 outliers among 100 measurements (17.00%)
4 (4.00%) low severe
1 (1.00%) low mild
12 (12.00%) high severedecode 1048576 bytes, mask 7f: Change within noise threshold.
time: [5.0845 ms 5.0972 ms 5.1105 ms]
change: [+0.4872% +0.8734% +1.2405%] (p = 0.00 Found 15 outliers among 100 measurements (15.00%)
15 (15.00%) high severedecode 4096 bytes, mask 3f: :green_heart: Performance has improved.
time: [5.5305 µs 5.5588 µs 5.5930 µs]
change: [−33.157% −32.863% −32.534%] (p = 0.00 Found 7 outliers among 100 measurements (7.00%)
2 (2.00%) high mild
5 (5.00%) high severedecode 1048576 bytes, mask 3f: :broken_heart: Performance has regressed.
time: [1.7873 ms 1.7997 ms 1.8123 ms]
change: [+12.244% +13.138% +13.972%] (p = 0.00 1000 streams of 1 bytes/multistream: :broken_heart: Performance has regressed.
time: [47.764 ns 47.945 ns 48.127 ns]
change: [+29.708% +31.271% +32.821%] (p = 0.00 Found 1 outliers among 500 measurements (0.20%)
1 (0.20%) high mild1000 streams of 1000 bytes/multistream: :broken_heart: Performance has regressed.
time: [47.002 ns 47.177 ns 47.353 ns]
change: [+22.520% +23.830% +25.204%] (p = 0.00 coalesce_acked_from_zero 1+1 entries: No change in performance detected.
time: [88.065 ns 88.418 ns 88.774 ns]
change: [−0.4540% −0.0593% +0.3303%] (p = 0.77 > 0.05)
Found 8 outliers among 100 measurements (8.00%)
7 (7.00%) high mild
1 (1.00%) high severe
coalesce_acked_from_zero 3+1 entries: No change in performance detected.
time: [105.56 ns 106.12 ns 106.83 ns]
change: [−0.4586% +0.0028% +0.4900%] (p = 0.99 > 0.05)
Found 16 outliers among 100 measurements (16.00%)
1 (1.00%) high mild
15 (15.00%) high severe
coalesce_acked_from_zero 10+1 entries: No change in performance detected.
time: [104.67 ns 105.03 ns 105.46 ns]
change: [−0.3186% +0.1905% +0.9788%] (p = 0.63 > 0.05)
Found 9 outliers among 100 measurements (9.00%)
3 (3.00%) low severe
1 (1.00%) low mild
5 (5.00%) high severe
coalesce_acked_from_zero 1000+1 entries: No change in performance detected.
time: [88.603 ns 88.775 ns 88.973 ns]
change: [−1.1413% −0.3373% +0.4524%] (p = 0.44 > 0.05)
Found 11 outliers among 100 measurements (11.00%)
6 (6.00%) high mild
5 (5.00%) high severe
RxStreamOrderer::inbound_frame(): No change in performance detected.
time: [107.89 ms 107.96 ms 108.03 ms]
change: [−0.2639% −0.0098% +0.1676%] (p = 0.94 > 0.05)
Found 11 outliers among 100 measurements (11.00%)
10 (10.00%) low mild
1 (1.00%) high severe
sent::Packets::take_ranges: No change in performance detected.
time: [8.0893 µs 8.3207 µs 8.5443 µs]
change: [−3.3996% +3.7280% +13.696%] (p = 0.52 > 0.05)
Found 22 outliers among 100 measurements (22.00%)
4 (4.00%) low severe
11 (11.00%) low mild
3 (3.00%) high mild
4 (4.00%) high severe
transfer/pacing-false/varying-seeds: Change within noise threshold.
time: [37.216 ms 37.293 ms 37.371 ms]
change: [+0.5064% +0.8545% +1.2038%] (p = 0.00 transfer/pacing-true/varying-seeds: Change within noise threshold.
time: [37.913 ms 38.031 ms 38.155 ms]
change: [+0.7331% +1.1975% +1.6586%] (p = 0.00 Found 3 outliers among 100 measurements (3.00%)
1 (1.00%) low mild
1 (1.00%) high mild
1 (1.00%) high severetransfer/pacing-false/same-seed: Change within noise threshold.
time: [36.575 ms 36.650 ms 36.735 ms]
change: [−0.6683% −0.3588% −0.0384%] (p = 0.02 Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high severetransfer/pacing-true/same-seed: Change within noise threshold.
time: [38.728 ms 38.817 ms 38.911 ms]
change: [+1.6254% +1.9650% +2.2815%] (p = 0.00 Found 2 outliers among 100 measurements (2.00%)
1 (1.00%) low mild
1 (1.00%) high severeClient/server transfer results
Performance differences relative to a341259e7b317445bc9dee12172a160722819b9d.
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 | 457.0 ± 3.9 | 451.4 | 467.3 | 70.0 ± 8.2 | ||
| google vs. neqo (cubic, paced) | 272.9 ± 4.2 | 266.3 | 285.4 | 117.3 ± 7.6 | -0.0 | -0.0% |
| msquic vs. msquic | 127.6 ± 15.5 | 109.5 | 192.1 | 250.8 ± 2.1 | ||
| msquic vs. neqo (cubic, paced) | 141.1 ± 15.1 | 118.2 | 199.7 | 226.8 ± 2.1 | :green_heart: -5.8 | -4.0% |
| neqo vs. google (cubic, paced) | 762.0 ± 4.0 | 755.8 | 773.1 | 42.0 ± 8.0 | -0.9 | -0.1% |
| neqo vs. msquic (cubic, paced) | 155.3 ± 4.4 | 148.7 | 163.5 | 206.0 ± 7.3 | :green_heart: -1.4 | -0.9% |
| neqo vs. neqo (cubic) | 89.0 ± 4.5 | 82.4 | 103.8 | 359.5 ± 7.1 | :green_heart: -2.5 | -2.8% |
| neqo vs. neqo (cubic, paced) | 91.5 ± 5.0 | 83.9 | 109.1 | 349.6 ± 6.4 | -0.1 | -0.1% |
| neqo vs. neqo (reno) | 89.1 ± 4.8 | 80.5 | 106.8 | 359.1 ± 6.7 | :green_heart: -2.0 | -2.2% |
| neqo vs. neqo (reno, paced) | 90.6 ± 4.2 | 83.8 | 101.1 | 353.2 ± 7.6 | :green_heart: -1.6 | -1.7% |
| neqo vs. quiche (cubic, paced) | 193.5 ± 4.5 | 185.6 | 204.4 | 165.4 ± 7.1 | :broken_heart: 1.8 | 0.9% |
| neqo vs. s2n (cubic, paced) | 218.9 ± 4.1 | 211.4 | 226.5 | 146.2 ± 7.8 | :broken_heart: 1.3 | 0.6% |
| quiche vs. neqo (cubic, paced) | 160.6 ± 5.1 | 150.8 | 171.4 | 199.2 ± 6.3 | :broken_heart: 2.7 | 1.7% |
| quiche vs. quiche | 147.6 ± 4.9 | 139.8 | 160.4 | 216.8 ± 6.5 | ||
| s2n vs. neqo (cubic, paced) | 170.8 ± 4.6 | 162.0 | 181.4 | 187.3 ± 7.0 | -0.5 | -0.3% |
| s2n vs. s2n | 249.8 ± 27.6 | 231.2 | 352.9 | 128.1 ± 1.2 |
Download data for profiler.firefox.com or download performance comparison data.
Also, @mxinden, I was wondering why we went with a multi-threaded
tokioclient and server.
I chose multi-threaded as it is the de-facto default. No other reason.
I'm wondering if the thread-management overheads are worth it compared to using just the
rtscheduler?
:+1: worth experimenting. Intuitively, given that it is a single future only, there is no cross-thread communication and thus no significant overhead.
I am fine merging here. That said, I would prefer individual pull requests per feature, to ensure each change, and not just all changes as a whole, have a positive performance impact. In addition, I don't think we should merge here before we have reliable benchmarks, i.e. not merge here before https://github.com/mozilla/neqo/issues/2657 is fixed.
Bencher Report
| Branch | fix-features |
| Testbed | t-linux64-ms-280 |
🚨 1 Alert
| Benchmark | Measure Units | View | Benchmark Result (Result Δ%) | Upper Boundary (Limit %) |
|---|---|---|---|---|
| decode 1048576 bytes, mask ff | Latency milliseconds (ms) | 📈 plot 🚷 threshold 🚨 alert (🔔) | 3.07 ms(+1.15%)Baseline: 3.04 ms | 3.07 ms (100.04%) |
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 | 643,680,000.00 ns(-3.09%)Baseline: 664,191,369.86 ns | 732,128,729.16 ns (87.92%) |
| 1-conn/1-100mb-resp/mtu-1504 (aka. Download)/client | 📈 view plot 🚷 view threshold | 636,170,000.00 ns(+0.77%)Baseline: 631,338,493.15 ns | 833,045,917.44 ns (76.37%) |
| 1-conn/1-1b-resp/mtu-1504 (aka. HPS)/client | 📈 view plot 🚷 view threshold | 27,135,000.00 ns(-0.21%)Baseline: 27,193,041.10 ns | 27,664,766.42 ns (98.09%) |
| 1-conn/10_000-parallel-1b-resp/mtu-1504 (aka. RPS)/client | 📈 view plot 🚷 view threshold | 303,130,000.00 ns(-0.56%)Baseline: 304,823,150.68 ns | 316,111,262.80 ns (95.89%) |
| 1000 streams of 1 bytes/multistream | 📈 view plot 🚷 view threshold | 35.80 ns(-4.67%)Baseline: 37.55 ns | 54.48 ns (65.71%) |
| 1000 streams of 1000 bytes/multistream | 📈 view plot 🚷 view threshold | 33.94 ns(-8.45%)Baseline: 37.07 ns | 54.08 ns (62.76%) |
| RxStreamOrderer::inbound_frame() | 📈 view plot 🚷 view threshold | 111,300,000.00 ns(+0.73%)Baseline: 110,495,356.16 ns | 114,591,968.70 ns (97.13%) |
| coalesce_acked_from_zero 1+1 entries | 📈 view plot 🚷 view threshold | 88.48 ns(-0.23%)Baseline: 88.69 ns | 89.30 ns (99.08%) |
| coalesce_acked_from_zero 10+1 entries | 📈 view plot 🚷 view threshold | 106.24 ns(+0.28%)Baseline: 105.94 ns | 106.89 ns (99.39%) |
| coalesce_acked_from_zero 1000+1 entries | 📈 view plot 🚷 view threshold | 89.08 ns(-0.24%)Baseline: 89.29 ns | 91.62 ns (97.23%) |
| coalesce_acked_from_zero 3+1 entries | 📈 view plot 🚷 view threshold | 106.45 ns(-0.08%)Baseline: 106.53 ns | 107.40 ns (99.11%) |
| decode 1048576 bytes, mask 3f | 📈 view plot 🚷 view threshold | 1,760,800.00 ns(+8.76%)Baseline: 1,618,995.89 ns | 1,772,698.80 ns (99.33%) |
| decode 1048576 bytes, mask 7f | 📈 view plot 🚷 view threshold | 5,090,000.00 ns(+0.51%)Baseline: 5,064,032.88 ns | 5,092,127.33 ns (99.96%) |
| decode 1048576 bytes, mask ff | 📈 view plot 🚷 view threshold 🚨 view alert (🔔) | 3,071,200.00 ns(+1.15%)Baseline: 3,036,191.78 ns | 3,069,876.22 ns (100.04%) |
| decode 4096 bytes, mask 3f | 📈 view plot 🚷 view threshold | 5,534.50 ns(-29.78%)Baseline: 7,881.99 ns | 10,226.42 ns (54.12%) |
| decode 4096 bytes, mask 7f | 📈 view plot 🚷 view threshold | 19,422.00 ns(-2.45%)Baseline: 19,910.25 ns | 20,417.73 ns (95.12%) |
| decode 4096 bytes, mask ff | 📈 view plot 🚷 view threshold | 11,627.00 ns(-1.57%)Baseline: 11,812.75 ns | 11,980.92 ns (97.05%) |
| sent::Packets::take_ranges | 📈 view plot 🚷 view threshold | 8,283.40 ns(-1.34%)Baseline: 8,396.24 ns | 8,610.25 ns (96.20%) |
| transfer/pacing-false/same-seed | 📈 view plot 🚷 view threshold | 35,787,000.00 ns(+2.48%)Baseline: 34,920,095.89 ns | 36,602,828.37 ns (97.77%) |
| transfer/pacing-false/varying-seeds | 📈 view plot 🚷 view threshold | 35,447,000.00 ns(+1.09%)Baseline: 35,063,780.82 ns | 36,793,170.04 ns (96.34%) |
| transfer/pacing-true/same-seed | 📈 view plot 🚷 view threshold | 37,384,000.00 ns(+2.34%)Baseline: 36,530,616.44 ns | 38,137,907.42 ns (98.02%) |
| transfer/pacing-true/varying-seeds | 📈 view plot 🚷 view threshold | 36,577,000.00 ns(+1.88%)Baseline: 35,901,520.55 ns | 37,524,596.72 ns (97.47%) |
Bencher Report
| Branch | fix-features |
| Testbed | t-linux64-ms-279 |
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 | 627,590,000.00 ns(-16.09%)Baseline: 747,942,500.00 ns | 1,240,194,385.25 ns (50.60%) |
| 1-conn/1-100mb-resp/mtu-1504 (aka. Download)/client | 📈 view plot 🚷 view threshold | 198,940,000.00 ns(-52.41%)Baseline: 418,047,500.00 ns | 1,407,118,298.59 ns (14.14%) |
| 1-conn/1-1b-resp/mtu-1504 (aka. HPS)/client | 📈 view plot 🚷 view threshold | 27,439,000.00 ns(+0.77%)Baseline: 27,228,750.00 ns | 28,333,645.74 ns (96.84%) |
| 1-conn/10_000-parallel-1b-resp/mtu-1504 (aka. RPS)/client | 📈 view plot 🚷 view threshold | 304,360,000.00 ns(+1.17%)Baseline: 300,840,000.00 ns | 313,432,123.06 ns (97.11%) |
| 1000 streams of 1 bytes/multistream | 📈 view plot 🚷 view threshold | 47.95 ns(+33.04%)Baseline: 36.04 ns | 69.67 ns (68.81%) |
| 1000 streams of 1000 bytes/multistream | 📈 view plot 🚷 view threshold | 47.18 ns(+22.32%)Baseline: 38.57 ns | 62.10 ns (75.97%) |
| RxStreamOrderer::inbound_frame() | 📈 view plot 🚷 view threshold | 107,960,000.00 ns(-0.88%)Baseline: 108,920,000.00 ns | 116,055,769.08 ns (93.02%) |
| coalesce_acked_from_zero 1+1 entries | 📈 view plot 🚷 view threshold | 88.42 ns(+0.04%)Baseline: 88.39 ns | 89.08 ns (99.25%) |
| coalesce_acked_from_zero 10+1 entries | 📈 view plot 🚷 view threshold | 105.03 ns(-0.12%)Baseline: 105.16 ns | 106.22 ns (98.88%) |
| coalesce_acked_from_zero 1000+1 entries | 📈 view plot 🚷 view threshold | 88.78 ns(-2.06%)Baseline: 90.64 ns | 99.03 ns (89.65%) |
| coalesce_acked_from_zero 3+1 entries | 📈 view plot 🚷 view threshold | 106.12 ns(+0.17%)Baseline: 105.94 ns | 106.90 ns (99.27%) |
| decode 1048576 bytes, mask 3f | 📈 view plot 🚷 view threshold | 1,799,700.00 ns(+9.55%)Baseline: 1,642,750.00 ns | 2,054,214.67 ns (87.61%) |
| decode 1048576 bytes, mask 7f | 📈 view plot 🚷 view threshold | 5,097,200.00 ns(+0.65%)Baseline: 5,064,475.00 ns | 5,154,319.19 ns (98.89%) |
| decode 1048576 bytes, mask ff | 📈 view plot 🚷 view threshold | 3,067,900.00 ns(+0.93%)Baseline: 3,039,775.00 ns | 3,113,852.76 ns (98.52%) |
| decode 4096 bytes, mask 3f | 📈 view plot 🚷 view threshold | 5,558.80 ns(-26.89%)Baseline: 7,603.60 ns | 12,964.41 ns (42.88%) |
| decode 4096 bytes, mask 7f | 📈 view plot 🚷 view threshold | 19,446.00 ns(-2.06%)Baseline: 19,854.25 ns | 20,924.94 ns (92.93%) |
| decode 4096 bytes, mask ff | 📈 view plot 🚷 view threshold | 11,672.00 ns(-1.22%)Baseline: 11,816.50 ns | 12,226.78 ns (95.46%) |
| sent::Packets::take_ranges | 📈 view plot 🚷 view threshold | 8,320.70 ns(+1.78%)Baseline: 8,175.35 ns | 8,875.44 ns (93.75%) |
| transfer/pacing-false/same-seed | 📈 view plot 🚷 view threshold | 36,650,000.00 ns(+1.92%)Baseline: 35,961,000.00 ns | 39,418,403.09 ns (92.98%) |
| transfer/pacing-false/varying-seeds | 📈 view plot 🚷 view threshold | 37,293,000.00 ns(+2.89%)Baseline: 36,245,500.00 ns | 40,338,863.04 ns (92.45%) |
| transfer/pacing-true/same-seed | 📈 view plot 🚷 view threshold | 38,817,000.00 ns(+3.64%)Baseline: 37,452,500.00 ns | 42,197,319.94 ns (91.99%) |
| transfer/pacing-true/varying-seeds | 📈 view plot 🚷 view threshold | 38,031,000.00 ns(+3.16%)Baseline: 36,865,250.00 ns | 41,255,039.36 ns (92.19%) |
Bencher Report
| Branch | fix-features |
| Testbed | t-linux64-ms-279 |
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 | 170.83 ms(-28.03%)Baseline: 237.36 ms | 538.39 ms (31.73%) |
Bencher Report
| Branch | fix-features |
| Testbed | t-linux64-ms-278 |
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 | 644,780,000.00 ns(-22.62%)Baseline: 833,280,000.00 ns | 1,135,572,397.07 ns (56.78%) |
| 1-conn/1-100mb-resp/mtu-1504 (aka. Download)/client | 📈 view plot 🚷 view threshold | 655,620,000.00 ns(+0.28%)Baseline: 653,791,666.67 ns | 675,797,849.36 ns (97.01%) |
| 1-conn/1-1b-resp/mtu-1504 (aka. HPS)/client | 📈 view plot 🚷 view threshold | 27,119,000.00 ns(-0.06%)Baseline: 27,134,166.67 ns | 27,330,233.80 ns (99.23%) |
| 1-conn/10_000-parallel-1b-resp/mtu-1504 (aka. RPS)/client | 📈 view plot 🚷 view threshold | 298,380,000.00 ns(-0.07%)Baseline: 298,586,666.67 ns | 301,752,185.80 ns (98.88%) |
| 1000 streams of 1 bytes/multistream | 📈 view plot 🚷 view threshold | 36.50 ns(+13.87%)Baseline: 32.05 ns | 44.97 ns (81.16%) |
| 1000 streams of 1000 bytes/multistream | 📈 view plot 🚷 view threshold | 48.14 ns(+40.65%)Baseline: 34.23 ns | 57.58 ns (83.60%) |
| RxStreamOrderer::inbound_frame() | 📈 view plot 🚷 view threshold | 108,040,000.00 ns(+0.44%)Baseline: 107,566,666.67 ns | 108,789,772.31 ns (99.31%) |
| coalesce_acked_from_zero 1+1 entries | 📈 view plot 🚷 view threshold | 88.51 ns(-0.42%)Baseline: 88.88 ns | 90.79 ns (97.49%) |
| coalesce_acked_from_zero 10+1 entries | 📈 view plot 🚷 view threshold | 105.27 ns(-0.52%)Baseline: 105.82 ns | 107.01 ns (98.37%) |
| coalesce_acked_from_zero 1000+1 entries | 📈 view plot 🚷 view threshold | 90.32 ns(+1.01%)Baseline: 89.42 ns | 91.19 ns (99.05%) |
| coalesce_acked_from_zero 3+1 entries | 📈 view plot 🚷 view threshold | 105.76 ns(-0.53%)Baseline: 106.32 ns | 107.76 ns (98.14%) |
| decode 1048576 bytes, mask 3f | 📈 view plot 🚷 view threshold | 1,784,300.00 ns(+9.65%)Baseline: 1,627,216.67 ns | 1,863,844.66 ns (95.73%) |
| decode 1048576 bytes, mask 7f | 📈 view plot 🚷 view threshold | 5,098,800.00 ns(+0.77%)Baseline: 5,059,716.67 ns | 5,121,583.33 ns (99.56%) |
| decode 1048576 bytes, mask ff | 📈 view plot 🚷 view threshold | 3,073,400.00 ns(+1.09%)Baseline: 3,040,133.33 ns | 3,090,833.22 ns (99.44%) |
| decode 4096 bytes, mask 3f | 📈 view plot 🚷 view threshold | 5,558.10 ns(-29.14%)Baseline: 7,844.00 ns | 11,284.48 ns (49.25%) |
| decode 4096 bytes, mask 7f | 📈 view plot 🚷 view threshold | 19,372.00 ns(-2.70%)Baseline: 19,909.00 ns | 20,724.64 ns (93.47%) |
| decode 4096 bytes, mask ff | 📈 view plot 🚷 view threshold | 11,642.00 ns(-1.47%)Baseline: 11,816.00 ns | 12,085.52 ns (96.33%) |
| sent::Packets::take_ranges | 📈 view plot 🚷 view threshold | 8,293.30 ns(+1.08%)Baseline: 8,204.87 ns | 8,385.40 ns (98.90%) |
| transfer/pacing-false/same-seed | 📈 view plot 🚷 view threshold | 35,240,000.00 ns(+1.40%)Baseline: 34,753,000.00 ns | 35,696,133.31 ns (98.72%) |
| transfer/pacing-false/varying-seeds | 📈 view plot 🚷 view threshold | 35,181,000.00 ns(+1.13%)Baseline: 34,789,000.00 ns | 35,833,247.53 ns (98.18%) |
| transfer/pacing-true/same-seed | 📈 view plot 🚷 view threshold | 36,688,000.00 ns(+1.16%)Baseline: 36,266,166.67 ns | 37,342,750.44 ns (98.25%) |
| transfer/pacing-true/varying-seeds | 📈 view plot 🚷 view threshold | 36,264,000.00 ns(+1.93%)Baseline: 35,575,833.33 ns | 36,866,018.78 ns (98.37%) |
Bencher Report
| Branch | fix-features |
| Testbed | t-linux64-ms-278 |
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 | 300.26 ms(-1.12%)Baseline: 303.67 ms | 315.23 ms (95.25%) |
Benchmark results
Performance differences relative to 5387454abc5da5b29e36dbc1ead47c69adfa51a8.
1-conn/1-100mb-resp/mtu-1504 (aka. Download)/client: :green_heart: Performance has improved.
time: [199.06 ms 199.35 ms 199.65 ms]
thrpt: [500.87 MiB/s 501.62 MiB/s 502.36 MiB/s]
change:
time: [−2.2498% −1.8915% −1.5688%] (p = 0.00 +1.9280% +2.3015%]
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild
1-conn/10_000-parallel-1b-resp/mtu-1504 (aka. RPS)/client: No change in performance detected.
time: [300.97 ms 302.53 ms 304.09 ms]
thrpt: [32.885 Kelem/s 33.054 Kelem/s 33.226 Kelem/s]
change:
time: [−1.1631% −0.4865% +0.1677%] (p = 0.17 > 0.05)
thrpt: [−0.1674% +0.4889% +1.1768%]
Found 2 outliers among 100 measurements (2.00%)
1 (1.00%) low mild
1 (1.00%) high mild
1-conn/1-1b-resp/mtu-1504 (aka. HPS)/client: No change in performance detected.
time: [27.466 ms 27.552 ms 27.652 ms]
thrpt: [36.164 B/s 36.295 B/s 36.408 B/s]
change:
time: [−0.7318% −0.1418% +0.3798%] (p = 0.63 > 0.05)
thrpt: [−0.3784% +0.1420% +0.7372%]
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high severe
1-conn/1-100mb-req/mtu-1504 (aka. Upload)/client: :green_heart: Performance has improved.
time: [632.99 ms 636.81 ms 640.61 ms]
thrpt: [156.10 MiB/s 157.03 MiB/s 157.98 MiB/s]
change:
time: [−3.5012% −2.5727% −1.5710%] (p = 0.00 +2.6406% +3.6282%]
Found 4 outliers among 100 measurements (4.00%)
1 (1.00%) low severe
2 (2.00%) low mild
1 (1.00%) high severe
decode 4096 bytes, mask ff: :green_heart: Performance has improved.
time: [11.617 µs 11.651 µs 11.693 µs]
change: [−1.8753% −1.5051% −1.1287%] (p = 0.00 Found 14 outliers among 100 measurements (14.00%)
3 (3.00%) low severe
2 (2.00%) low mild
9 (9.00%) high severedecode 1048576 bytes, mask ff: Change within noise threshold.
time: [3.0609 ms 3.0704 ms 3.0816 ms]
change: [+0.8765% +1.3615% +1.8152%] (p = 0.00 Found 11 outliers among 100 measurements (11.00%)
2 (2.00%) high mild
9 (9.00%) high severedecode 4096 bytes, mask 7f: :green_heart: Performance has improved.
time: [19.380 µs 19.433 µs 19.490 µs]
change: [−3.0589% −2.6482% −2.2598%] (p = 0.00 Found 20 outliers among 100 measurements (20.00%)
1 (1.00%) low severe
3 (3.00%) low mild
1 (1.00%) high mild
15 (15.00%) high severedecode 1048576 bytes, mask 7f: Change within noise threshold.
time: [5.0899 ms 5.1123 ms 5.1425 ms]
change: [+0.2416% +0.9940% +1.8198%] (p = 0.01 Found 17 outliers among 100 measurements (17.00%)
1 (1.00%) high mild
16 (16.00%) high severedecode 4096 bytes, mask 3f: :green_heart: Performance has improved.
time: [5.5223 µs 5.5392 µs 5.5632 µs]
change: [−33.607% −33.133% −32.618%] (p = 0.00 Found 14 outliers among 100 measurements (14.00%)
2 (2.00%) low mild
1 (1.00%) high mild
11 (11.00%) high severedecode 1048576 bytes, mask 3f: :broken_heart: Performance has regressed.
time: [1.7577 ms 1.7579 ms 1.7580 ms]
change: [+9.9304% +10.412% +10.805%] (p = 0.00 Found 6 outliers among 100 measurements (6.00%)
2 (2.00%) low mild
3 (3.00%) high mild
1 (1.00%) high severe1000 streams of 1 bytes/multistream: :broken_heart: Performance has regressed.
time: [46.961 ns 47.141 ns 47.319 ns]
change: [+25.604% +27.038% +28.507%] (p = 0.00 Found 3 outliers among 500 measurements (0.60%)
3 (0.60%) low mild1000 streams of 1000 bytes/multistream: :broken_heart: Performance has regressed.
time: [46.879 ns 47.087 ns 47.298 ns]
change: [+31.174% +32.753% +34.387%] (p = 0.00 Found 1 outliers among 500 measurements (0.20%)
1 (0.20%) high severecoalesce_acked_from_zero 1+1 entries: No change in performance detected.
time: [88.056 ns 88.395 ns 88.731 ns]
change: [−0.7580% −0.1239% +0.6309%] (p = 0.74 > 0.05)
Found 16 outliers among 100 measurements (16.00%)
12 (12.00%) high mild
4 (4.00%) high severe
coalesce_acked_from_zero 3+1 entries: Change within noise threshold.
time: [105.52 ns 105.89 ns 106.27 ns]
change: [−1.1268% −0.6448% −0.1497%] (p = 0.01 Found 14 outliers among 100 measurements (14.00%)
14 (14.00%) high severecoalesce_acked_from_zero 10+1 entries: No change in performance detected.
time: [104.94 ns 105.35 ns 105.87 ns]
change: [−0.6239% +0.1725% +1.2132%] (p = 0.77 > 0.05)
Found 18 outliers among 100 measurements (18.00%)
2 (2.00%) low severe
3 (3.00%) low mild
3 (3.00%) high mild
10 (10.00%) high severe
coalesce_acked_from_zero 1000+1 entries: No change in performance detected.
time: [88.740 ns 88.837 ns 88.954 ns]
change: [−1.4282% −0.4340% +0.6132%] (p = 0.43 > 0.05)
Found 14 outliers among 100 measurements (14.00%)
6 (6.00%) high mild
8 (8.00%) high severe
RxStreamOrderer::inbound_frame(): No change in performance detected.
time: [107.94 ms 108.07 ms 108.22 ms]
change: [−0.4014% −0.1339% +0.0813%] (p = 0.32 > 0.05)
Found 3 outliers among 100 measurements (3.00%)
3 (3.00%) high severe
sent::Packets::take_ranges: No change in performance detected.
time: [8.0711 µs 8.2591 µs 8.4299 µs]
change: [−1.8308% +4.6497% +16.282%] (p = 0.39 > 0.05)
Found 18 outliers among 100 measurements (18.00%)
5 (5.00%) low severe
9 (9.00%) low mild
2 (2.00%) high mild
2 (2.00%) high severe
transfer/pacing-false/varying-seeds: Change within noise threshold.
time: [36.908 ms 37.009 ms 37.125 ms]
change: [+0.5332% +0.9068% +1.2643%] (p = 0.00 Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high severetransfer/pacing-true/varying-seeds: Change within noise threshold.
time: [37.866 ms 37.985 ms 38.106 ms]
change: [+1.2718% +1.7401% +2.1818%] (p = 0.00 transfer/pacing-false/same-seed: Change within noise threshold.
time: [36.809 ms 36.895 ms 36.995 ms]
change: [+1.4011% +1.7223% +2.0394%] (p = 0.00 Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high severetransfer/pacing-true/same-seed: Change within noise threshold.
time: [38.809 ms 38.888 ms 38.970 ms]
change: [+1.9028% +2.2730% +2.6189%] (p = 0.00 Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mildDownload data for profiler.firefox.com or download performance comparison data.
Client/server transfer results
Performance differences relative to 5387454abc5da5b29e36dbc1ead47c69adfa51a8.
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 | 459.2 ± 4.1 | 452.6 | 468.4 | 69.7 ± 7.8 | ||
| google vs. neqo (cubic, paced) | 271.6 ± 4.2 | 264.3 | 287.6 | 117.8 ± 7.6 | :green_heart: -1.9 | -0.7% |
| msquic vs. msquic | 131.2 ± 19.9 | 110.8 | 243.9 | 244.0 ± 1.6 | ||
| msquic vs. neqo (cubic, paced) | 149.6 ± 37.0 | 125.3 | 393.5 | 213.8 ± 0.9 | 4.7 | 3.2% |
| neqo vs. google (cubic, paced) | 762.1 ± 5.2 | 754.6 | 778.0 | 42.0 ± 6.2 | -1.4 | -0.2% |
| neqo vs. msquic (cubic, paced) | 156.4 ± 4.9 | 148.7 | 181.4 | 204.6 ± 6.5 | 0.4 | 0.2% |
| neqo vs. neqo (cubic) | 90.5 ± 4.7 | 81.4 | 100.0 | 353.7 ± 6.8 | :green_heart: -3.0 | -3.2% |
| neqo vs. neqo (cubic, paced) | 91.3 ± 4.0 | 82.4 | 98.9 | 350.4 ± 8.0 | :green_heart: -1.4 | -1.5% |
| neqo vs. neqo (reno) | 90.0 ± 5.0 | 82.7 | 115.1 | 355.6 ± 6.4 | -1.1 | -1.2% |
| neqo vs. neqo (reno, paced) | 91.3 ± 5.1 | 83.5 | 112.4 | 350.4 ± 6.3 | -0.5 | -0.5% |
| neqo vs. quiche (cubic, paced) | 193.6 ± 4.8 | 185.9 | 206.5 | 165.3 ± 6.7 | :green_heart: -1.8 | -0.9% |
| neqo vs. s2n (cubic, paced) | 219.7 ± 4.7 | 211.4 | 236.4 | 145.7 ± 6.8 | 0.3 | 0.1% |
| quiche vs. neqo (cubic, paced) | 160.4 ± 6.4 | 148.4 | 194.6 | 199.5 ± 5.0 | :broken_heart: 1.8 | 1.1% |
| quiche vs. quiche | 149.2 ± 5.2 | 141.2 | 163.6 | 214.5 ± 6.2 | ||
| s2n vs. neqo (cubic, paced) | 170.6 ± 5.5 | 161.4 | 198.9 | 187.6 ± 5.8 | -1.0 | -0.6% |
| s2n vs. s2n | 245.8 ± 22.4 | 230.0 | 346.3 | 130.2 ± 1.4 |
Download data for profiler.firefox.com or download performance comparison data.
I think there is some weak signal that there is some performance benefit here.
Client/server transfer results
Performance differences relative to 8c6524015e07834a72d566804041544d746e93ef.
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 | 459.1 ± 4.5 | 452.3 | 476.2 | 69.7 ± 7.1 | ||
| google vs. neqo (cubic, paced) | 271.0 ± 4.4 | 263.3 | 287.4 | 118.1 ± 7.3 | -1.2 | -0.4% |
| msquic vs. msquic | 128.6 ± 15.7 | 109.8 | 214.1 | 248.9 ± 2.0 | ||
| msquic vs. neqo (cubic, paced) | 156.3 ± 44.1 | 123.2 | 429.5 | 204.8 ± 0.7 | :broken_heart: 10.8 | 7.5% |
| neqo vs. google (cubic, paced) | 761.9 ± 4.1 | 753.3 | 773.2 | 42.0 ± 7.8 | -0.0 | -0.0% |
| neqo vs. msquic (cubic, paced) | 156.1 ± 4.8 | 149.6 | 170.7 | 204.9 ± 6.7 | -0.4 | -0.3% |
| neqo vs. neqo (cubic) | 94.0 ± 5.4 | 85.1 | 112.5 | 340.4 ± 5.9 | :broken_heart: 3.2 | 3.6% |
| neqo vs. neqo (cubic, paced) | 93.7 ± 5.4 | 84.7 | 122.7 | 341.5 ± 5.9 | :broken_heart: 3.7 | 4.1% |
| neqo vs. neqo (reno) | 92.1 ± 4.5 | 84.2 | 105.2 | 347.3 ± 7.1 | 1.3 | 1.4% |
| neqo vs. neqo (reno, paced) | 93.4 ± 5.0 | 86.0 | 114.1 | 342.7 ± 6.4 | :broken_heart: 2.7 | 3.0% |
| neqo vs. quiche (cubic, paced) | 195.2 ± 4.4 | 186.1 | 203.1 | 164.0 ± 7.3 | 0.5 | 0.3% |
| neqo vs. s2n (cubic, paced) | 219.1 ± 4.6 | 210.6 | 227.6 | 146.0 ± 7.0 | :broken_heart: 2.1 | 1.0% |
| quiche vs. neqo (cubic, paced) | 156.2 ± 5.5 | 145.5 | 172.4 | 204.9 ± 5.8 | :green_heart: -4.9 | -3.0% |
| quiche vs. quiche | 149.2 ± 4.9 | 141.4 | 161.4 | 214.5 ± 6.5 | ||
| s2n vs. neqo (cubic, paced) | 170.0 ± 4.7 | 160.7 | 179.3 | 188.2 ± 6.8 | -1.3 | -0.8% |
| s2n vs. s2n | 243.6 ± 20.4 | 230.0 | 344.3 | 131.3 ± 1.6 |
Download data for profiler.firefox.com or download performance comparison data.
Benchmark results
Performance differences relative to 8c6524015e07834a72d566804041544d746e93ef.
1-conn/1-100mb-resp/mtu-1504 (aka. Download)/client: :green_heart: Performance has improved.
time: [198.46 ms 198.74 ms 199.03 ms]
thrpt: [502.44 MiB/s 503.17 MiB/s 503.89 MiB/s]
change:
time: [−2.6756% −2.3995% −2.1512%] (p = 0.00 +2.4585% +2.7492%]
Found 3 outliers among 100 measurements (3.00%)
3 (3.00%) high mild
1-conn/10_000-parallel-1b-resp/mtu-1504 (aka. RPS)/client: Change within noise threshold.
time: [304.21 ms 305.72 ms 307.25 ms]
thrpt: [32.547 Kelem/s 32.710 Kelem/s 32.872 Kelem/s]
change:
time: [+0.3397% +0.9623% +1.6602%] (p = 0.01 −0.9531% −0.3385%]
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild
1-conn/1-1b-resp/mtu-1504 (aka. HPS)/client: No change in performance detected.
time: [28.283 ms 28.430 ms 28.594 ms]
thrpt: [34.972 B/s 35.174 B/s 35.357 B/s]
change:
time: [−0.5965% +0.2030% +0.9583%] (p = 0.61 > 0.05)
thrpt: [−0.9492% −0.2026% +0.6001%]
Found 8 outliers among 100 measurements (8.00%)
1 (1.00%) low mild
1 (1.00%) high mild
6 (6.00%) high severe
1-conn/1-100mb-req/mtu-1504 (aka. Upload)/client: No change in performance detected.
time: [205.54 ms 205.80 ms 206.09 ms]
thrpt: [485.22 MiB/s 485.91 MiB/s 486.51 MiB/s]
change:
time: [−0.3494% −0.1263% +0.1039%] (p = 0.28 > 0.05)
thrpt: [−0.1038% +0.1265% +0.3506%]
Found 3 outliers among 100 measurements (3.00%)
2 (2.00%) high mild
1 (1.00%) high severe
decode 4096 bytes, mask ff: :green_heart: Performance has improved.
time: [11.626 µs 11.669 µs 11.718 µs]
change: [−1.9917% −1.6344% −1.2619%] (p = 0.00 Found 19 outliers among 100 measurements (19.00%)
2 (2.00%) low severe
5 (5.00%) low mild
2 (2.00%) high mild
10 (10.00%) high severedecode 1048576 bytes, mask ff: :broken_heart: Performance has regressed.
time: [3.0641 ms 3.0735 ms 3.0847 ms]
change: [+1.4047% +1.8195% +2.2402%] (p = 0.00 Found 12 outliers among 100 measurements (12.00%)
3 (3.00%) low mild
9 (9.00%) high severedecode 4096 bytes, mask 7f: :green_heart: Performance has improved.
time: [19.398 µs 19.459 µs 19.525 µs]
change: [−3.8802% −3.3747% −2.9285%] (p = 0.00 Found 21 outliers among 100 measurements (21.00%)
1 (1.00%) low mild
2 (2.00%) high mild
18 (18.00%) high severedecode 1048576 bytes, mask 7f: Change within noise threshold.
time: [5.0873 ms 5.1008 ms 5.1160 ms]
change: [+0.5145% +0.8992% +1.3186%] (p = 0.00 Found 16 outliers among 100 measurements (16.00%)
16 (16.00%) high severedecode 4096 bytes, mask 3f: :green_heart: Performance has improved.
time: [5.5178 µs 5.5265 µs 5.5407 µs]
change: [−34.130% −33.517% −32.988%] (p = 0.00 Found 9 outliers among 100 measurements (9.00%)
3 (3.00%) low mild
2 (2.00%) high mild
4 (4.00%) high severedecode 1048576 bytes, mask 3f: :broken_heart: Performance has regressed.
time: [1.7576 ms 1.7591 ms 1.7620 ms]
change: [+9.4831% +10.283% +10.884%] (p = 0.00 Found 34 outliers among 100 measurements (34.00%)
15 (15.00%) low mild
13 (13.00%) high mild
6 (6.00%) high severecoalesce_acked_from_zero 1+1 entries: No change in performance detected.
time: [88.150 ns 88.487 ns 88.819 ns]
change: [−0.7240% −0.2824% +0.1390%] (p = 0.21 > 0.05)
Found 10 outliers among 100 measurements (10.00%)
9 (9.00%) high mild
1 (1.00%) high severe
coalesce_acked_from_zero 3+1 entries: No change in performance detected.
time: [106.18 ns 106.51 ns 106.87 ns]
change: [−0.4131% +0.0631% +0.5189%] (p = 0.79 > 0.05)
Found 12 outliers among 100 measurements (12.00%)
1 (1.00%) high mild
11 (11.00%) high severe
coalesce_acked_from_zero 10+1 entries: No change in performance detected.
time: [105.52 ns 105.80 ns 106.15 ns]
change: [−0.7972% −0.0134% +0.7314%] (p = 0.98 > 0.05)
Found 19 outliers among 100 measurements (19.00%)
1 (1.00%) low severe
9 (9.00%) low mild
2 (2.00%) high mild
7 (7.00%) high severe
coalesce_acked_from_zero 1000+1 entries: No change in performance detected.
time: [89.198 ns 89.317 ns 89.451 ns]
change: [−0.9001% −0.0427% +0.8482%] (p = 0.92 > 0.05)
Found 9 outliers among 100 measurements (9.00%)
3 (3.00%) high mild
6 (6.00%) high severe
RxStreamOrderer::inbound_frame(): No change in performance detected.
time: [107.83 ms 107.99 ms 108.27 ms]
change: [−0.1654% +0.0070% +0.3070%] (p = 0.96 > 0.05)
Found 11 outliers among 100 measurements (11.00%)
10 (10.00%) low mild
1 (1.00%) high severe
sent::Packets::take_ranges: No change in performance detected.
time: [8.0356 µs 8.2360 µs 8.4204 µs]
change: [−1.2309% +5.5439% +15.772%] (p = 0.27 > 0.05)
Found 19 outliers among 100 measurements (19.00%)
4 (4.00%) low severe
10 (10.00%) low mild
2 (2.00%) high mild
3 (3.00%) high severe
transfer/pacing-false/varying-seeds: Change within noise threshold.
time: [36.424 ms 36.507 ms 36.592 ms]
change: [−2.5591% −2.2187% −1.9012%] (p = 0.00 Found 3 outliers among 100 measurements (3.00%)
1 (1.00%) low mild
2 (2.00%) high mildtransfer/pacing-true/varying-seeds: Change within noise threshold.
time: [37.322 ms 37.437 ms 37.554 ms]
change: [−1.8225% −1.4028% −0.9780%] (p = 0.00 Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mildtransfer/pacing-false/same-seed: Change within noise threshold.
time: [36.223 ms 36.283 ms 36.345 ms]
change: [−2.0844% −1.8231% −1.5680%] (p = 0.00 transfer/pacing-true/same-seed: Change within noise threshold.
time: [37.816 ms 37.895 ms 37.983 ms]
change: [−1.8263% −1.5237% −1.2467%] (p = 0.00 Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high severeDownload data for profiler.firefox.com or download performance comparison data.
I don't see enough performance benefits here.