A sender-side D-SACK patch
Noritoshi Demizu
demizu at dd.iij4u.or.jp
Thu Jul 28 02:25:36 PDT 2005
Below is a patch for sender-side D-SACK.
Currently, DragonFlyBSD-current (head?) treats D-SACK segments as
normal duplicate ACKs. This behavior reduces TCP performance in
some cases. With this patch, D-SACK segments are not treated as
duplicate ACKs. This patch improves TCP performance in some cases.
The following page shows one case where TCP performance is improved.
http://www.demizu.org/~noritosi/memo/2005/0728/
Thanks.
Regards,
Noritoshi Demizu
Index: netinet/tcp_input.c
===================================================================
RCS file: /home/cvsup/DragonFlyBSD/dcvs/src/sys/netinet/tcp_input.c,v
retrieving revision 1.60
diff -u -r1.60 tcp_input.c
--- netinet/tcp_input.c 10 May 2005 15:48:10 -0000 1.60
+++ netinet/tcp_input.c 28 Jul 2005 08:09:02 -0000
@@ -1895,7 +1895,8 @@
if (SEQ_LEQ(th->th_ack, tp->snd_una)) {
if (TCP_DO_SACK(tp))
tcp_sack_update_scoreboard(tp, &to);
- if (tlen != 0 || tiwin != tp->snd_wnd) {
+ if (tlen != 0 || tiwin != tp->snd_wnd ||
+ (to.to_flags & TOF_DSACK)) {
tp->t_dupacks = 0;
break;
}
Index: netinet/tcp_sack.c
===================================================================
RCS file: /home/cvsup/DragonFlyBSD/dcvs/src/sys/netinet/tcp_sack.c,v
retrieving revision 1.2
diff -u -r1.2 tcp_sack.c
--- netinet/tcp_sack.c 9 Mar 2005 06:54:34 -0000 1.2
+++ netinet/tcp_sack.c 28 Jul 2005 08:09:02 -0000
@@ -261,9 +261,10 @@
int startblock;
int i;
- if (tcp_sack_ndsack_blocks(blocks, numblocks, tp->snd_una) > 0)
+ if (tcp_sack_ndsack_blocks(blocks, numblocks, tp->snd_una) > 0) {
startblock = 1;
- else
+ to->to_flags |= TOF_DSACK;
+ } else
startblock = 0;
for (i = startblock; i < numblocks; i++) {
Index: netinet/tcp_var.h
===================================================================
RCS file: /home/cvsup/DragonFlyBSD/dcvs/src/sys/netinet/tcp_var.h,v
retrieving revision 1.35
diff -u -r1.35 tcp_var.h
--- netinet/tcp_var.h 10 May 2005 15:48:10 -0000 1.35
+++ netinet/tcp_var.h 28 Jul 2005 08:09:02 -0000
@@ -408,6 +408,7 @@
#define TOF_SCALE 0x0020
#define TOF_SACK_PERMITTED 0x0040
#define TOF_SACK 0x0080
+#define TOF_DSACK 0x0100
u_int32_t to_tsval;
u_int32_t to_tsecr;
tcp_cc to_cc; /* holds CC or CCnew */
More information about the Submit
mailing list