Re: sctp and tail loss recovery

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> On 28 Jul 2016, at 21:06, Marcelo Ricardo Leitner <marcelo.leitner@xxxxxxxxx> wrote:
> 
> On Sat, Jul 02, 2016 at 03:11:55PM +0200, Michael Tuexen wrote:
>>> On 30 Jun 2016, at 21:18, Marcelo Ricardo Leitner <marcelo.leitner@xxxxxxxxx> wrote:
>>> 
>>> Hi Michael,
>>> 
>>> Long story short, I'm chasing a performance issue on linux implementation and I think that TLR is the right fix for it. The receive operation is way more expensive than transmit and this causes its buffer to fill up, up to reach 0 window situation. Then, as the RFC allows, sender keeps sending 1 data chunk at a time, as a probe for possible unnoticed window updates due to SACK loss. But if the peer couldn't free any window in time, it will drop that chunk, and will cause a RTO.
>> OK.
>> 
>> So I think there a better handling of SWS might help:
>> 
>> What method of SWS does Linux use on the receiver side? On FreeBSD we announce the a_rwnd as
> 
> Sorry the delay Michael, I wanted to re-read the code on this.
No problem...
> 
> We don't do much, sender or receiver side.
> 
> We will accept data and reduce a_rwnd accordingly, till it reaches 0.
> Then we keep announcing as 0 while allowing some overshoot.
> 
> When some space is freed, we will only announce it if it's bigger than a
> threshold. But if we have to bundle a sack, we will also update it,
> regardless of a threshold. Hmm now writting the email seems that this
> update on bundled sack should also respect the threshold. 
FreeBSD announces its receive buffer until is goes below a threshold. Than
it announces 1 byte (to speed down the sender but still allow for accepting
new data). Only if the buffer is really full, 0 is announced.
For each received messages some overhead is also considered. This is all
receiver side.
If you end up in this situation you will be at one chunk per RTT...
> 
>> is actually is until it is less that a threshold. Then we announce a_rwnd = 1. This slows
>> down the sender but still allow the receiver to accept the data. This does avoid an RTO.
> 
> On RFC 4960, it says:
> 
> 6.1.  Transmission of DATA Chunks
> ...
>   A) At any given time, the data sender MUST NOT transmit new data to
>      any destination transport address if its peer's rwnd indicates
>      that the peer has no buffer space (i.e., rwnd is 0; see Section
>      6.2.1).  However, regardless of the value of rwnd (including if it
>      is 0), the data sender can always have one DATA chunk in flight to
>      the receiver if allowed by cwnd (see rule B, below).  This rule
>      allows the sender to probe for a change in rwnd that the sender
>      missed due to the SACK's having been lost in transit from the data
>      receiver to the data sender.
> 
> it's saying the sender *can* send a chunk at any given time, but not
> meaning that it should abuse of that. Now I'm thinking, this is our
> problem, and that's why it's enough to slow down your sender:
> 
> We don't really respect the 0 window situation. The only difference is
> that we start sending chunk by chunk, regardless of their
> interval/a_rwnd, because "the data sender can always have one DATA chunk
> in flight to the receiver if allowed by cwnd". Then a packet drop
> happens, as the window is very overshot already, and the sender won't
> retransmit even after the window update because there was a packet drop.
In FreeBSD using the 1 bytes instead of some small higher number allows
us to still accept data and make progress while slowing down the sender.
I guess this is important in this scenario.
> 
> So after sending the first chunk in 0-window situation, if the reply
> still comes with 0-window, we should not send a new chunk, but wait for
> either the window update or RTO. If we keep hammering it, the receiver
> will have a harder time to re-open the window, and we have a SWS issue.
You need to do window probing. But it should become timer driven, since
the SACK can get lost.

Best regards
Michael
> 
> We do it like "Are we there yet? Are we there yet? Are we there yet?"
> </donkey, shrek movie> hehe ;-)
> 
> Makes sense?
> 
>>> 
>>> I'm not seeing anything in the specs that would prevent this situation other than a TLR would do. Or I missed it?
>> I would think that TLR is trying to address the case where a packet at the end of a batch is lost
>> due to congestion in the network.
> 
> Agreed. Better thinking, even if TLP would help it, it's not the right
> fix, as it would be same as saying that some packet drops are expected.
> 
> Thanks,
> Marcelo
> 
>> 
>> Best regards
>> Michael
>>> 
>>> On TLR, the most updated info I could find, is already (recently) expired and archived: https://datatracker.ietf.org/doc/draft-nielsen-tsvwg-sctp-tlr/
>>> I could find Karen's email https://www.ietf.org/mail-archive/web/tsvwg/current/msg13703.html
>>> But then nothing else. Do you know what happened?
>>> 
>>> Thanks,
>>> Marcelo
>> 
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-sctp" in
>> the body of a message to majordomo@xxxxxxxxxxxxxxx
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>> 

Attachment: smime.p7s
Description: S/MIME cryptographic signature


[Index of Archives]     [Linux Networking Development]     [Linux OMAP]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux