History

tcp: remove Appropriate Byte Count support

TCP Appropriate Byte Count was added by me, but later disabled. There is no point in maintaining it since it is a potential source of bugs and Linux already implements other better window protection heuristics.

Stephen Hemminger committed 13 years ago

Commit ca2eb561 parent 547472b9 files · +1 −67Browse files

Unified · Split

9 files
  1. Documentation/networking/ip-sysctl.txt +0 −11
  2. include/linux/tcp.h +0 −1
  3. include/net/tcp.h +0 −1
  4. kernel/sysctl_binary.c +0 −1
  5. net/ipv4/sysctl_net_ipv4.c +0 −7
  6. net/ipv4/tcp.c +0 −1
  7. net/ipv4/tcp_cong.c +1 −29
  8. net/ipv4/tcp_input.c +0 −15
  9. net/ipv4/tcp_minisocks.c +0 −1
Documentation/networking/ip-sysctl.txt+0−11
@@ -130,17 +130,6 @@ somaxconn - INTEGER · 129 unmodified lines
130130 Defaults to 128. See also tcp_max_syn_backlog for additional tuning
131131 for TCP sockets.
132132
133−tcp_abc - INTEGER
134− Controls Appropriate Byte Count (ABC) defined in RFC3465.
135− ABC is a way of increasing congestion window (cwnd) more slowly
136− in response to partial acknowledgments.
137− Possible values are:
138− 0 increase cwnd once per acknowledgment (no ABC)
139− 1 increase cwnd once per acknowledgment of full sized segment
140− 2 allow increase cwnd by two if acknowledgment is
141− of two segments to compensate for delayed acknowledgments.
142− Default: 0 (off)
143−
144133 tcp_abort_on_overflow - BOOLEAN
145134 If listening service is too slow to accept new connections,
146135 reset them. Default state is FALSE. It means that if overflow
include/linux/tcp.h+0−1
@@ -246,7 +246,6 @@ struct tcp_sock { · 245 unmodified lines
246246 u32 sacked_out; /* SACK'd packets */
247247 u32 fackets_out; /* FACK'd packets */
248248 u32 tso_deferred;
249− u32 bytes_acked; /* Appropriate Byte Counting - RFC3465 */
250249
251250 /* from STCP, retrans queue hinting */
252251 struct sk_buff* lost_skb_hint;
include/net/tcp.h+0−1
@@ -279,7 +279,6 @@ extern int sysctl_tcp_dma_copybreak; · 278 unmodified lines
279279 extern int sysctl_tcp_nometrics_save;
280280 extern int sysctl_tcp_moderate_rcvbuf;
281281 extern int sysctl_tcp_tso_win_divisor;
282−extern int sysctl_tcp_abc;
283282 extern int sysctl_tcp_mtu_probing;
284283 extern int sysctl_tcp_base_mss;
285284 extern int sysctl_tcp_workaround_signed_windows;
kernel/sysctl_binary.c+0−1
@@ -387,7 +387,6 @@ static const struct bin_table bin_net_ipv4_table[] = { · 386 unmodified lines
387387 { CTL_INT, NET_TCP_MODERATE_RCVBUF, "tcp_moderate_rcvbuf" },
388388 { CTL_INT, NET_TCP_TSO_WIN_DIVISOR, "tcp_tso_win_divisor" },
389389 { CTL_STR, NET_TCP_CONG_CONTROL, "tcp_congestion_control" },
390− { CTL_INT, NET_TCP_ABC, "tcp_abc" },
391390 { CTL_INT, NET_TCP_MTU_PROBING, "tcp_mtu_probing" },
392391 { CTL_INT, NET_TCP_BASE_MSS, "tcp_base_mss" },
393392 { CTL_INT, NET_IPV4_TCP_WORKAROUND_SIGNED_WINDOWS, "tcp_workaround_signed_windows" },
net/ipv4/sysctl_net_ipv4.c+0−7
@@ -632,13 +632,6 @@ static struct ctl_table ipv4_table[] = { · 631 unmodified lines
632632 .maxlen = TCP_CA_NAME_MAX,
633633 .proc_handler = proc_tcp_congestion_control,
634634 },
635− {
636− .procname = "tcp_abc",
637− .data = &sysctl_tcp_abc,
638− .maxlen = sizeof(int),
639− .mode = 0644,
640− .proc_handler = proc_dointvec,
641− },
642635 {
643636 .procname = "tcp_mtu_probing",
644637 .data = &sysctl_tcp_mtu_probing,
net/ipv4/tcp.c+0−1
@@ -2289,7 +2289,6 @@ int tcp_disconnect(struct sock *sk, int flags) · 2288 unmodified lines
22892289 tp->packets_out = 0;
22902290 tp->snd_ssthresh = TCP_INFINITE_SSTHRESH;
22912291 tp->snd_cwnd_cnt = 0;
2292− tp->bytes_acked = 0;
22932292 tp->window_clamp = 0;
22942293 tcp_set_ca_state(sk, TCP_CA_Open);
22952294 tcp_clear_retrans(tp);
net/ipv4/tcp_cong.c+1−29
@@ -317,28 +317,11 @@ void tcp_slow_start(struct tcp_sock *tp) · 316 unmodified lines
317317 snd_cwnd = 1U;
318318 }
319319
320− /* RFC3465: ABC Slow start
321− * Increase only after a full MSS of bytes is acked
322− *
323− * TCP sender SHOULD increase cwnd by the number of
324− * previously unacknowledged bytes ACKed by each incoming
325− * acknowledgment, provided the increase is not more than L
326− */
327− if (sysctl_tcp_abc && tp->bytes_acked < tp->mss_cache)
328− return;
329−
330320 if (sysctl_tcp_max_ssthresh > 0 && tp->snd_cwnd > sysctl_tcp_max_ssthresh)
331321 cnt = sysctl_tcp_max_ssthresh >> 1; /* limited slow start */
332322 else
333323 cnt = snd_cwnd; /* exponential increase */
334324
335− /* RFC3465: ABC
336− * We MAY increase by 2 if discovered delayed ack
337− */
338− if (sysctl_tcp_abc > 1 && tp->bytes_acked >= 2*tp->mss_cache)
339− cnt <<= 1;
340− tp->bytes_acked = 0;
341−
342325 tp->snd_cwnd_cnt += cnt;
343326 while (tp->snd_cwnd_cnt >= snd_cwnd) {
344327 tp->snd_cwnd_cnt -= snd_cwnd;
@@ -378,20 +361,9 @@ void tcp_reno_cong_avoid(struct sock *sk, u32 ack, u32 in_flight) · 33 unmodified lines
378361 /* In "safe" area, increase. */
379362 if (tp->snd_cwnd <= tp->snd_ssthresh)
380363 tcp_slow_start(tp);
381−
382364 /* In dangerous area, increase slowly. */
383− else if (sysctl_tcp_abc) {
384− /* RFC3465: Appropriate Byte Count
385− * increase once for each full cwnd acked
386− */
387− if (tp->bytes_acked >= tp->snd_cwnd*tp->mss_cache) {
388− tp->bytes_acked -= tp->snd_cwnd*tp->mss_cache;
389− if (tp->snd_cwnd < tp->snd_cwnd_clamp)
390− tp->snd_cwnd++;
391− }
392− } else {
365+ else
393366 tcp_cong_avoid_ai(tp, tp->snd_cwnd);
394− }
395367 }
396368 EXPORT_SYMBOL_GPL(tcp_reno_cong_avoid);
397369
net/ipv4/tcp_input.c+0−15
@@ -98,7 +98,6 @@ int sysctl_tcp_frto_response __read_mostly; · 97 unmodified lines
9898 int sysctl_tcp_thin_dupack __read_mostly;
9999
100100 int sysctl_tcp_moderate_rcvbuf __read_mostly = 1;
101−int sysctl_tcp_abc __read_mostly;
102101 int sysctl_tcp_early_retrans __read_mostly = 2;
103102
104103 #define FLAG_DATA 0x01 /* Incoming frame contained data. */
@@ -2007,7 +2006,6 @@ static void tcp_enter_frto_loss(struct sock *sk, int allowed_segments, int flag) · 1902 unmodified lines
20072006 tp->snd_cwnd_cnt = 0;
20082007 tp->snd_cwnd_stamp = tcp_time_stamp;
20092008 tp->frto_counter = 0;
2010− tp->bytes_acked = 0;
20112009
20122010 tp->reordering = min_t(unsigned int, tp->reordering,
20132011 sysctl_tcp_reordering);
@@ -2056,7 +2054,6 @@ void tcp_enter_loss(struct sock *sk, int how) · 42 unmodified lines
20562054 tp->snd_cwnd_cnt = 0;
20572055 tp->snd_cwnd_stamp = tcp_time_stamp;
20582056
2059− tp->bytes_acked = 0;
20602057 tcp_clear_retrans_partial(tp);
20612058
20622059 if (tcp_is_reno(tp))
@@ -2684,7 +2681,6 @@ static void tcp_init_cwnd_reduction(struct sock *sk, const bool set_ssthresh) · 621 unmodified lines
26842681 struct tcp_sock *tp = tcp_sk(sk);
26852682
26862683 tp->high_seq = tp->snd_nxt;
2687− tp->bytes_acked = 0;
26882684 tp->snd_cwnd_cnt = 0;
26892685 tp->prior_cwnd = tp->snd_cwnd;
26902686 tp->prr_delivered = 0;
@@ -2735,7 +2731,6 @@ void tcp_enter_cwr(struct sock *sk, const int set_ssthresh) · 44 unmodified lines
27352731 struct tcp_sock *tp = tcp_sk(sk);
27362732
27372733 tp->prior_ssthresh = 0;
2738− tp->bytes_acked = 0;
27392734 if (inet_csk(sk)->icsk_ca_state < TCP_CA_CWR) {
27402735 tp->undo_marker = 0;
27412736 tcp_init_cwnd_reduction(sk, set_ssthresh);
@@ -3417,7 +3412,6 @@ static void tcp_conservative_spur_to_response(struct tcp_sock *tp) · 675 unmodified lines
34173412 {
34183413 tp->snd_cwnd = min(tp->snd_cwnd, tp->snd_ssthresh);
34193414 tp->snd_cwnd_cnt = 0;
3420− tp->bytes_acked = 0;
34213415 TCP_ECN_queue_cwr(tp);
34223416 tcp_moderate_cwnd(tp);
34233417 }
@@ -3609,15 +3603,6 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag) · 185 unmodified lines
36093603 if (after(ack, prior_snd_una))
36103604 flag |= FLAG_SND_UNA_ADVANCED;
36113605
3612− if (sysctl_tcp_abc) {
3613− if (icsk->icsk_ca_state < TCP_CA_CWR)
3614− tp->bytes_acked += ack - prior_snd_una;
3615− else if (icsk->icsk_ca_state == TCP_CA_Loss)
3616− /* we assume just one segment left network */
3617− tp->bytes_acked += min(ack - prior_snd_una,
3618− tp->mss_cache);
3619− }
3620−
36213606 prior_fackets = tp->fackets_out;
36223607 prior_in_flight = tcp_packets_in_flight(tp);
36233608
net/ipv4/tcp_minisocks.c+0−1
@@ -446,7 +446,6 @@ struct sock *tcp_create_openreq_child(struct sock *sk, struct request_sock *req, · 445 unmodified lines
446446 */
447447 newtp->snd_cwnd = TCP_INIT_CWND;
448448 newtp->snd_cwnd_cnt = 0;
449− newtp->bytes_acked = 0;
450449
451450 newtp->frto_counter = 0;
452451 newtp->frto_highmark = 0;