tcp: Add comment about "fairsend"
authorSepherosa Ziehau <sephe@dragonflybsd.org>
Wed, 23 Jan 2013 11:24:03 +0000 (19:24 +0800)
committerSepherosa Ziehau <sephe@dragonflybsd.org>
Wed, 23 Jan 2013 11:24:03 +0000 (19:24 +0800)
sys/netinet/tcp_output.c
sys/netinet/tcp_var.h

index 16bac50..2d01519 100644 (file)
@@ -1471,6 +1471,26 @@ tcp_output_sched(struct tcpcb *tp)
        crit_exit();
 }
 
+/*
+ * Fairsend
+ *
+ * Yield to other senders or receivers on the same netisr if the current
+ * TCP stream has sent tcp_fairsend segments and is going to burst more
+ * segments.  Bursting large amount of segements in a single TCP stream
+ * could delay other senders' segments and receivers' ACKs quite a lot,
+ * if others segments and ACKs are queued on to the same hardware transmit
+ * queue; thus cause unfairness between senders and suppress receiving
+ * performance.
+ * 
+ * Fairsend should be performed at the places that do not affect segment
+ * sending during congestion control, e.g.
+ * - User requested output
+ * - ACK input triggered output
+ *
+ * NOTE:
+ * For devices that are TSO capable, their TSO aggregation size limit could
+ * affect fairsend.
+ */
 int
 tcp_output_fair(struct tcpcb *tp)
 {
index 421eb5a..ce3d2fe 100644 (file)
@@ -150,7 +150,7 @@ struct tcpcb {
        struct  tcp_callout *tt_delack; /* delayed ACK timer */
        struct  netmsg_tcp_timer *tt_msg; /* timer message */
 
-       struct  netmsg_base *tt_sndmore;/* defer sending (fair send) */
+       struct  netmsg_base *tt_sndmore;/* send more segments (fairsend) */
 
        struct  inpcb *t_inpcb;         /* back pointer to internet pcb */
        int     t_state;                /* state of this connection */
@@ -182,7 +182,7 @@ struct tcpcb {
 #define        TF_UNUSED009    0x01000000
 #define        TF_FORCE        0x02000000      /* Set if forcing out a byte */
 #define TF_ONOUTPUTQ   0x04000000      /* on t_outputq list */
-#define TF_FAIRSEND    0x08000000
+#define TF_FAIRSEND    0x08000000      /* fairsend is requested */
 #define TF_UNUSED003   0x10000000
 #define TF_UNUSED004   0x20000000
 #define TF_KEEPALIVE   0x40000000      /* temporary keepalive */