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

Implement BBR #950

Closed
wants to merge 7 commits into from
Closed

Implement BBR #950

wants to merge 7 commits into from

Conversation

rafibaum
Copy link

@rafibaum rafibaum commented May 27, 2021

I've recently been working on a version of BBR for quiche for a research project. It's broadly based on information found in the draft BBR RFC, the Linux kernel implementation, and Google's implementation in their (similarly named) QUIC library.

This version of BBR implements the core BBR algorithm, the packet conservation loss handling mechanism, and the long-term sampling functionality which so far has only been implemented in the Linux kernel implementation and isn't detailed in the RFC or the QUIC implementation. I've had to make a number of adaptations to the algorithm to get it to work in quiche and there's still some features missing:

  • No ack aggregation handling.
  • Packet conservation adapted since we're not using the TCP state machine anymore, adapted from how Google handles this.
  • Under constant packet loss (1%) bitrate seems to collapse. May be a delivery rate estimation issue but needs investigating.
  • No unit testing

I'm submitting this draft now to see if you'd be receptive to getting BBR merged in and what changes you'd want to see here before starting code review. As part of my research, I've done a bit of evaluation and I've seen typical BBR behaviour where the throughput is higher than what CUBIC usually gets you but it incurs higher packet loss rates.

Closes #514

@rafibaum
Copy link
Author

Please excuse the double pull request. I accidentally based the old one on a WIP branch and did some refactoring on my fork. Since the last PR I've done a commenting pass explaining the implementation and added some attribution for the referenced code bases. At this point the last thing I'd like to add is some testing.

@LPardue
Copy link
Contributor

LPardue commented May 27, 2021

Thanks for the PR Rafi, it will take some time to review but we appreciate your proposrd contribution and patience.

@rafibaum
Copy link
Author

I've done some more evaluation of this implementation for my work and unfortunately it exhibits very unstable behaviour. When long-term sampling and packet conservation is enabled, BBR tends to enter into a feedback loop of ever-decreasing sending rates which grinds transfers to a halt. I won't be doing further work on this PR so I'm going to close it, but anyone is welcome to use it if they find it useful.

@rafibaum rafibaum closed this Jun 21, 2021
@LPardue
Copy link
Contributor

LPardue commented Jun 21, 2021

Thanks for the update @rafibaum. Sad to hear there are some issues but this sounded like some good work in the process of testing anyhow. We'll keep your findings in mind should this PR (or other BBR proposals) come up again.

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.

Support BBR congestion control
2 participants