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

wip new ack mechanism #3140

Draft
wants to merge 2 commits into
base: main
Choose a base branch
from
Draft

wip new ack mechanism #3140

wants to merge 2 commits into from

Conversation

ripatel-fd
Copy link
Contributor

@ripatel-fd ripatel-fd commented Oct 16, 2024

Reimplements the ACK TX logic.

  • Changes ACK generation to be 'fire-and-forget'
  • Removes conn rescheduling for ACKs to reduce service queue load
  • Store pending ACKs in a array-backed ring instead of a linked list
  • Only attempt to merge ACK events into the newest ACK range
  • Inhibit ACKs if there are excessive skipped packet numbers

Unrelated change:

  • Don't always resend MAX_STREAMS, since it's currently set to 2^62 regardless

  • Implement new ACK mechanism
  • Ensure ACK TX frequency is appropriate during high RX rates (agave_compat and test_quic_bw tests)
  • Advertise a max_ack_delay in transport parameters proportional to service_interval
  • Make service_interval user-configurable in fdctl

Base automatically changed from ripatel/quic-remove-flow-control to main October 16, 2024 23:41
@ripatel-fd ripatel-fd force-pushed the ripatel/quic-o1-ack branch 2 times, most recently from 4ef4f62 to e0d397b Compare October 22, 2024 01:10
These are technically unreachable bugs on current main, but should
be fixed regardless.

- Fixes an issue where streams can exist in both the connection
  stream list and the free pool, if the stream hashmap is full

- Fixes two bugs relating to 'fire and forget' frames (those are
  frames that don't set flags in pkt_meta).  If an outgoing packet
  consists exclusively of such frames, the correct behavior is to
  not allocate a pkt_meta record.  The bugs are:

  - 'Fire and forget' packets are dropped instead of sent

  - 'Fire and forget' packets leak pkt_meta, eventually bricking
    the fd_quic instance
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