On 11/06/15 22:56, Cui, Cheng wrote:
On Nov 6, 2015, at 4:16 PM, Hans Petter Selasky <h...@selasky.org> wrote:
On 11/06/15 21:46, Cui, Cheng wrote:
Hello Hans,
Sorry if my previous email does not reach you because of a bad subject.
This is Cheng Cui. I am reading the CURRENT FreeBSD code in tcp_output.c, and
find this question regarding your change in revision 271946.
https://svnweb.freebsd.org/base/head/sys/netinet/tcp_output.c?r1=271946&r2=271945&pathrev=271946
trim data "len" under TSO:
885 /*
886 * Prevent the last segment from being
887 * fractional unless the send sockbuf can be
888 * emptied:
889 */
890 max_len = (tp->t_maxopd - optlen);
891 if ((off + len) < sbavail(&so->so_snd)) { <==
892 moff = len % max_len;
893 if (moff != 0) {
894 len -= moff;
895 sendalot = 1;
896 }
897 }
Is there a specific reason that it should skip trimming the data "len" under the condition of
"(off + len) == sbavail(&so->so_snd)" in TSO?
Because I am wondering if we can trim the data "len" directly without checking the
"(off + len)" condition.
Hi Cheng,
I believe the reason is to avoid looping one more time outputting a single
packet containing the remainder of the available data, with regard to max_len.
> How did you envision the removal of this check would influence the
generated packet sequence?
--HPS
Hi Hans,
I may be wrong but my assumption is that the remainder of the available data
may be larger than one single packet.
Suppose max_len==1500, sb_acc==3001, off==2, and (off+len)==3001. In this case, the
current code will not trim the "len"
and let it go directly to the NIC. I think it skips the Nagle's algorithm. As
len==2999, the last packet is 1499,
it is supposed to be held until all outstanding data are ACKed, but it has been
sent out.
Hi Cheng,
That is correct. Nagle's algorithm is not active when "(off+len) ==
sb_acc". Anyhow, the check for "(off+len) == sb_acc" does not go away.
It has to be put before sendalot = 1 to avoid sending the so-called
"small packet" in the next iteration. Possibly you will need to add a
check for TCP nodelay being active, which disable Nagle's algorithm.
Have you done any tests removing this check?
--HPS
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"