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 #2

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

Conversation

parvit
Copy link
Collaborator

@parvit parvit commented May 20, 2024

This branch can be used for a PR to h2o/quicly as it is mergeable automatically.

I'll draft a description here:

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.

Copy link

@funglee2k22 funglee2k22 left a comment

Choose a reason for hiding this comment

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

Ship it!

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