summaryrefslogtreecommitdiffhomepage
path: root/pkg/refs/refcounter_state.go
diff options
context:
space:
mode:
authorBhasker Hariharan <bhaskerh@google.com>2020-05-07 10:24:47 -0700
committergVisor bot <gvisor-bot@google.com>2020-05-07 10:26:00 -0700
commit08f4846ebe79236ded6f4bc816b0a776afe14463 (patch)
treeb972f70c342165d479fbedc0f8ae424353f41463 /pkg/refs/refcounter_state.go
parent16da7e790f570d9743fb47e50c304e6a24834772 (diff)
Fix bugs in SACK recovery.
Every call to sender.NextSeg does not need to iterate from the front of the writeList as in a given recovery episode we can cache the last nextSeg returned. There cannot be a lower sequenced segment that matches the next call to NextSeg as otherwise we would have returned that instead in the previous call. This fixes the issue of excessive CPU usage w/ large send buffers where we spend a lot of time iterating from the front of the list on every NextSeg invocation. Further the following other bugs were also fixed: * Iteration of segments never sent in NextSeg() when looking for segments for retransmission that match step1/3/4 of the NextSeg algorithm * Correctly setting rescueRxt only if the rescue segment was actually sent. * Correctly initializing rescueRxt/highRxt when entering SACK recovery. * Correctly re-arming the timer only on retransmissions when SACK is in use and not for every segment being sent as it was being done before. * Copy over xmitTime and xmitCount on segment clone. * Move writeNext along when skipping over SACKED segments. This is required to prevent spurious retransmissions where we end up retransmitting data that was never lost. PiperOrigin-RevId: 310387671
Diffstat (limited to 'pkg/refs/refcounter_state.go')
0 files changed, 0 insertions, 0 deletions