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

Introduce generic slowstart algorithms for congestion control #583

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

Conversation

parvit
Copy link

@parvit parvit commented May 22, 2024

Description:

This PR introduces the new functionality of 'slowstart algorithms' which are a step in congestion control algorithms that govern the initial handling of the congestion window.

This is to try to reduce initial packet loss during a connection and better estimate a correct congestion window.

The implemented algorithms are the following:

  • rfc2001 : The default behavior for CCAs described in RFC2001 and implemented previously in quicly that doubles the congestion window until a loss is detected, at which point the slowstart phase is exited.

  • disabled : For some congestion control algorithms (namely pico), rfc2001 behavior is not coherent and so an empty type of slowstart logic is provided.

  • search : The SEARCH algorithm described in:

    • Amber Cronin, Maryam Ataei Kachooei, Jae Chung, Feng Li, Benjamin Peters, and Mark Claypool.
      Improving QUIC Slow Start Behavior in Wireless Networks with SEARCH, In Proceedings of the IEEE
      Local and Metropolitan Area Conference (LANMAN), Boston, MA, USA, July 2024.

    • Maryam Ataei Kachooei, Jae Chung, Feng Li, Benjamin Peters, Josh Chung, and
      Mark Claypool. Improving TCP Slow Start Performance in Wireless Networks with
      SEARCH, In Proceedings of the World of Wireless, Mobile and Multimedia Networks
      (WoWMoM), Perth, Australia June 2024.

    This algorithm tracks delivered bytes in 'bins' and averages their sum over time until a certain threshold is achieved, at that point the congestion window is updated and slowstart phase exited.

The three implementations are provided via a new struct quicly_ss_type_t, similar to quicly_cc_type_t and allows to select the current slowstart algorithm being used, by changing the pointer added in quicly context to the requested slowstart type.

If this is context field is left empty than no change is made and the default previous behavior is still used.

Please review and send feedback.

@kazuho
Copy link
Member

kazuho commented Jun 6, 2024

Wow. Thank you for the pull request. We will take a look.

@parvit
Copy link
Author

parvit commented Jul 11, 2024

Wow. Thank you for the pull request. We will take a look.

Hi, did you have a chance to review this PR? thank you.

@vmfoxworthy
Copy link

Is this still under review? I'd like to pull this in the main branch and start testing with it. Thanks!

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