Skip to content

CUBIC congestion control#475

Merged
ghedo merged 1 commit intomasterfrom
810.cc_cubic
Apr 22, 2020
Merged

CUBIC congestion control#475
ghedo merged 1 commit intomasterfrom
810.cc_cubic

Conversation

@junhochoi
Copy link
Copy Markdown
Contributor

  • Implemented based on RFC8312 "CUBIC for Fast Long-Distance Networks"
  • CUBIC is the default CC algorithm.
  • CUBIC specific variables is stored to cubic::State. I added
    this to Recovery structure itself. If you use Reno only
    this will be a waste of memory if you use Reno, but the overhead
    is small (4 fields) for now. It can be dynamically allocated later.
  • f64 is used for various calculations. Optimization using integer ops is a future task.
  • Use libm::cbrt to avoid linking with -lm for C applications. Note that libm:cbrt
    is slower than C cbrt() which is asm-optimized (roughtly 2x when I
    test in MacOS) but the difference is small.
  • For config API, to use Cubic explicitly for the connection, call the following:
    Rust: config.set_cc_algorithm(recovery::CongestionControlAlgorithm::Cubic);
    C: quiche_config_set_cc_algorithm(config, QUICHE_CC_CUBIC);
  • CongestionControlAlgorithm exported as public. Also fixed the documentation.
  • CongestionControlOps: add collapse_cwnd()

@junhochoi junhochoi requested a review from a team as a code owner April 21, 2020 23:30
LPardue
LPardue previously approved these changes Apr 21, 2020
@junhochoi junhochoi mentioned this pull request Apr 21, 2020
@junhochoi junhochoi changed the title Add CUBIC congestion control CUBIC congestion control Apr 21, 2020
Copy link
Copy Markdown
Member

@ghedo ghedo left a comment

Choose a reason for hiding this comment

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

Added a couple of nits.

Comment thread Cargo.toml Outdated
Comment thread src/lib.rs Outdated
@ghedo
Copy link
Copy Markdown
Member

ghedo commented Apr 22, 2020

I applied the nits manually since they are pretty minor. Will merge after CI is green.

- Implemented based on RFC8312 "CUBIC for Fast Long-Distance Networks"
- CUBIC is the default CC algorithm.
- CUBIC specific variables is stored to cubic::State. I added
  this to Recovery structure itself. If you use Reno only
  this will be a waste of memory if you use Reno, but the overhead
  is small (4 fields) for now. It can be dynamically allocated later.
- `f64` is used for various calculations. Optimization using integer ops is a future task.
- Use libm::cbrt to avoid linking with -lm for C applications. Note that libm:cbrt
  is slower than C cbrt() which is asm-optimized (roughtly 2x when I
  test in MacOS) but the difference is small.
- For config API, to use Cubic explicitly for the connection, call the following:
  Rust: config.set_cc_algorithm(recovery::CongestionControlAlgorithm::Cubic);
  C: quiche_config_set_cc_algorithm(config, QUICHE_CC_CUBIC);
- `CongestionControlAlgorithm` exported as public. Also fixed the documentation.
- CongestionControlOps: add collapse_cwnd()
@ghedo ghedo merged commit f8bfb91 into master Apr 22, 2020
@ghedo ghedo deleted the 810.cc_cubic branch April 25, 2020 15:46
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.

3 participants