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(transport): pass ECN CE marks to CC #1689

Merged
merged 31 commits into from
Apr 23, 2024
Merged

Conversation

mxinden
Copy link
Collaborator

@mxinden mxinden commented Feb 27, 2024

Pass ECN CE marks received through FRAME_TYPE_ACK_ECN frames to the congestion controler.

@mxinden
Copy link
Collaborator Author

mxinden commented Mar 5, 2024

Rebasing onto latest #1678 now.

Edit: ✔️

@mxinden mxinden force-pushed the ecn-cc branch 2 times, most recently from 37e6db6 to 0f3772b Compare March 5, 2024 16:24
larseggert and others added 24 commits March 15, 2024 10:14
The remaining bits from mozilla#1495

The remaining todo item after this PR is to actually act on incoming
CE marks, i.e., trigger a congestion control action. See mozilla#1689
Signed-off-by: Lars Eggert <lars@eggert.org>
Signed-off-by: Lars Eggert <lars@eggert.org>
Co-authored-by: Max Inden <mail@max-inden.de>
Signed-off-by: Lars Eggert <lars@eggert.org>
Co-authored-by: Max Inden <mail@max-inden.de>
Signed-off-by: Lars Eggert <lars@eggert.org>
If this makes ngtcp2 happy, refactor into separate PR.
Signed-off-by: Lars Eggert <lars@eggert.org>
Pass ECN CE marks received through FRAME_TYPE_ACK_ECN frames to the congestion
controler.
github-merge-queue bot pushed a commit that referenced this pull request Apr 16, 2024
* feat: Send and process ACK-ECN

The remaining bits from #1495

The remaining todo item after this PR is to actually act on incoming
CE marks, i.e., trigger a congestion control action. See #1689

* Modifier

* Fix botched merge

* Fix merge

* Rework

* Add more tests that hopefully cover all cases.

* WIP

* Tests passing

* More tests

* Minimize diff

* ci(interop): run ecn test

* Update neqo-transport/src/connection/tests/ecn.rs

Co-authored-by: Max Inden <mail@max-inden.de>
Signed-off-by: Lars Eggert <lars@eggert.org>

* Update neqo-transport/src/qlog.rs

Co-authored-by: Max Inden <mail@max-inden.de>
Signed-off-by: Lars Eggert <lars@eggert.org>

* Fix qns

* Reduce number of CONNECTION_CLOSE frames

If this makes ngtcp2 happy, refactor into separate PR.

* Update neqo-transport/src/ecn.rs

Co-authored-by: Max Inden <mail@max-inden.de>
Signed-off-by: Lars Eggert <lars@eggert.org>

* Update neqo-transport/src/ecn.rs

Co-authored-by: Max Inden <mail@max-inden.de>
Signed-off-by: Lars Eggert <lars@eggert.org>

* Update neqo-transport/src/ecn.rs

Co-authored-by: Max Inden <mail@max-inden.de>
Signed-off-by: Lars Eggert <lars@eggert.org>

* Fixes

* Update neqo-transport/src/connection/tests/ecn.rs

Co-authored-by: Martin Thomson <mt@lowentropy.net>
Signed-off-by: Lars Eggert <lars@eggert.org>

* Update neqo-transport/src/connection/tests/ecn.rs

Co-authored-by: Martin Thomson <mt@lowentropy.net>
Signed-off-by: Lars Eggert <lars@eggert.org>

* Update neqo-transport/src/connection/mod.rs

Co-authored-by: Martin Thomson <mt@lowentropy.net>
Signed-off-by: Lars Eggert <lars@eggert.org>

* Update neqo-transport/src/frame.rs

Co-authored-by: Martin Thomson <mt@lowentropy.net>
Signed-off-by: Lars Eggert <lars@eggert.org>

* Update neqo-transport/src/frame.rs

Co-authored-by: Martin Thomson <mt@lowentropy.net>
Signed-off-by: Lars Eggert <lars@eggert.org>

* Update neqo-transport/src/ecn.rs

Co-authored-by: Martin Thomson <mt@lowentropy.net>
Signed-off-by: Lars Eggert <lars@eggert.org>

* Some fixups from code review

* More code review fixups

* Check whether migration happened as expected.
Minor other tweaks.

* Consolidate all the `nodata` tests

---------

Signed-off-by: Lars Eggert <lars@eggert.org>
Co-authored-by: Max Inden <mail@max-inden.de>
Co-authored-by: Martin Thomson <mt@lowentropy.net>
@mxinden
Copy link
Collaborator Author

mxinden commented Apr 16, 2024

Resolving the merge conflicts now.

neqo-transport/src/path.rs Outdated Show resolved Hide resolved
@mxinden mxinden marked this pull request as ready for review April 16, 2024 11:15
Copy link

codecov bot commented Apr 16, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 93.25%. Comparing base (4fc4d16) to head (7b49ef3).

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1689      +/-   ##
==========================================
+ Coverage   93.23%   93.25%   +0.01%     
==========================================
  Files         110      110              
  Lines       35749    35793      +44     
==========================================
+ Hits        33329    33377      +48     
+ Misses       2420     2416       -4     

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

Copy link

github-actions bot commented Apr 16, 2024

Benchmark results

Performance differences relative to 4fc4d16.

  • drain a timer quickly time: [311.70 ns 320.07 ns 327.85 ns]
    change: [-29.637% -28.071% -26.115%] (p = 0.00 < 0.05)
    💚 Performance has improved.

  • coalesce_acked_from_zero 1+1 entries
    time: [196.40 ns 196.93 ns 197.50 ns]
    change: [-0.3707% +0.1741% +0.9002%] (p = 0.63 > 0.05)
    No change in performance detected.

  • coalesce_acked_from_zero 3+1 entries
    time: [239.34 ns 239.94 ns 240.57 ns]
    change: [+0.1652% +0.6963% +1.2449%] (p = 0.01 < 0.05)
    Change within noise threshold.

  • coalesce_acked_from_zero 10+1 entries
    time: [237.66 ns 238.38 ns 239.33 ns]
    change: [+0.0186% +0.4597% +0.9051%] (p = 0.05 < 0.05)
    Change within noise threshold.

  • coalesce_acked_from_zero 1000+1 entries
    time: [218.68 ns 228.35 ns 249.53 ns]
    change: [-0.6325% +1.3512% +4.5165%] (p = 0.50 > 0.05)
    No change in performance detected.

  • RxStreamOrderer::inbound_frame()
    time: [118.30 ms 118.36 ms 118.42 ms]
    change: [-1.2687% -1.0632% -0.9252%] (p = 0.00 < 0.05)
    Change within noise threshold.

  • transfer/Run multiple transfers with varying seeds
    time: [119.61 ms 119.89 ms 120.16 ms]
    thrpt: [33.290 MiB/s 33.365 MiB/s 33.441 MiB/s]
    change:
    time: [-4.1230% -3.8101% -3.4954%] (p = 0.00 < 0.05)
    thrpt: [+3.6220% +3.9610% +4.3003%]
    💚 Performance has improved.

  • transfer/Run multiple transfers with the same seed
    time: [119.51 ms 119.74 ms 119.97 ms]
    thrpt: [33.341 MiB/s 33.405 MiB/s 33.471 MiB/s]
    change:
    time: [-4.5950% -4.3607% -4.1248%] (p = 0.00 < 0.05)
    thrpt: [+4.3022% +4.5595% +4.8163%]
    💚 Performance has improved.

  • 1-conn/1-100mb-resp (aka. Download)/client
    time: [1.1133 s 1.1185 s 1.1234 s]
    thrpt: [89.019 MiB/s 89.402 MiB/s 89.822 MiB/s]
    change:
    time: [+1.9214% +2.5435% +3.1538%] (p = 0.00 < 0.05)
    thrpt: [-3.0574% -2.4804% -1.8852%]
    💔 Performance has regressed.

  • 1-conn/10_000-parallel-1b-resp (aka. RPS)/client
    time: [424.41 ms 426.75 ms 429.12 ms]
    thrpt: [23.303 Kelem/s 23.433 Kelem/s 23.562 Kelem/s]
    change:
    time: [-1.3144% -0.5468% +0.2237%] (p = 0.16 > 0.05)
    thrpt: [-0.2232% +0.5498% +1.3319%]
    No change in performance detected.

  • 1-conn/1-1b-resp (aka. HPS)/client
    time: [50.283 ms 50.572 ms 50.877 ms]
    thrpt: [19.655 elem/s 19.774 elem/s 19.887 elem/s]
    change:
    time: [-0.9437% -0.1329% +0.7065%] (p = 0.76 > 0.05)
    thrpt: [-0.7015% +0.1331% +0.9527%]
    No change in performance detected.

Client/server transfer results

Transfer of 134217728 bytes over loopback.

Client Server CC Pacing Mean [ms] Min [ms] Max [ms] Relative
msquic msquic 820.7 ± 305.3 437.1 1296.1 1.00
neqo msquic reno on 1056.9 ± 230.2 834.9 1367.3 1.00
neqo msquic reno 936.6 ± 217.9 696.7 1296.5 1.00
neqo msquic cubic on 1015.7 ± 282.7 756.3 1562.0 1.00
neqo msquic cubic 832.2 ± 125.6 728.4 1136.2 1.00
msquic neqo reno on 4415.6 ± 171.9 4155.2 4695.8 1.00
msquic neqo reno 4435.6 ± 219.2 4117.6 4814.3 1.00
msquic neqo cubic on 4494.2 ± 172.6 4233.4 4700.5 1.00
msquic neqo cubic 4502.8 ± 288.5 4157.0 5126.7 1.00
neqo neqo reno on 3575.0 ± 303.6 3250.0 4265.4 1.00
neqo neqo reno 3442.9 ± 157.6 3166.6 3769.3 1.00
neqo neqo cubic on 4165.2 ± 611.1 2671.3 4929.8 1.00
neqo neqo cubic 4088.5 ± 420.0 3143.0 4464.1 1.00

⬇️ Download logs

@mxinden
Copy link
Collaborator Author

mxinden commented Apr 19, 2024

@larseggert I addressed the outstanding comment. Mind taking another look?

@larseggert larseggert added this pull request to the merge queue Apr 23, 2024
Merged via the queue into mozilla:main with commit 17c45d8 Apr 23, 2024
15 checks passed
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