Date: Thu, 25 Feb 2016 20:26:26 +0900 From: Yongmin Cho <yongmincho82@gmail.com> To: transport@freebsd.org Subject: In TCP recovery state, problem of computing the pipe(amount of data in flight). Message-ID: <20160225112625.GA5680@yongmincho-All-Series>
next in thread | raw e-mail | index | archive | help
Hi, all. I have a question about net.inet.tcp.rfc6675_pipe in sysctl. The bytes in flight was changed to be like below in r290122. pipe = snd_max - snd_una - sackhint.sacked_bytes + sackhint.sack_bytes_rexmit. I think, The implementation of sackhint.sack_bytes_rexmit is right. But, I don't think, sackhint.sacked_bytes is right way. The sackhint.sacked_bytes is computed by array of sack_blocks in tcp_sack_doack function. You know, tcp header can have four sacked blocks. (If tcp uses timestmap option, tcp header can have three sacked blocks.) Even if The receiver has sacked blocks greater than three or four, The receiver can send ack with three or four last sack blocks. So if the receiver has many sacked blocks, the sender only knows three sacked_bytes. the snd_holes tail queue in struct tcpcb has all of sack holes which is greater than snd_una. So, i think, sack_bytes_rexmit is correct. Because sack_bytes_rexmit is computed by snd_holes tail queue in struct tcpcb. but sackhint.sacked_bytes is too small. Because sackhint.sacked_bytes is just computed by ack with three or four last sacked blocks. So, the return value of tcp_compute_pipe() function is too big, while recovery phase. In recovery state, the sender can send data, if the return value of tcp_compute_pipe() should be less than snd_ssthresh. Sometimes it takes a long time to send data, if the sender knows many sack holes. Furthermore, Sometimes the sender can't send data, Because the return value of tcp_compute_pipe() function. And retransmission timeout is triggered. IMO, sackhint.sack_bytes should be computed using snd_holes tail queue. Because snd_holes has all of sack holes which is greater than snd_una, sackhint.sack_bytes can be computed using snd_holes. Please check my opinion. I'm sorry, I'm not good at english. Thank you in advance your answers.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20160225112625.GA5680>