* delayed ack timer, slow start and LRO
@ 2008-07-22 22:05 jean-pascal billaud
2008-07-23 10:41 ` Hagen Paul Pfeifer
2008-07-23 12:01 ` Ilpo Järvinen
0 siblings, 2 replies; 8+ messages in thread
From: jean-pascal billaud @ 2008-07-22 22:05 UTC (permalink / raw)
To: netdev
Hi,
I have a question related to the interaction between the delayed ack
timer, slow start and LRO.
If the sender is doing a slow start, it is going to send one packet. The
receiver's delayed ack timer is going to
kick in and when it expires it will send a ack.
Then the sender is going to send 2 packets now. LRO will aggregates them
and the receiver's delayed ack timer is going
to kick in, hoping another packet will arrives which is not going to be
the case. When the timer expires it is going to
send a ack.
The sender is now going to send 4 packets. LRO will aggregate them and
the receiver's delayed ack timer is going to
kick in, hoping another packet will arrives which is not going to be the
case. When the timer expires it is going to
send a ack.
The sender is now going to send ... So I am under the impression that
due to the fact that LRO is aggregating packets,
the delayed ack timer will kick in every single time.
So how is this fixed in linux ? I believe that ABC implementation will
fix this issue even if I am not completely sure
about that ?
Also as LRO adds some latency, it seems possible to me that the sender
retransmission timer will expires before the
delayed ack timer expires. In this case, how is this gonna work ? Is it
possible that the sender will stay stuck in
its slow start trying to retransmit endlessly the same n packets ?
Can anyone help on that ?
thanks,
--jp
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: delayed ack timer, slow start and LRO
2008-07-22 22:05 delayed ack timer, slow start and LRO jean-pascal billaud
@ 2008-07-23 10:41 ` Hagen Paul Pfeifer
2008-07-23 17:38 ` jean-pascal billaud
2008-07-23 12:01 ` Ilpo Järvinen
1 sibling, 1 reply; 8+ messages in thread
From: Hagen Paul Pfeifer @ 2008-07-23 10:41 UTC (permalink / raw)
To: jean-pascal billaud; +Cc: netdev
On Tue, 22 Jul 2008 15:05:26 -0700, jean-pascal billaud
<billaud@vmware.com> wrote:
> I have a question related to the interaction between the delayed ack
> timer, slow start and LRO.
AFAIK, delayed ACKs are disabled in slow start phase.
Hagen
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: delayed ack timer, slow start and LRO
2008-07-23 10:41 ` Hagen Paul Pfeifer
@ 2008-07-23 17:38 ` jean-pascal billaud
0 siblings, 0 replies; 8+ messages in thread
From: jean-pascal billaud @ 2008-07-23 17:38 UTC (permalink / raw)
To: Hagen Paul Pfeifer; +Cc: netdev@vger.kernel.org
>
> On Tue, 22 Jul 2008 15:05:26 -0700, jean-pascal billaud
> <billaud@vmware.com> wrote:
>
>
>> I have a question related to the interaction between the delayed ack
>> timer, slow start and LRO.
>>
>
> AFAIK, delayed ACKs are disabled in slow start phase.
>
>
Probably a dummy question but how the receiver can know when the slow
start phase is done, as slow start is done by the sender.
thanks for your help,
--jp
> Hagen
>
>
>
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: delayed ack timer, slow start and LRO
2008-07-22 22:05 delayed ack timer, slow start and LRO jean-pascal billaud
2008-07-23 10:41 ` Hagen Paul Pfeifer
@ 2008-07-23 12:01 ` Ilpo Järvinen
2008-07-23 17:58 ` jean-pascal billaud
1 sibling, 1 reply; 8+ messages in thread
From: Ilpo Järvinen @ 2008-07-23 12:01 UTC (permalink / raw)
To: jean-pascal billaud; +Cc: Netdev
On Tue, 22 Jul 2008, jean-pascal billaud wrote:
Some corrections to assumptions below...
> I have a question related to the interaction between the delayed ack
> timer, slow start and LRO.
>
> If the sender is doing a slow start, it is going to send one packet. The
> receiver's delayed ack timer is going to
> kick in and when it expires it will send a ack.
>
> Then the sender is going to send 2 packets now. LRO will aggregates them
> and the receiver's delayed ack timer is going
> to kick in, hoping another packet will arrives which is not going to be
> the case. When the timer expires it is going to
> send a ack.
What makes you think so? ...please see conditions in
__tcp_ack_snd_check(). ...and like somebody else mentioned, there are
quickacks in the picture as well (aka. Delayed ACK After Slow-Start,
DAASS).
> The sender is now going to send 4 packets. LRO will aggregate them and
> the receiver's delayed ack timer is going to
> kick in, hoping another packet will arrives which is not going to be the
> case. When the timer expires it is going to
> send a ack.
Likewise, though in here tcp_max_burst would prevent as large growth as
without lro (in other slow-starts than the initial one).
> The sender is now going to send ... So I am under the impression that
> due to the fact that LRO is aggregating packets,
> the delayed ack timer will kick in every single time.
>
> So how is this fixed in linux ? I believe that ABC implementation will
> fix this issue even if I am not completely sure
> about that ?
ABC is nowadays disable by default because it was found to annoy small
segment sending folks enough for them to periodically to come up
complaining with that "discovery" on netdev... :-) ...ABC is not
that necessary in Linux anyway because Linux' segment based counting is
not vulnerable to same kind of problems that byte-based approach would
be. Faster window growth during slow-start could be done without ABC
though nobody has yet stepped in to do that (though I just got an idea
while writing how to do that cleanly :-)).
> Also as LRO adds some latency, it seems possible to me that the sender
> retransmission timer will expires before the
> delayed ack timer expires.
In theory yes, but in reality that shouldn't happen since RTT is
calculated so that it would include the delayed ACK delays.
> In this case, how is this gonna work ? Is it
> possible that the sender will stay stuck in
> its slow start trying to retransmit endlessly the same n packets ?
It wouldn't anyway, because receiver would ACK out-of-order (a duplicate
below window) segments immediately. ...And we would resort FRTO in between
too and RTO would be declared spurious and TCP would continue sending
new data.
--
i.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: delayed ack timer, slow start and LRO
2008-07-23 12:01 ` Ilpo Järvinen
@ 2008-07-23 17:58 ` jean-pascal billaud
0 siblings, 0 replies; 8+ messages in thread
From: jean-pascal billaud @ 2008-07-23 17:58 UTC (permalink / raw)
To: Ilpo Järvinen; +Cc: Netdev
> On Tue, 22 Jul 2008, jean-pascal billaud wrote:
>
> Some corrections to assumptions below...
>
>
>> I have a question related to the interaction between the delayed ack
>> timer, slow start and LRO.
>>
>> If the sender is doing a slow start, it is going to send one packet. The
>> receiver's delayed ack timer is going to
>> kick in and when it expires it will send a ack.
>>
>> Then the sender is going to send 2 packets now. LRO will aggregates them
>> and the receiver's delayed ack timer is going
>> to kick in, hoping another packet will arrives which is not going to be
>> the case. When the timer expires it is going to
>> send a ack.
>>
>
> What makes you think so? ...please see conditions in
> __tcp_ack_snd_check(). ...and like somebody else mentioned, there are
> quickacks in the picture as well (aka. Delayed ACK After Slow-Start,
> DAASS).
>
Ok. I found the quickack mode bound by TCP_MAX_QUICKACKS, so by knowing that my assumptions
are not correct anymore. I am going to check if BSD has the same behavior.
>
>> The sender is now going to send 4 packets. LRO will aggregate them and
>> the receiver's delayed ack timer is going to
>> kick in, hoping another packet will arrives which is not going to be the
>> case. When the timer expires it is going to
>> send a ack.
>>
>
> Likewise, though in here tcp_max_burst would prevent as large growth as
> without lro (in other slow-starts than the initial one).
>
>
>> The sender is now going to send ... So I am under the impression that
>> due to the fact that LRO is aggregating packets,
>> the delayed ack timer will kick in every single time.
>>
>> So how is this fixed in linux ? I believe that ABC implementation will
>> fix this issue even if I am not completely sure
>> about that ?
>>
>
> ABC is nowadays disable by default because it was found to annoy small
> segment sending folks enough for them to periodically to come up
> complaining with that "discovery" on netdev... :-) ...ABC is not
> that necessary in Linux anyway because Linux' segment based counting is
> not vulnerable to same kind of problems that byte-based approach would
> be. Faster window growth during slow-start could be done without ABC
> though nobody has yet stepped in to do that (though I just got an idea
> while writing how to do that cleanly :-)).
>
>
>> Also as LRO adds some latency, it seems possible to me that the sender
>> retransmission timer will expires before the
>> delayed ack timer expires.
>>
>
> In theory yes, but in reality that shouldn't happen since RTT is
> calculated so that it would include the delayed ACK delays.
>
>
>> In this case, how is this gonna work ? Is it
>> possible that the sender will stay stuck in
>> its slow start trying to retransmit endlessly the same n packets ?
>>
>
> It wouldn't anyway, because receiver would ACK out-of-order (a duplicate
> below window) segments immediately. ...And we would resort FRTO in between
> too and RTO would be declared spurious and TCP would continue sending
> new data.
>
>
> --
> i.
>
thanks for your help,
--jp
^ permalink raw reply [flat|nested] 8+ messages in thread
* delayed ack timer, slow start and LRO
@ 2008-07-22 21:58 jean-pascal billaud
0 siblings, 0 replies; 8+ messages in thread
From: jean-pascal billaud @ 2008-07-22 21:58 UTC (permalink / raw)
To: netdev
Hi,
I have a question related to the interaction between the delayed ack
timer, slow start and LRO.
If the sender is doing a slow start, it is going to send one packet. The
receiver's delayed ack timer is going to
kick in and when it expires it will send a ack.
Then the sender is going to send 2 packets now. LRO will aggregates them
and the receiver's delayed ack timer is going
to kick in, hoping another packet will arrives which is not going to be
the case. When the timer expires it is going to
send a ack.
The sender is now going to send 4 packets. LRO will aggregate them and
the receiver's delayed ack timer is going to
kick in, hoping another packet will arrives which is not going to be the
case. When the timer expires it is going to
send a ack.
The sender is now going to send ... So I am under the impression that
due to the fact that LRO is aggregating packets,
the delayed ack timer will kick in every single time.
So how is this fixed in linux ? I believe that ABC implementation will
fix this issue even if I am not completely sure
about that ?
Also as LRO adds some latency, it seems possible to me that the sender
retransmission timer will expires before the
delayed ack timer expires. In this case, how is this gonna work ? Is it
possible that the sender will stay stuck in
its slow start trying to retransmit endlessly the same n packets ?
Can anyone help on that ?
thanks,
--jp
^ permalink raw reply [flat|nested] 8+ messages in thread
* delayed ack timer, slow start and LRO
@ 2008-07-22 21:44 jean-pascal billaud
2008-07-22 22:11 ` Evgeniy Polyakov
0 siblings, 1 reply; 8+ messages in thread
From: jean-pascal billaud @ 2008-07-22 21:44 UTC (permalink / raw)
To: netdev
Hi,
I have a question related to the interaction between the delayed ack timer, slow start and LRO.
If the sender is doing a slow start, it is going to send one packet. The receiver's delayed ack timer is going to
kick in and when it expires it will send a ack.
Then the sender is going to send 2 packets now. LRO will aggregates them and the receiver's delayed ack timer is going
to kick in, hoping another packet will arrives which is not going to be the case. When the timer expires it is going to
send a ack.
The sender is now going to send 4 packets. LRO will aggregate them and the receiver's delayed ack timer is going to
kick in, hoping another packet will arrives which is not going to be the case. When the timer expires it is going to
send a ack.
The sender is now going to send ... So I am under the impression that due to the fact that LRO is aggregating packets,
the delayed ack timer will kick in every single time.
So how is this fixed in linux ? I believe that ABC implementation will fix this issue even if I am not completely sure
about that ?
Also as LRO adds some latency, it seems possible to me that the sender retransmission timer will expires before the
delayed ack timer expires. In this case, how is this gonna work ? Is it possible that the sender will stay stuck in
its slow start trying to retransmit endlessly the same n packets ?
Can anyone help on that ?
thanks,
--jp
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: delayed ack timer, slow start and LRO
2008-07-22 21:44 jean-pascal billaud
@ 2008-07-22 22:11 ` Evgeniy Polyakov
0 siblings, 0 replies; 8+ messages in thread
From: Evgeniy Polyakov @ 2008-07-22 22:11 UTC (permalink / raw)
To: jean-pascal billaud; +Cc: netdev
Hi.
On Tue, Jul 22, 2008 at 02:44:05PM -0700, jean-pascal billaud (billaud@vmware.com) wrote:
> Also as LRO adds some latency, it seems possible to me that the sender
> retransmission timer will expires before the delayed ack timer expires. In
> this case, how is this gonna work ? Is it possible that the sender will
> stay stuck in
> its slow start trying to retransmit endlessly the same n packets ?
You can check how your favourite driver handles lro and calls
lro_flush_all(), lro also aggregate packets upto predefined limits of
total size and numbr of 'inner' packets. It also self-destructs when
flow breaks (retransmit, pure ack and so on).
--
Evgeniy Polyakov
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2008-07-23 18:01 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-07-22 22:05 delayed ack timer, slow start and LRO jean-pascal billaud
2008-07-23 10:41 ` Hagen Paul Pfeifer
2008-07-23 17:38 ` jean-pascal billaud
2008-07-23 12:01 ` Ilpo Järvinen
2008-07-23 17:58 ` jean-pascal billaud
-- strict thread matches above, loose matches on Subject: below --
2008-07-22 21:58 jean-pascal billaud
2008-07-22 21:44 jean-pascal billaud
2008-07-22 22:11 ` Evgeniy Polyakov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).