Files
android_kernel_samsung_msm8226/include/linux
Eric Dumazet 6458fae8c6 tcp: TCP Small Queues
This introduce TSQ (TCP Small Queues)

TSQ goal is to reduce number of TCP packets in xmit queues (qdisc &
device queues), to reduce RTT and cwnd bias, part of the bufferbloat
problem.

sk->sk_wmem_alloc not allowed to grow above a given limit,
allowing no more than ~128KB [1] per tcp socket in qdisc/dev layers at a
given time.

TSO packets are sized/capped to half the limit, so that we have two
TSO packets in flight, allowing better bandwidth use.

As a side effect, setting the limit to 40000 automatically reduces the
standard gso max limit (65536) to 40000/2 : It can help to reduce
latencies of high prio packets, having smaller TSO packets.

This means we divert sock_wfree() to a tcp_wfree() handler, to
queue/send following frames when skb_orphan() [2] is called for the
already queued skbs.

Results on my dev machines (tg3/ixgbe nics) are really impressive,
using standard pfifo_fast, and with or without TSO/GSO.

Without reduction of nominal bandwidth, we have reduction of buffering
per bulk sender :
< 1ms on Gbit (instead of 50ms with TSO)
< 8ms on 100Mbit (instead of 132 ms)

I no longer have 4 MBytes backlogged in qdisc by a single netperf
session, and both side socket autotuning no longer use 4 Mbytes.

As skb destructor cannot restart xmit itself ( as qdisc lock might be
taken at this point ), we delegate the work to a tasklet. We use one
tasklest per cpu for performance reasons.

If tasklet finds a socket owned by the user, it sets TSQ_OWNED flag.
This flag is tested in a new protocol method called from release_sock(),
to eventually send new segments.

[1] New /proc/sys/net/ipv4/tcp_limit_output_bytes tunable
[2] skb_orphan() is usually called at TX completion time,
  but some drivers call it in their start_xmit() handler.
  These drivers should at least use BQL, or else a single TCP
  session can still fill the whole NIC TX ring, since TSQ will
  have no effect.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Dave Taht <dave.taht@bufferbloat.net>
Cc: Tom Herbert <therbert@google.com>
Cc: Matt Mathis <mattmathis@google.com>
Cc: Yuchung Cheng <ycheng@google.com>
Cc: Nandita Dukkipati <nanditad@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Change-Id: I37d5e4d7c9ced1846385b6a04ae3ad134763a949
2020-12-10 23:24:37 +01:00
..
…
2012-04-23 14:23:32 +03:00
2011-03-31 11:26:23 -03:00
2020-09-23 18:05:04 +02:00
2008-02-06 10:41:02 -08:00
2010-10-15 21:18:59 +02:00
2019-08-05 14:20:47 +02:00
2008-07-01 11:28:06 +10:00
2009-06-17 00:36:36 -04:00
2011-07-22 08:25:37 -07:00
2010-11-23 20:14:46 +00:00
2019-08-05 14:20:47 +02:00
2012-04-09 13:57:51 -07:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2013-06-20 10:46:21 -07:00
2011-07-20 20:47:43 -04:00
2009-09-08 17:42:50 -07:00
2019-08-05 14:20:47 +02:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2008-12-03 22:12:38 -08:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2011-10-26 15:43:25 -04:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2009-04-01 08:59:23 -07:00
2011-01-15 20:07:45 -05:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2011-03-22 17:43:59 -07:00
2005-04-16 15:20:36 -07:00
2008-10-20 08:52:42 -07:00
2011-03-11 14:25:50 +00:00
2009-01-30 23:40:06 +05:30
2008-06-06 11:29:10 -07:00
2009-01-04 13:33:20 -08:00
2005-04-16 15:20:36 -07:00
2010-06-24 21:30:09 -07:00
2011-07-31 22:05:09 +02:00
2009-11-20 20:13:39 +01:00
2009-11-20 20:13:39 +01:00
2009-11-20 20:13:39 +01:00
2005-04-16 15:20:36 -07:00
2011-03-31 11:26:23 -03:00
2011-03-31 11:26:23 -03:00
2012-03-16 20:35:02 +00:00
2012-03-16 20:35:02 +00:00
2019-08-02 15:14:10 +02:00
2011-03-31 11:26:23 -03:00
2010-10-25 08:02:40 -07:00
2008-07-25 10:53:33 -07:00
2005-04-16 15:20:36 -07:00
2012-02-28 16:02:54 +01:00
2011-10-03 09:57:10 -07:00
2005-04-16 15:20:36 -07:00
2012-01-03 22:54:57 -05:00
2011-10-29 21:20:22 +02:00
2011-03-31 11:26:23 -03:00
2012-03-29 15:38:31 +10:30
2005-04-16 15:20:36 -07:00
2007-07-17 10:23:04 -07:00
2012-03-23 16:58:38 -07:00
2008-12-25 11:01:43 +11:00
2007-05-10 18:24:13 +02:00
2011-07-06 14:44:42 -07:00
2011-07-25 20:57:16 -07:00
2011-12-13 09:26:45 +00:00
2005-04-16 15:20:36 -07:00
2008-02-03 15:42:53 +02:00
2019-08-06 10:44:47 +02:00
2011-07-05 23:42:17 -07:00
2011-01-10 08:51:44 -08:00
2011-10-03 09:57:10 -07:00
2012-02-20 19:46:36 +11:00
2011-05-23 10:47:06 -05:00
2012-01-04 08:56:31 -06:00
2009-12-10 23:52:01 +00:00
2011-05-29 13:03:09 +01:00
2011-10-31 20:19:04 +00:00
2012-05-22 14:01:06 -07:00
2007-02-09 17:39:36 -05:00
2009-11-04 09:50:58 -08:00
2011-03-10 11:35:17 +01:00
2011-05-24 10:21:29 +02:00
2009-09-14 17:41:42 -07:00
2009-01-30 23:46:40 +05:30
2011-11-26 14:59:39 -05:00
2019-08-05 14:20:47 +02:00
2005-04-16 15:20:36 -07:00
2008-01-28 23:21:18 +01:00
2011-12-11 18:25:16 -05:00
2011-09-14 15:24:51 -04:00
2011-03-31 11:26:23 -03:00
2006-03-31 12:18:54 -08:00
2011-01-12 20:16:43 -05:00
2019-08-02 15:14:10 +02:00
2005-04-16 15:20:36 -07:00
2020-09-23 17:37:32 +02:00
2011-01-10 08:51:44 -08:00
2005-04-16 15:20:36 -07:00
2011-01-07 17:50:27 +11:00
2019-08-06 10:44:15 +02:00
2009-06-18 13:04:05 -07:00
2009-11-04 09:50:58 -08:00
2013-02-18 07:24:18 -08:00
2012-02-28 17:10:21 +00:00
2012-04-09 13:53:16 -07:00
2007-07-10 00:35:17 -04:00
2010-10-25 14:11:37 -07:00
2012-04-27 10:46:45 +08:00
2013-06-14 13:34:03 -07:00
2011-07-01 15:34:45 -07:00
2009-09-01 01:13:31 -07:00
2010-02-09 11:13:56 +01:00
2011-03-31 11:26:23 -03:00
2019-08-06 12:26:30 +02:00
2010-03-07 22:17:09 +01:00
2010-10-12 16:53:37 +02:00
2005-04-16 15:20:36 -07:00
2012-03-26 21:47:19 +02:00
2012-03-26 21:47:19 +02:00
2012-03-26 21:47:19 +02:00
2012-03-26 21:47:19 +02:00
2012-03-26 21:47:19 +02:00
2011-02-23 00:53:26 +00:00
2012-03-26 21:47:19 +02:00
2005-04-16 15:20:36 -07:00
2011-07-01 10:37:15 +02:00
2019-08-05 14:20:47 +02:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2011-10-03 09:57:10 -07:00
2009-11-04 09:50:58 -08:00
2012-03-27 22:45:26 -04:00
2009-01-30 23:53:12 +05:30
2010-06-03 03:21:52 -07:00
2005-05-05 14:25:59 -07:00
2009-11-04 09:50:58 -08:00
2005-04-16 15:20:36 -07:00
2009-01-30 23:56:13 +05:30
2009-01-30 23:56:48 +05:30
2008-08-02 18:36:10 +01:00
2011-07-21 13:47:54 -07:00
2020-08-08 16:42:41 +02:00
2005-04-16 15:20:36 -07:00
2006-10-10 15:37:22 -07:00
2005-04-16 15:20:36 -07:00
2010-08-09 20:45:05 -07:00
2012-12-17 10:37:36 -08:00
2019-08-02 15:14:10 +02:00
2020-08-08 16:42:41 +02:00
2009-04-21 13:41:48 -07:00
2006-10-04 00:31:09 -07:00
2012-06-26 10:35:13 -07:00
2010-10-07 14:08:55 +01:00
2010-06-03 03:21:52 -07:00
2011-03-31 11:26:23 -03:00
2019-08-05 14:20:47 +02:00
2019-08-02 15:14:10 +02:00
2010-08-10 11:49:21 -07:00
2019-08-05 14:20:47 +02:00
2007-10-17 08:42:52 -07:00
2012-03-08 10:50:35 -08:00
2020-09-23 17:38:55 +02:00
2011-02-17 11:12:40 -08:00
2012-03-08 10:50:35 -08:00
2012-04-09 13:53:16 -07:00
2011-02-13 16:54:24 -08:00
2011-01-24 14:45:11 +10:30
2008-07-04 10:40:05 -07:00
2010-09-09 18:57:24 -07:00
2019-08-05 14:20:47 +02:00
2011-12-27 11:26:41 +02:00
2011-09-16 19:20:20 -04:00
2009-04-06 16:06:26 +01:00
2019-08-06 10:41:58 +02:00
2009-07-30 16:03:45 +09:30
2007-07-17 10:23:03 -07:00
2011-04-25 18:14:10 -07:00
2019-08-05 14:20:47 +02:00
2006-06-05 12:29:17 -07:00
2019-08-06 10:44:38 +02:00
2009-06-16 19:47:48 -07:00
2012-03-15 21:41:34 +01:00
2005-04-16 15:20:36 -07:00
2008-04-29 08:06:01 -07:00
2007-05-09 12:30:49 -07:00
2012-03-03 15:04:45 -05:00
2020-09-23 17:38:52 +02:00
2009-09-22 07:17:35 -07:00
2009-06-16 08:40:20 +02:00
2009-01-31 00:00:35 +05:30
2010-06-03 03:21:52 -07:00
2011-07-26 16:49:47 -07:00
2005-04-16 15:20:36 -07:00
2019-08-06 10:44:40 +02:00
2019-08-02 15:14:10 +02:00
2006-11-30 04:40:22 +01:00
2019-08-05 14:20:47 +02:00
2012-04-18 17:20:13 -07:00
2011-10-03 09:57:10 -07:00
2011-10-03 09:57:10 -07:00
2011-10-03 09:57:10 -07:00
2011-10-03 09:57:10 -07:00
2011-10-03 09:57:10 -07:00
2019-08-05 14:20:47 +02:00
2011-11-14 00:47:54 -05:00
2019-08-05 14:20:47 +02:00
2019-08-09 09:13:49 +02:00
2009-06-17 18:02:11 -07:00
2010-07-05 16:14:52 -06:00
2019-08-05 14:20:47 +02:00
2019-08-08 12:09:23 +02:00
2005-04-16 15:20:36 -07:00
2011-01-16 13:47:07 -05:00
2011-12-05 10:21:45 -08:00
2019-08-05 14:20:47 +02:00
2005-04-16 15:20:36 -07:00
2019-08-02 15:14:10 +02:00
2010-08-21 23:40:14 -07:00
2011-12-13 09:26:45 +00:00
2020-09-23 17:32:10 +02:00
2006-10-03 23:01:26 +02:00
2010-08-04 21:53:17 -07:00
2011-11-02 16:07:02 -07:00
2011-01-13 08:03:21 -08:00
2011-03-31 11:26:23 -03:00
2007-10-19 11:53:41 -07:00
2005-04-16 15:20:36 -07:00
2019-08-05 09:13:24 +02:00
2011-10-03 09:57:10 -07:00
2011-03-31 11:26:23 -03:00
2009-06-11 21:36:12 -04:00
2012-03-20 21:29:38 -04:00
2014-01-16 18:16:12 -08:00
2012-01-03 22:55:07 -05:00
2010-02-10 17:47:17 -08:00
2005-04-16 15:20:36 -07:00
2011-01-14 02:36:43 +00:00
2010-09-08 18:16:55 -07:00
2019-08-05 14:20:47 +02:00
2009-11-04 09:50:58 -08:00
2019-08-05 14:20:47 +02:00
2010-05-11 10:09:47 +02:00
2019-08-02 15:14:10 +02:00
2012-03-28 18:30:03 +01:00
2005-04-16 15:20:36 -07:00
2010-06-03 03:21:52 -07:00
2008-02-07 08:42:34 -08:00
2009-04-08 14:33:38 -07:00
2012-03-08 11:38:50 -08:00
2012-03-12 22:19:13 +01:00
2012-01-09 09:33:57 +09:00
2011-07-30 08:44:19 -10:00
2020-09-23 17:37:32 +02:00
2019-08-05 09:13:25 +02:00
2019-08-05 14:20:47 +02:00
2011-03-31 11:26:23 -03:00
2011-10-03 09:57:10 -07:00
2014-07-22 14:33:44 -06:00
2005-04-16 15:20:36 -07:00
2011-07-26 16:49:47 -07:00
2005-04-16 15:20:36 -07:00
2011-12-13 09:26:45 +00:00
2008-07-20 17:12:37 -07:00
2010-08-09 16:48:44 -04:00
2011-08-16 00:16:49 -07:00
2012-05-16 13:27:23 -07:00
2020-09-23 18:05:05 +02:00
2005-04-16 15:20:36 -07:00
2013-10-07 12:28:53 +05:30
2019-08-05 14:20:47 +02:00
2020-12-10 23:24:37 +01:00
2008-10-13 09:51:40 -07:00
2010-03-25 17:18:43 -07:00
2019-08-05 14:20:47 +02:00
2019-08-06 12:26:30 +02:00
2012-03-22 19:43:43 -07:00
2006-03-31 12:18:56 -08:00
2010-11-29 08:55:25 +11:00
2010-11-29 08:55:22 +11:00
2006-09-28 17:53:59 -07:00
2013-11-17 11:31:01 +02:00
2012-04-10 22:39:17 -06:00
2009-11-10 20:54:38 -08:00
2013-03-05 15:10:35 -08:00
2005-04-16 15:20:36 -07:00
2010-05-19 22:40:47 -04:00
2007-12-26 19:36:35 -08:00
2005-04-16 15:20:36 -07:00
2012-04-11 09:36:00 +01:00
2005-04-16 15:20:36 -07:00
2013-12-26 14:33:32 -08:00
2019-08-05 14:20:47 +02:00
2011-03-31 11:26:23 -03:00
2011-10-03 09:57:10 -07:00
2019-08-05 14:20:47 +02:00
2011-03-31 11:26:23 -03:00
2011-01-13 08:03:24 -08:00
2005-04-16 15:20:36 -07:00
2019-08-02 15:14:10 +02:00
2010-04-06 20:35:58 +04:00
2019-08-06 08:16:29 +02:00