Opened 5 years ago

Closed 5 years ago

#1047 closed defect (fixed)

Streaming window size reduction too fast

Reported by: zzz Owned by: zab
Priority: minor Milestone: 0.9.9
Component: streaming Version: 0.9.7.1
Keywords: Cc: zab@…
Parent Tickets:

Description

In standard TCP normal operation (i.e. after slow start) you only do AIMD window adjustment once per window (RTT). When we retransmit a packet, we honor that (see Connection.retransmit()).

However on reception of duplicate packets we will halve the window for every duplicate, leading to rapid window reduction. See ConnectionPacketHandler?.

In the example below, we receive 4 dup packets well within one RTT, and the window size is reduced from 21 to 2.

12:30:00.366 WARN  [rk #18309]: ] eaming.ConnectionPacketHandler: [Connection shytrg/jb60zg to cWuh up 3h wsize: 21 cwin: 21 rtt: 2339 rto: 3843 unacked out: 21 unacked in: 0 sent: 28667 rcvd: 24583 ackThru 28645 maxWin 128 MTU 1730] congestion.. dup packet shytrg/jb60zg: #24566 ACK 28645 DELAY 1000 data: 1730 now 1380335400366 ackDelay 1000 lastSend 1380335400363
12:30:00.374 WARN  [rk #18309]: ] eaming.ConnectionPacketHandler: [Connection shytrg/jb60zg to cWuh up 3h wsize: 10 cwin: 10 rtt: 2339 rto: 3843 unacked out: 21 unacked in: 0 sent: 28667 rcvd: 24583 ackThru 28645 maxWin 128 MTU 1730] congestion.. dup packet shytrg/jb60zg: #24567 ACK 28645 DELAY 1000 data: 1730 now 1380335400374 ackDelay 1000 lastSend 1380335400363
12:30:00.515 WARN  [rk #18309]: ] eaming.ConnectionPacketHandler: [Connection shytrg/jb60zg to cWuh up 3h wsize: 5 cwin: 5 rtt: 2339 rto: 3843 unacked out: 21 unacked in: 0 sent: 28667 rcvd: 24583 ackThru 28645 maxWin 128 MTU 1730] congestion.. dup packet shytrg/jb60zg: #24568 ACK 28645 DELAY 1000 data: 1730 now 1380335400514 ackDelay 1000 lastSend 1380335400363
12:30:00.647 WARN  [rk #18309]: ] eaming.ConnectionPacketHandler: [Connection shytrg/jb60zg to cWuh up 3h wsize: 2 cwin: 2 rtt: 2339 rto: 3843 unacked out: 21 unacked in: 0 sent: 28667 rcvd: 24583 ackThru 28645 maxWin 128 MTU 1730] congestion.. dup packet shytrg/jb60zg: #24569 ACK 28645 DELAY 1000 data: 1730 now 1380335400647 ackDelay 1000 lastSend 1380335400363

Subtickets

Change History (6)

comment:1 Changed 5 years ago by zab

  • Owner set to zab
  • Status changed from new to accepted

comment:2 Changed 5 years ago by zab

Could it be as simple as http://pastethis.i2p/show/5573/ ?

comment:7 Changed 5 years ago by zab

Another stab that does not break slow start http://pastethis.i2p/show/5674/

comment:8 Changed 5 years ago by zab

I understand better what's happening in C.RPE
on the sending side we know how big a "segment" is so we can halve the window once per segment
which is what happens now
on the receiving side however we do not know how big a segment is
so that leaves us with 3 options for the receiving side window adjustment:

a) leave it as it is i.e. halve the window on every duplicate
b) apply my patch and halve only once per RTT
c) remove the logic completely, do not halve the window on duplicate

Options for the sending side:

a) leave it as it is i.e. halve once per "segment"
b) apply my patch and half once per segment AND once per RTT
c) change the logic to only halve per RTT, not per segment

comment:9 Changed 5 years ago by zab

  • Status changed from accepted to testing

With revision 56be5ecfa95b7c0427be4559a34f587470d75b44 the following changes went in trunk:

Sending side: unchanged.
Receiving side: halving logic removed completely.

Leaving ticket open for possible revisit.

comment:10 Changed 5 years ago by zab

  • Resolution set to fixed
  • Status changed from testing to closed

Released in production in 0.9.9

Note: See TracTickets for help on using tickets.