Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Option to turn off SNI slicing #2387

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

larseggert
Copy link
Collaborator

Wireshark can't reassemble sliced CRYPTO frames, which causes QNS tests to fail bcause it then can't parse all packets.

This PR adds an option to disable SNI slicing, and we do so by default when running in QNS.

Wireshark can't reassemble sliced CRYPTO frames, which causes QNS tests to fail bcause it then can't parse all packets.

This PR adds an option to disable SNI slicing, and we do so by default when running in QNS.
Copy link

codecov bot commented Jan 23, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 95.29%. Comparing base (d62557f) to head (2fcb37a).

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #2387   +/-   ##
=======================================
  Coverage   95.29%   95.29%           
=======================================
  Files         114      114           
  Lines       36850    36868   +18     
  Branches    36850    36868   +18     
=======================================
+ Hits        35117    35135   +18     
  Misses       1727     1727           
  Partials        6        6           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

Copy link

Failed Interop Tests

QUIC Interop Runner, client vs. server, differences relative to 108fb8d.

neqo-latest as client

neqo-latest as server

All results

Succeeded Interop Tests

QUIC Interop Runner, client vs. server

neqo-latest as client

neqo-latest as server

Unsupported Interop Tests

QUIC Interop Runner, client vs. server

neqo-latest as client

neqo-latest as server

@mxinden
Copy link
Collaborator

mxinden commented Jan 23, 2025

That is a bummer. Especially since this gave us a signal whether all server implementations supported the sni-slicing feature. Do you see this being an issue? Is this temporary?

Copy link

Benchmark results

Performance differences relative to d62557f.

decode 4096 bytes, mask ff: No change in performance detected.
       time:   [11.858 µs 11.900 µs 11.946 µs]
       change: [-0.0408% +0.5494% +1.3108%] (p = 0.13 > 0.05)

Found 17 outliers among 100 measurements (17.00%)
1 (1.00%) low severe
3 (3.00%) low mild
1 (1.00%) high mild
12 (12.00%) high severe

decode 1048576 bytes, mask ff: No change in performance detected.
       time:   [2.8848 ms 2.8934 ms 2.9035 ms]
       change: [-0.5520% -0.0848% +0.4000%] (p = 0.74 > 0.05)

Found 9 outliers among 100 measurements (9.00%)
9 (9.00%) high severe

decode 4096 bytes, mask 7f: No change in performance detected.
       time:   [19.797 µs 19.854 µs 19.915 µs]
       change: [-0.1237% +0.2410% +0.6058%] (p = 0.21 > 0.05)

Found 19 outliers among 100 measurements (19.00%)
1 (1.00%) low mild
18 (18.00%) high severe

decode 1048576 bytes, mask 7f: No change in performance detected.
       time:   [5.0845 ms 5.0994 ms 5.1158 ms]
       change: [-0.0822% +0.2983% +0.7117%] (p = 0.14 > 0.05)

Found 21 outliers among 100 measurements (21.00%)
1 (1.00%) high mild
20 (20.00%) high severe

decode 4096 bytes, mask 3f: No change in performance detected.
       time:   [6.9166 µs 6.9549 µs 6.9980 µs]
       change: [-0.0017% +0.7725% +1.6043%] (p = 0.07 > 0.05)

Found 19 outliers among 100 measurements (19.00%)
7 (7.00%) low mild
2 (2.00%) high mild
10 (10.00%) high severe

decode 1048576 bytes, mask 3f: No change in performance detected.
       time:   [1.4125 ms 1.4167 ms 1.4222 ms]
       change: [-0.5985% -0.1034% +0.3853%] (p = 0.69 > 0.05)

Found 5 outliers among 100 measurements (5.00%)
2 (2.00%) high mild
3 (3.00%) high severe

coalesce_acked_from_zero 1+1 entries: No change in performance detected.
       time:   [98.721 ns 99.055 ns 99.428 ns]
       change: [-0.5476% +0.0165% +0.5467%] (p = 0.95 > 0.05)

Found 12 outliers among 100 measurements (12.00%)
6 (6.00%) high mild
6 (6.00%) high severe

coalesce_acked_from_zero 3+1 entries: No change in performance detected.
       time:   [116.81 ns 117.25 ns 117.75 ns]
       change: [-0.3519% +0.1820% +0.7728%] (p = 0.54 > 0.05)

Found 21 outliers among 100 measurements (21.00%)
3 (3.00%) low severe
2 (2.00%) high mild
16 (16.00%) high severe

coalesce_acked_from_zero 10+1 entries: No change in performance detected.
       time:   [116.25 ns 116.61 ns 117.06 ns]
       change: [-0.4086% +0.1397% +0.6707%] (p = 0.63 > 0.05)

Found 13 outliers among 100 measurements (13.00%)
5 (5.00%) low severe
1 (1.00%) low mild
2 (2.00%) high mild
5 (5.00%) high severe

coalesce_acked_from_zero 1000+1 entries: No change in performance detected.
       time:   [97.446 ns 97.596 ns 97.764 ns]
       change: [-6.0501% -1.9018% +0.6904%] (p = 0.44 > 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.48 ms 111.52 ms 111.57 ms]
       change: [-0.1906% -0.1231% -0.0565%] (p = 0.00 < 0.05)

Found 13 outliers among 100 measurements (13.00%)
3 (3.00%) low severe
3 (3.00%) low mild
7 (7.00%) high mild

SentPackets::take_ranges: No change in performance detected.
       time:   [5.4597 µs 5.6370 µs 5.8268 µs]
       change: [-2.4041% +0.3028% +3.0465%] (p = 0.82 > 0.05)

Found 9 outliers among 100 measurements (9.00%)
6 (6.00%) high mild
3 (3.00%) high severe

transfer/pacing-false/varying-seeds: Change within noise threshold.
       time:   [40.978 ms 41.058 ms 41.138 ms]
       change: [-2.9466% -2.6762% -2.4098%] (p = 0.00 < 0.05)
transfer/pacing-true/varying-seeds: Change within noise threshold.
       time:   [41.157 ms 41.230 ms 41.304 ms]
       change: [-2.9183% -2.6784% -2.4073%] (p = 0.00 < 0.05)

Found 2 outliers among 100 measurements (2.00%)
1 (1.00%) low mild
1 (1.00%) high mild

transfer/pacing-false/same-seed: Change within noise threshold.
       time:   [40.732 ms 40.795 ms 40.860 ms]
       change: [-2.3883% -2.1893% -1.9696%] (p = 0.00 < 0.05)

Found 3 outliers among 100 measurements (3.00%)
3 (3.00%) high mild

transfer/pacing-true/same-seed: Change within noise threshold.
       time:   [41.327 ms 41.381 ms 41.435 ms]
       change: [-1.5395% -1.3447% -1.1595%] (p = 0.00 < 0.05)
1-conn/1-100mb-resp/mtu-1504 (aka. Download)/client: 💚 Performance has improved.
       time:   [881.29 ms 892.25 ms 903.51 ms]
       thrpt:  [110.68 MiB/s 112.08 MiB/s 113.47 MiB/s]
change:
       time:   [-8.1148% -6.5662% -5.0395%] (p = 0.00 < 0.05)
       thrpt:  [+5.3070% +7.0276% +8.8314%]
1-conn/10_000-parallel-1b-resp/mtu-1504 (aka. RPS)/client: No change in performance detected.
       time:   [317.71 ms 319.74 ms 321.77 ms]
       thrpt:  [31.078 Kelem/s 31.276 Kelem/s 31.476 Kelem/s]
change:
       time:   [-0.7001% +0.2225% +1.1917%] (p = 0.64 > 0.05)
       thrpt:  [-1.1777% -0.2220% +0.7050%]

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:   [34.303 ms 34.480 ms 34.671 ms]
       thrpt:  [28.843  elem/s 29.003  elem/s 29.152  elem/s]
change:
       time:   [-1.3756% -0.5077% +0.3429%] (p = 0.25 > 0.05)
       thrpt:  [-0.3417% +0.5103% +1.3948%]

Found 10 outliers among 100 measurements (10.00%)
3 (3.00%) low mild
2 (2.00%) high mild
5 (5.00%) high severe

1-conn/1-100mb-resp/mtu-1504 (aka. Upload)/client: Change within noise threshold.
       time:   [1.7319 s 1.7475 s 1.7630 s]
       thrpt:  [56.723 MiB/s 57.226 MiB/s 57.741 MiB/s]
change:
       time:   [+0.5537% +1.9774% +3.2893%] (p = 0.00 < 0.05)
       thrpt:  [-3.1845% -1.9390% -0.5506%]

Client/server transfer results

Transfer of 33554432 bytes over loopback.

Client Server CC Pacing MTU Mean [ms] Min [ms] Max [ms]
gquiche gquiche 1504 568.2 ± 87.1 516.6 796.3
neqo gquiche reno on 1504 768.3 ± 27.7 753.1 846.2
neqo gquiche reno 1504 759.4 ± 54.0 719.2 908.3
neqo gquiche cubic on 1504 774.5 ± 51.1 738.0 912.1
neqo gquiche cubic 1504 790.9 ± 70.3 736.2 983.6
msquic msquic 1504 194.1 ± 99.1 94.4 365.3
neqo msquic reno on 1504 214.9 ± 10.9 198.5 232.9
neqo msquic reno 1504 221.0 ± 11.4 202.8 243.4
neqo msquic cubic on 1504 293.2 ± 136.9 201.8 649.8
neqo msquic cubic 1504 214.9 ± 7.0 204.8 224.0
gquiche neqo reno on 1504 672.4 ± 95.8 541.8 856.8
gquiche neqo reno 1504 677.8 ± 90.6 536.5 802.3
gquiche neqo cubic on 1504 692.1 ± 136.1 550.3 1024.4
gquiche neqo cubic 1504 682.7 ± 82.6 565.3 817.6
msquic neqo reno on 1504 476.8 ± 11.4 463.0 502.0
msquic neqo reno 1504 479.5 ± 63.9 449.0 660.1
msquic neqo cubic on 1504 504.4 ± 8.9 490.9 515.9
msquic neqo cubic 1504 479.8 ± 26.9 459.0 552.2
neqo neqo reno on 1504 495.7 ± 45.8 449.0 611.8
neqo neqo reno 1504 457.4 ± 24.2 432.8 516.6
neqo neqo cubic on 1504 457.4 ± 8.0 443.5 466.5
neqo neqo cubic 1504 511.2 ± 65.1 469.0 654.9

⬇️ Download logs

@larseggert
Copy link
Collaborator Author

I'd be very surprised if major servers wouldn't support it.

We can file an issue with wireshark, but it's also kind of a feature when our connections can't be parsed :-)

@mxinden
Copy link
Collaborator

mxinden commented Jan 23, 2025

but it's also kind of a feature when our connections can't be parsed :-)

Haha, true.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants