aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/tcp_output.c
diff options
context:
space:
mode:
authorEric Dumazet <edumazet@google.com>2018-11-11 10:34:28 -0500
committerDavid S. Miller <davem@davemloft.net>2018-11-11 16:57:03 -0500
commitc73e5807e4f6fc6d373a5db55b45f639f8bb6328 (patch)
tree09c332f796e245e7ec15cc31905e61f793da451b /net/ipv4/tcp_output.c
parent83afb36a7097bdf6776e261fa3a2bf2dc5a4a8c2 (diff)
tcp: tsq: no longer use limit_output_bytes for paced flows
FQ pacing guarantees that paced packets queued by one flow do not add head-of-line blocking for other flows. After TCP GSO conversion, increasing limit_output_bytes to 1 MB is safe, since this maps to 16 skbs at most in qdisc or device queues. (or slightly more if some drivers lower {gso_max_segs|size}) We still can queue at most 1 ms worth of traffic (this can be scaled by wifi drivers if they need to) Tested: # ethtool -c eth0 | egrep "tx-usecs:|tx-frames:" # 40 Gbit mlx4 NIC tx-usecs: 16 tx-frames: 16 # tc qdisc replace dev eth0 root fq # for f in {1..10};do netperf -P0 -H lpaa24,6 -o THROUGHPUT;done Before patch: 27711 26118 27107 27377 27712 27388 27340 27117 27278 27509 After patch: 37434 36949 36658 36998 37711 37291 37605 36659 36544 37349 Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/tcp_output.c')
-rw-r--r--net/ipv4/tcp_output.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index 75dcf4daca72..d40d4cc53319 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -2220,8 +2220,9 @@ static bool tcp_small_queue_check(struct sock *sk, const struct sk_buff *skb,
2220 limit = max_t(unsigned long, 2220 limit = max_t(unsigned long,
2221 2 * skb->truesize, 2221 2 * skb->truesize,
2222 sk->sk_pacing_rate >> sk->sk_pacing_shift); 2222 sk->sk_pacing_rate >> sk->sk_pacing_shift);
2223 limit = min_t(unsigned long, limit, 2223 if (sk->sk_pacing_status == SK_PACING_NONE)
2224 sock_net(sk)->ipv4.sysctl_tcp_limit_output_bytes); 2224 limit = min_t(unsigned long, limit,
2225 sock_net(sk)->ipv4.sysctl_tcp_limit_output_bytes);
2225 limit <<= factor; 2226 limit <<= factor;
2226 2227
2227 if (refcount_read(&sk->sk_wmem_alloc) > limit) { 2228 if (refcount_read(&sk->sk_wmem_alloc) > limit) {