* Re: patch to implement RFC3517 in linux 2.4.22
[not found] <006c01c38f50$7bc26940$0603dc0a@hamilton.local>
@ 2003-10-10 17:35 ` kuznet
0 siblings, 0 replies; 4+ messages in thread
From: kuznet @ 2003-10-10 17:35 UTC (permalink / raw)
To: doug.leith; +Cc: davem, linux-net, linux-kernel, kuznet, jmorris, yoshfuji
Hello!
> The new code marks packets in sack holes as lost as soon as three or more packets with higher sequence numbers are sacked and these will then be immediately retransmitted - this should mean that retransmission of lost packets generally happens earlier and recovery is faster.
What those chunks of code which you killed with IsReno() do to your
opinion?
Alexey
PS Please, try to format mails more sanely. This one is close to unreadable.
Alexey
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: patch to implement RFC3517 in linux 2.4.22
2003-10-10 8:27 ` David S. Miller
@ 2003-10-10 13:29 ` kuznet
0 siblings, 0 replies; 4+ messages in thread
From: kuznet @ 2003-10-10 13:29 UTC (permalink / raw)
To: David S. Miller; +Cc: doug, linux-net, linux-kernel, kuznet, jmorris, yoshfuji
Hello!
> Alexey, comments?
I do not understand the patch. I suppose it _is_ current behaviour,
the corresponding places are "commented out" with IsReno() predicate.
Shortly, I cannot figure out even what the patch is expected to change.
Alexey
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: patch to implement RFC3517 in linux 2.4.22
2003-10-09 7:27 Douglas Leith
@ 2003-10-10 8:27 ` David S. Miller
2003-10-10 13:29 ` kuznet
0 siblings, 1 reply; 4+ messages in thread
From: David S. Miller @ 2003-10-10 8:27 UTC (permalink / raw)
To: Douglas Leith; +Cc: linux-net, linux-kernel, kuznet, jmorris, yoshfuji
On Thu, 9 Oct 2003 07:27:15 -0000
"Douglas Leith" <doug@eee.strath.ac.uk> wrote:
> Comments appreciated.
1) Why do you only update the scorebord in the reno case? All the
retransmission modes need it to be updated.
2) You really need to fix the super-long lines, the code becomes
unreadable after your changes.
Alexey, comments?
^ permalink raw reply [flat|nested] 4+ messages in thread
* patch to implement RFC3517 in linux 2.4.22
@ 2003-10-09 7:27 Douglas Leith
2003-10-10 8:27 ` David S. Miller
0 siblings, 1 reply; 4+ messages in thread
From: Douglas Leith @ 2003-10-09 7:27 UTC (permalink / raw)
To: linux-net; +Cc: davem, linux-kernel, kuznet, jmorris, yoshfuji
[-- Attachment #1: Type: text/plain, Size: 4064 bytes --]
Attached is a short patch against version 2.4.22 to implement the recent
rfc3517 for SACK in TCP (see ftp://ftp.rfc-editor.org/in-notes/rfc3517.txt).
This modifies how packets which fail to be sacked are marked as lost. At
present, any packets falling into sack holes are marked lost after the first
successful retransmit. The new code marks packets in sack holes as lost as
soon as tp->reordering or more packets with higher sequence number are
sacked. This is consistent with how reordering is handled elsewhere and
should lead to faster retransmission and recovery when multiple drops occur.
Comments appreciated.
Regards,
Doug Leith
www.hamilton.ie
diff -u -wbrP --exclude=config.save linux-2.4.22/net/ipv4/tcp_input.c linux-
2.4.22-retrans/net/ipv4/tcp_input.c
--- linux-2.4.22/net/ipv4/tcp_input.c 2003-06-13 15:51:39.000000000 +0100
+++ linux-2.4.22-retrans/net/ipv4/tcp_input.c 2003-10-09 07:59:48.000000000
+0100
@@ -61,6 +61,7 @@
* Panu Kuhlberg: Experimental audit of TCP (re)
transmission
* engine. Lots of bugs are found.
* Pasi Sarolahti: F-RTO for dealing with spurious RTOs
+ * Doug Leith: Early retransmission of packets
falling into sack holes.
*/
#include <linux/config.h>
@@ -757,6 +758,10 @@
* for retransmitted and already SACKed segment -> reordering..
* Both of these heuristics are not used in Loss state, when we cannot
* account for retransmits accurately.
+ *
+ * Retransmission of packets
+ * -------------------------
+ * Extension of Hoe's retransmit to allow early retransmission of packets
which fall into sack holes
*/
static int
tcp_sacktag_write_queue(struct sock *sk, struct sk_buff *ack_skb, u32
prior_snd_una)
@@ -770,6 +775,7 @@
u32 lost_retrans = 0;
int flag = 0;
int i;
+ u32 prior_sacked_out=tp->sacked_out;
if (!tp->sacked_out)
tp->fackets_out = 0;
@@ -781,6 +787,7 @@
__u32 end_seq = ntohl(sp->end_seq);
int fack_count = 0;
int dup_sack = 0;
+ u32 sack_count=0;
/* Check for D-SACK. */
if (i == 0) {
@@ -828,6 +835,8 @@
break;
fack_count++;
+ if (sacked&TCPCB_RETRANS)
+ sack_count++;
in_sack = !after(start_seq, TCP_SKB_CB(skb)->seq) &&
!before(end_seq, TCP_SKB_CB(skb)->end_seq);
@@ -860,8 +869,14 @@
(!lost_retrans || after(end_seq, lost_retrans)))
lost_retrans = end_seq;
- if (!in_sack)
+ if (!in_sack) {
+ /* force early retransmit ? */
+ if (!(sacked&TCPCB_TAGBITS) && (prior_sacked_out
> sack_count + tp->reordering)) {
+ TCP_SKB_CB(skb)->sacked |= TCPCB_LOST;
+ tp->lost_out++;
+ }
continue;
+ }
if (!(sacked&TCPCB_SACKED_ACKED)) {
if (sacked & TCPCB_SACKED_RETRANS) {
@@ -1599,7 +1614,7 @@
if ((flag&FLAG_DATA_LOST) &&
before(tp->snd_una, tp->high_seq) &&
tp->ca_state != TCP_CA_Open &&
- tp->fackets_out > tp->reordering) {
+ tp->fackets_out > tp->reordering && IsReno(tp) ) {
tcp_mark_head_lost(sk, tp, tp->fackets_out-tp->reordering, tp-
>high_seq);
NET_INC_STATS_BH(TCPLoss);
}
@@ -1714,7 +1729,7 @@
tp->ca_state = TCP_CA_Recovery;
}
- if (is_dupack || tcp_head_timedout(sk, tp))
+ if ( (is_dupack || tcp_head_timedout(sk, tp)) && IsReno(tp) )
tcp_update_scoreboard(sk, tp);
tcp_cwnd_down(tp);
tcp_xmit_retransmit_queue(sk);
[-- Attachment #2: rfc3517.patch --]
[-- Type: text/plain, Size: 2765 bytes --]
diff -u -wbrP --exclude=config.save linux-2.4.22/net/ipv4/tcp_input.c linux-2.4.22-retrans/net/ipv4/tcp_input.c
--- linux-2.4.22/net/ipv4/tcp_input.c 2003-06-13 15:51:39.000000000 +0100
+++ linux-2.4.22-retrans/net/ipv4/tcp_input.c 2003-10-09 07:59:48.000000000 +0100
@@ -61,6 +61,7 @@
* Panu Kuhlberg: Experimental audit of TCP (re)transmission
* engine. Lots of bugs are found.
* Pasi Sarolahti: F-RTO for dealing with spurious RTOs
+ * Doug Leith: Early retransmission of packets falling into sack holes.
*/
#include <linux/config.h>
@@ -757,6 +758,10 @@
* for retransmitted and already SACKed segment -> reordering..
* Both of these heuristics are not used in Loss state, when we cannot
* account for retransmits accurately.
+ *
+ * Retransmission of packets
+ * -------------------------
+ * Extension of Hoe's retransmit to allow early retransmission of packets which fall into sack holes
*/
static int
tcp_sacktag_write_queue(struct sock *sk, struct sk_buff *ack_skb, u32 prior_snd_una)
@@ -770,6 +775,7 @@
u32 lost_retrans = 0;
int flag = 0;
int i;
+ u32 prior_sacked_out=tp->sacked_out;
if (!tp->sacked_out)
tp->fackets_out = 0;
@@ -781,6 +787,7 @@
__u32 end_seq = ntohl(sp->end_seq);
int fack_count = 0;
int dup_sack = 0;
+ u32 sack_count=0;
/* Check for D-SACK. */
if (i == 0) {
@@ -828,6 +835,8 @@
break;
fack_count++;
+ if (sacked&TCPCB_RETRANS)
+ sack_count++;
in_sack = !after(start_seq, TCP_SKB_CB(skb)->seq) &&
!before(end_seq, TCP_SKB_CB(skb)->end_seq);
@@ -860,8 +869,14 @@
(!lost_retrans || after(end_seq, lost_retrans)))
lost_retrans = end_seq;
- if (!in_sack)
+ if (!in_sack) {
+ /* force early retransmit ? */
+ if (!(sacked&TCPCB_TAGBITS) && (prior_sacked_out > sack_count + tp->reordering)) {
+ TCP_SKB_CB(skb)->sacked |= TCPCB_LOST;
+ tp->lost_out++;
+ }
continue;
+ }
if (!(sacked&TCPCB_SACKED_ACKED)) {
if (sacked & TCPCB_SACKED_RETRANS) {
@@ -1599,7 +1614,7 @@
if ((flag&FLAG_DATA_LOST) &&
before(tp->snd_una, tp->high_seq) &&
tp->ca_state != TCP_CA_Open &&
- tp->fackets_out > tp->reordering) {
+ tp->fackets_out > tp->reordering && IsReno(tp) ) {
tcp_mark_head_lost(sk, tp, tp->fackets_out-tp->reordering, tp->high_seq);
NET_INC_STATS_BH(TCPLoss);
}
@@ -1714,7 +1729,7 @@
tp->ca_state = TCP_CA_Recovery;
}
- if (is_dupack || tcp_head_timedout(sk, tp))
+ if ( (is_dupack || tcp_head_timedout(sk, tp)) && IsReno(tp) )
tcp_update_scoreboard(sk, tp);
tcp_cwnd_down(tp);
tcp_xmit_retransmit_queue(sk);
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2003-10-10 17:36 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <006c01c38f50$7bc26940$0603dc0a@hamilton.local>
2003-10-10 17:35 ` patch to implement RFC3517 in linux 2.4.22 kuznet
2003-10-09 7:27 Douglas Leith
2003-10-10 8:27 ` David S. Miller
2003-10-10 13:29 ` kuznet
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.