Hi ,
Alexey Kuznetsov wrote:
Hello!
DSACK) is used, the retransmissions seem to happen earlier .
Yes. With SACK/FACK retransmissions can be triggered earlier,
if an ACK SACKs a segment which is far enough from current snd.una.
That's what happens f.e. in T_SACK_dump5.dat
01:28:15.681050 < 192.38.55.34.51137 > 192.168.110.111.42238: P
18825:20273[31857](1448) ack 1/5841 win 5840/0 <nop,nop,timestamp 418948058
469778216> [|] (DF)(ttl 64, id 19165)
01:28:15.800946 < 192.168.110.111.42238 > 192.38.55.34.51137: . 1:1[5841](0) ack
8689/31857 win 23168/0 <nop,nop,timestamp 469778229 418948031,nop,nop, sack 1
{10137:11585} > (DF) [tos 0x8] (ttl 62, id 45508)
01:28:15.860773 < 192.168.110.111.42238 > 192.38.55.34.51137: . 1:1[5841](0) ack
8689/31857 win 23168/0 <nop,nop,timestamp 469778235 418948031,nop,nop, sack 2
{13033:14481}{10137:11585} > (DF) [tos 0x8] (ttl 62, id 45509)
01:28:15.860781 < 192.38.55.34.51137 > 192.168.110.111.42238: .
8689:10137[31857](1448) ack 1/5841 win 5840/0 <nop,nop,timestamp 418948076 469778235>
[|] (DF) (ttl 64, id 19166)
The second sack confirms that 13033..14481 already arrived.
And this is even not a mistake, the third dupack arrived immediately:
01:28:15.901382 < 192.168.110.111.42238 > 192.38.55.34.51137: . 1:1[5841](0) ack
8689/31857 win 23168/0 <nop,nop,timestamp 469778238 418948031,nop,nop, sack 2
{13033:15929}{10137:11585} > (DF) [tos 0x8] (ttl 62, id 45510)
Thanks a lot Alexey for pointing that out.!!!..That was more or less
what I was asumming.... but is this feature of linux TCP documented
somewhere? as far as I can see I couldnt find it in Pasi's paper.... in
the conservative sack based recovery RFC (* RFC 3517), it is clearly
*stated that the
Upon the receipt of the first (DupThresh - 1) duplicate ACKs, the
scoreboard is to be updated as normal. Note: The first and second
duplicate ACKs can also be used to trigger the transmission of
previously unsent segments using the Limited Transmit algorithm
[RFC3042].
When a TCP sender receives the duplicate ACK corresponding to
DupThresh ACKs, the scoreboard MUST be updated with the new SACK
information (via Update ()). If no previous loss event has occurred
on the connection or the cumulative acknowledgment point is beyond
the last value of RecoveryPoint, a loss recovery phase SHOULD be
initiated, per the fast retransmit algorithm outlined in [RFC2581].
ofcourse, once we are in the fast recovery phase we are able to mark a packet
lost based on the criteria (also from the same RFC)
IsLost (SeqNum):
This routine returns whether the given sequence number is
considered to be lost. The routine returns true when either
DupThresh discontiguous SACKed sequences have arrived above
'SeqNum' or (DupThresh * SMSS) bytes with sequence numbers greater
than 'SeqNum' have been SACKed. Otherwise, the routine returns
false.
But from the trace portion you cut outside it seems the sack
implementation in linux simply checked the sn of the newly sacked one,
and finding out that there are two blocks in between, considered it as
if it is a dupthresh duplicate ack and retransmitted it... So if we were
not using sack the retransmission would have occured after
01:28:15.90... so the TCP SACK retransmitted in this case around 50ms
earlier...but it might be larger in some cases, (I will try to look
into the traces to find larger time differences but you can see there is
a clear difference by looking at the plots of the cdf of the time of
occurance of the first retransmissions for the different cases at
http://kom.aau.dk/~oumer/first_transmission_times.pdf .... so I am on
the verge of concluding TCP SACK is worse than non SACK TCP incase of
persistent reordering....if only I could find a reference about the
linux TCP SACK behaviour we discussed above :-)...
Actually, it is the reason why the FACK heuristics is not disabled
even when FACK disabled. Experiments showed that relaxing it severely
damages recovery in presense of real multiple losses.
And when it happens to be reordering, undoing works really well.
so you are saying, it doesnt matter whether I disable FACK or not, it is
basically set by default?
and it is disabled only when reordering is detected (and this is done
either through timestamps or DSACK, right?)...
so if neither DSACK and timestamps are enabled we are unable to detect
disorder, so basically there should be no difference between SACK and
FACK, cause it is always FACK used... and that seems to make sense from
the results I have (i.e. referrring to ....
http://kom.aau.dk/~oumer/384_100Kbyte_Timestamps_SACK_FACK_DSACK_10FER_DT.pdf
http://kom.aau.dk/~oumer/384_100Kbyte_Timestamps_SACK_FACK_DSACK_10FER_ret.pdf
)...
now let's introduce DSACK and no timestamps... that means we are able to
detect some reordering and download time should decrease, and it does so
as shown in the first of the figures I just give the link to...however,
the # of retransmissions increases as shown in the second figure? isnt
that odd? shouldnt it be the other way around?
Also why does the # retransmissions in the timestamp case increases when
we use SACK/FACK as compared with no SACK case?...and as you mentioned
earlier reordering undoing works very well, by comparing the curves with
and without timestamps, but some of this seems to be undo when we use it
along with SACK, FACK and DSACK, eventhough the differences are not that
much...
There is one more thing, which probably happens in your experiments,
though I did not find it in dumps. If reordering exceeds RTT, i.e.
we receive SACK for a segment, which was sent as part of forward
retransmission after a hole was detected, fast retransmit entered immediately.
Two dupacks is enough for this: first triggers forward transmission,
if the second SACKs the segmetn which has just been sent, we are there.
This one , I dont think I understood you. Could you please make it a bit
more clearer?
One more thing, say I have FRTO, DSACK and timestamps enabled, which
algorithm takes precedence ?
They live together, essnetially, not dependant.
OK ...but if timestamps are enabled, then I just couldnt figure out the
use of DSACK, can it tell us something more than we can find using
timestamps??
Alexey
Regards,
Oumer
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html