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 for no zero-len CIDs for client #2171

Draft
wants to merge 4 commits into
base: main
Choose a base branch
from

Conversation

larseggert
Copy link
Collaborator

@larseggert larseggert commented Oct 14, 2024

They break the upcoming QNS migration tests.

Edit: We might not need this with #2176 and #2182. Verify.

They break the upcoming QNS migration tests.
Copy link

codecov bot commented Oct 14, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 95.39%. Comparing base (9b5ec71) to head (28d1212).

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #2171   +/-   ##
=======================================
  Coverage   95.39%   95.39%           
=======================================
  Files         112      112           
  Lines       36373    36373           
=======================================
  Hits        34697    34697           
  Misses       1676     1676           

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

Copy link

github-actions bot commented Oct 14, 2024

Failed Interop Tests

QUIC Interop Runner, client vs. server

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

Copy link

github-actions bot commented Oct 14, 2024

Benchmark results

Performance differences relative to 9b5ec71.

coalesce_acked_from_zero 1+1 entries: Change within noise threshold.
       time:   [98.792 ns 99.158 ns 99.509 ns]
       change: [-1.0922% -0.6307% -0.1840%] (p = 0.01 < 0.05)

Found 13 outliers among 100 measurements (13.00%)
10 (10.00%) high mild
3 (3.00%) high severe

coalesce_acked_from_zero 3+1 entries: Change within noise threshold.
       time:   [116.50 ns 116.84 ns 117.20 ns]
       change: [-1.7612% -1.2663% -0.8127%] (p = 0.00 < 0.05)

Found 17 outliers among 100 measurements (17.00%)
2 (2.00%) low severe
1 (1.00%) low mild
6 (6.00%) high mild
8 (8.00%) high severe

coalesce_acked_from_zero 10+1 entries: Change within noise threshold.
       time:   [116.22 ns 116.69 ns 117.26 ns]
       change: [-1.0836% -0.6186% -0.1831%] (p = 0.01 < 0.05)

Found 14 outliers among 100 measurements (14.00%)
4 (4.00%) low severe
2 (2.00%) low mild
8 (8.00%) high severe

coalesce_acked_from_zero 1000+1 entries: Change within noise threshold.
       time:   [97.433 ns 97.602 ns 97.800 ns]
       change: [-2.0630% -1.0329% -0.0286%] (p = 0.05 < 0.05)

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

RxStreamOrderer::inbound_frame(): Change within noise threshold.
       time:   [111.57 ms 111.62 ms 111.66 ms]
       change: [-0.3211% -0.2526% -0.1854%] (p = 0.00 < 0.05)

Found 9 outliers among 100 measurements (9.00%)
4 (4.00%) low mild
5 (5.00%) high mild

transfer/pacing-false/varying-seeds: No change in performance detected.
       time:   [25.902 ms 26.879 ms 27.872 ms]
       change: [-6.7639% -1.6579% +3.4327%] (p = 0.53 > 0.05)

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

transfer/pacing-true/varying-seeds: No change in performance detected.
       time:   [33.774 ms 35.458 ms 37.156 ms]
       change: [-10.553% -4.7185% +1.7720%] (p = 0.15 > 0.05)

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

transfer/pacing-false/same-seed: No change in performance detected.
       time:   [25.323 ms 26.032 ms 26.759 ms]
       change: [-2.9228% +1.0946% +5.4403%] (p = 0.61 > 0.05)

Found 5 outliers among 100 measurements (5.00%)
1 (1.00%) low mild
4 (4.00%) high mild

transfer/pacing-true/same-seed: No change in performance detected.
       time:   [38.558 ms 40.437 ms 42.362 ms]
       change: [-9.9420% -4.2311% +1.9678%] (p = 0.19 > 0.05)
1-conn/1-100mb-resp (aka. Download)/client: No change in performance detected.
       time:   [113.55 ms 114.00 ms 114.44 ms]
       thrpt:  [873.85 MiB/s 877.16 MiB/s 880.70 MiB/s]
change:
       time:   [-16.992% -6.2679% +0.4475%] (p = 0.41 > 0.05)
       thrpt:  [-0.4455% +6.6871% +20.470%]

Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) low severe

1-conn/10_000-parallel-1b-resp (aka. RPS)/client: 💔 Performance has regressed.
       time:   [317.06 ms 320.56 ms 324.00 ms]
       thrpt:  [30.864 Kelem/s 31.196 Kelem/s 31.540 Kelem/s]
change:
       time:   [+1.0641% +2.6348% +4.1806%] (p = 0.00 < 0.05)
       thrpt:  [-4.0129% -2.5672% -1.0529%]
1-conn/1-1b-resp (aka. HPS)/client: No change in performance detected.
       time:   [33.693 ms 33.858 ms 34.034 ms]
       thrpt:  [29.382  elem/s 29.535  elem/s 29.680  elem/s]
change:
       time:   [-1.4548% -0.5765% +0.2634%] (p = 0.20 > 0.05)
       thrpt:  [-0.2627% +0.5799% +1.4763%]

Found 5 outliers among 100 measurements (5.00%)
1 (1.00%) low mild
4 (4.00%) high severe

Client/server transfer results

Transfer of 33554432 bytes over loopback.

Client Server CC Pacing Mean [ms] Min [ms] Max [ms] Relative
msquic msquic 116.6 ± 32.3 91.2 200.2 1.00
neqo msquic reno on 216.6 ± 12.5 202.8 236.2 1.00
neqo msquic reno 217.0 ± 10.3 209.0 242.7 1.00
neqo msquic cubic on 227.9 ± 14.3 208.7 253.3 1.00
neqo msquic cubic 266.6 ± 86.5 208.4 483.8 1.00
msquic neqo reno on 117.2 ± 65.6 81.6 336.2 1.00
msquic neqo reno 122.4 ± 60.1 76.4 330.4 1.00
msquic neqo cubic on 129.6 ± 57.5 81.1 332.0 1.00
msquic neqo cubic 113.3 ± 60.4 82.2 326.2 1.00
neqo neqo reno on 207.2 ± 87.7 124.2 409.2 1.00
neqo neqo reno 201.1 ± 87.7 131.4 398.1 1.00
neqo neqo cubic on 191.9 ± 73.9 125.9 422.9 1.00
neqo neqo cubic 174.8 ± 73.7 127.8 380.7 1.00

⬇️ Download logs

@martinthomson
Copy link
Member

Can this be conditional behaviour? That is, can we add a flag to enable/disable, defaulting to zero length, but turning it on for the migration test?

@larseggert
Copy link
Collaborator Author

I can make this a flag, good suggestion.

@larseggert larseggert changed the title feat: No zero-len CIDs for client feat: Option for no zero-len CIDs for client Oct 14, 2024
Comment on lines +255 to +259
"rebind-port" | "rebind-addr" | "connectionmigration" => {
if self.cid_len == 0 {
qinfo!("Rebind/migration test won't work with len-0 CID; overwriting to 8");
self.cid_len = 8;
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should be able to do client-side address rebinding if the client uses a zero-length CID. Which side is doing the rebinding again?

Copy link
Collaborator Author

@larseggert larseggert Oct 14, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I need to check tomorrow, but I think the issue is that we don't issue a new connection ID on the client when it is using a zero-length ID and when the server retires a path and the connection ID used for it.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, what's happening is that with a client using a len-0 CID, when the server has validated the new path after a rebinding event, it will retire the old path and hence send a RETIRE_CONNECTION_ID for CID number 0. After the client receives and processes that frame, it will no longer accept any packets from the server (Dropped received packet: Invalid DCID CID [0]: ;).

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is a bug on the server; it should not retire the only CID it has for the client (and then keep using it anyway.)

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See #2182.

@larseggert larseggert marked this pull request as draft October 15, 2024 12:11
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