aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation
diff options
context:
space:
mode:
authorEric Dumazet <edumazet@google.com>2013-08-27 08:46:32 -0400
committerDavid S. Miller <davem@davemloft.net>2013-08-29 15:50:06 -0400
commit95bd09eb27507691520d39ee1044d6ad831c1168 (patch)
treee05045cc6418ce08aa87d5f8c17366a7fa672f3c /Documentation
parentb800c3b966bcf004bd8592293a49ed5cb7ea67a9 (diff)
tcp: TSO packets automatic sizing
After hearing many people over past years complaining against TSO being bursty or even buggy, we are proud to present automatic sizing of TSO packets. One part of the problem is that tcp_tso_should_defer() uses an heuristic relying on upcoming ACKS instead of a timer, but more generally, having big TSO packets makes little sense for low rates, as it tends to create micro bursts on the network, and general consensus is to reduce the buffering amount. This patch introduces a per socket sk_pacing_rate, that approximates the current sending rate, and allows us to size the TSO packets so that we try to send one packet every ms. This field could be set by other transports. Patch has no impact for high speed flows, where having large TSO packets makes sense to reach line rate. For other flows, this helps better packet scheduling and ACK clocking. This patch increases performance of TCP flows in lossy environments. A new sysctl (tcp_min_tso_segs) is added, to specify the minimal size of a TSO packet (default being 2). A follow-up patch will provide a new packet scheduler (FQ), using sk_pacing_rate as an input to perform optional per flow pacing. This explains why we chose to set sk_pacing_rate to twice the current rate, allowing 'slow start' ramp up. sk_pacing_rate = 2 * cwnd * mss / srtt v2: Neal Cardwell reported a suspect deferring of last two segments on initial write of 10 MSS, I had to change tcp_tso_should_defer() to take into account tp->xmit_size_goal_segs Signed-off-by: Eric Dumazet <edumazet@google.com> Cc: Neal Cardwell <ncardwell@google.com> Cc: Yuchung Cheng <ycheng@google.com> Cc: Van Jacobson <vanj@google.com> Cc: Tom Herbert <therbert@google.com> Acked-by: Yuchung Cheng <ycheng@google.com> Acked-by: Neal Cardwell <ncardwell@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'Documentation')
-rw-r--r--Documentation/networking/ip-sysctl.txt9
1 files changed, 9 insertions, 0 deletions
diff --git a/Documentation/networking/ip-sysctl.txt b/Documentation/networking/ip-sysctl.txt
index a2be556032c9..1cb3aeb4baff 100644
--- a/Documentation/networking/ip-sysctl.txt
+++ b/Documentation/networking/ip-sysctl.txt
@@ -482,6 +482,15 @@ tcp_syn_retries - INTEGER
482tcp_timestamps - BOOLEAN 482tcp_timestamps - BOOLEAN
483 Enable timestamps as defined in RFC1323. 483 Enable timestamps as defined in RFC1323.
484 484
485tcp_min_tso_segs - INTEGER
486 Minimal number of segments per TSO frame.
487 Since linux-3.12, TCP does an automatic sizing of TSO frames,
488 depending on flow rate, instead of filling 64Kbytes packets.
489 For specific usages, it's possible to force TCP to build big
490 TSO frames. Note that TCP stack might split too big TSO packets
491 if available window is too small.
492 Default: 2
493
485tcp_tso_win_divisor - INTEGER 494tcp_tso_win_divisor - INTEGER
486 This allows control over what percentage of the congestion window 495 This allows control over what percentage of the congestion window
487 can be consumed by a single TSO frame. 496 can be consumed by a single TSO frame.