Linux TCP implementation
Hello:
I am working with 2.4.21 kernel for iSCSI performance study. I have a question regarding the congestion avoidance algorithm used in the linux TCP implementation. After dumping the value of the snd_cwnd, snd_ssthresh and snd_cwnd_clamp when the tcp_cong_avoid function is called, I observed that the value of snd_ssthresh was always set to a value of 2147483647 and the value of snd_cwnd_clamp was set to 65535. If the snd_cwnd is not be more than the snd_cwnd_clamp, the else part of the function is never executed, as snd_cwnd is never going to be more than snd_ssthresh. Also, if the snd_cwnd is maintained in terms of packets and snd_ssthresh and snd_cwnd_clamp is maintained in terms of bytes, how come the comparison between them. static __inline__ void tcp_cong_avoid(struct tcp_opt *tp) { if (tp->snd_cwnd <= tp->snd_ssthresh) { /* In "safe" area, increase. */ if (tp->snd_cwnd < tp->snd_cwnd_clamp) tp->snd_cwnd++; } else { /* In dangerous area, increase slowly. * In theory this is tp->snd_cwnd += 1 / tp->snd_cwnd */ if (tp->snd_cwnd_cnt >= tp->snd_cwnd) { if (tp->snd_cwnd < tp->snd_cwnd_clamp) tp->snd_cwnd++; tp->snd_cwnd_cnt=0; } else tp->snd_cwnd_cnt++; } tp->snd_cwnd_stamp = tcp_time_stamp; } var/log/messages: Mar 22 15:08:20 jupiter kernel: snd_cwnd: 2, snd_ssthresh: 2147483647, snd_cwnd_clamp: 65535 Mar 22 15:08:20 jupiter kernel: snd_cwnd: 3, snd_ssthresh: 2147483647, snd_cwnd_clamp: 65535 Mar 22 15:08:20 jupiter kernel: snd_cwnd: 4, snd_ssthresh: 2147483647, snd_cwnd_clamp: 65535 Mar 22 15:08:20 jupiter kernel: snd_cwnd: 5, snd_ssthresh: 2147483647, snd_cwnd_clamp: 65535 Mar 22 15:08:20 jupiter kernel: snd_cwnd: 6, snd_ssthresh: 2147483647, snd_cwnd_clamp: 65535 Mar 22 15:08:20 jupiter kernel: snd_cwnd: 7, snd_ssthresh: 2147483647, snd_cwnd_clamp: 65535 Mar 22 15:08:20 jupiter kernel: snd_cwnd: 8, snd_ssthresh: 2147483647, snd_cwnd_clamp: 65535 Mar 22 15:08:20 jupiter kernel: snd_cwnd: 9, snd_ssthresh: 2147483647, snd_cwnd_clamp: 65535 Mar 22 15:08:20 jupiter kernel: snd_cwnd: 10, snd_ssthresh: 2147483647, snd_cwnd_clamp: 65535 Mar 22 15:08:20 jupiter kernel: snd_cwnd: 11, snd_ssthresh: 2147483647, snd_cwnd_clamp: 65535 Mar 22 15:08:20 jupiter kernel: snd_cwnd: 12, snd_ssthresh: 2147483647, snd_cwnd_clamp: 65535 Mar 22 15:08:20 jupiter kernel: snd_cwnd: 13, snd_ssthresh: 2147483647, snd_cwnd_clamp: 65535 Mar 22 15:08:20 jupiter kernel: snd_cwnd: 14, snd_ssthresh: 2147483647, snd_cwnd_clamp: 65535 Mar 22 15:08:20 jupiter kernel: snd_cwnd: 15, snd_ssthresh: 2147483647, snd_cwnd_clamp: 65535 Mar 22 15:08:20 jupiter kernel: snd_cwnd: 16, snd_ssthresh: 2147483647, snd_cwnd_clamp: 65535 Mar 22 15:08:20 jupiter kernel: snd_cwnd: 17, snd_ssthresh: 2147483647, snd_cwnd_clamp: 65535 Mar 22 15:08:20 jupiter kernel: snd_cwnd: 18, snd_ssthresh: 2147483647, snd_cwnd_clamp: 65535 Mar 22 15:08:20 jupiter kernel: snd_cwnd: 19, snd_ssthresh: 2147483647, snd_cwnd_clamp: 65535 Mar 22 15:08:20 jupiter kernel: snd_cwnd: 20, snd_ssthresh: 2147483647, snd_cwnd_clamp: 65535 Mar 22 15:08:20 jupiter kernel: snd_cwnd: 21, snd_ssthresh: 2147483647, snd_cwnd_clamp: 65535 Mar 22 15:08:20 jupiter kernel: snd_cwnd: 22, snd_ssthresh: 2147483647, snd_cwnd_clamp: 65535 Any insight on this topic would be appreciated. Thanks, k |
All times are GMT -5. The time now is 12:56 AM. |