linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Arend van Spriel <arend@broadcom.com>
To: Eric Dumazet <eric.dumazet@gmail.com>
Cc: Michal Kazior <michal.kazior@tieto.com>,
	linux-wireless <linux-wireless@vger.kernel.org>,
	Network Development <netdev@vger.kernel.org>,
	<eyalpe@dev.mellanox.co.il>
Subject: Re: Throughput regression with `tcp: refine TSO autosizing`
Date: Fri, 30 Jan 2015 11:29:28 +0100	[thread overview]
Message-ID: <54CB5D08.2070906@broadcom.com> (raw)
In-Reply-To: <1422537297.21689.15.camel@edumazet-glaptop2.roam.corp.google.com>

On 01/29/15 14:14, Eric Dumazet wrote:
> On Thu, 2015-01-29 at 12:48 +0100, Michal Kazior wrote:
>> Hi,
>>
>> I'm not subscribed to netdev list and I can't find the message-id so I
>> can't reply directly to the original thread `BW regression after "tcp:
>> refine TSO autosizing"`.
>>
>> I've noticed a big TCP performance drop with ath10k
>> (drivers/net/wireless/ath/ath10k) on 3.19-rc5. Instead of 500mbps I
>> get 250mbps in my testbed.
>>
>> After bisecting I ended up at `tcp: refine TSO autosizing`. Reverting
>> `tcp: refine TSO autosizing` and `tcp: Do not apply TSO segment limit
>> to non-TSO packets` (for conflict free reverts) fixes the problem.
>>
>> My testing setup is as follows:
>>
>>   a) ath10k AP, github.com/kvalo/ath/tree/master 3.19-rc5, w/ reverts
>>   b) ath10k STA connected to (a), github.com/kvalo/ath/tree/master
>> 3.19-rc5, w/ reverts
>>   c) (b) w/o reverts
>>
>> Devices are 3x3 (AP) and 2x2 (Client) and are RF cabled. 11ac@80MHz
>> 2x2 has 866mbps modulation rate. In practice this should deliver
>> ~700mbps of real UDP traffic.
>>
>> Here are some numbers:
>>
>> UDP: (b) ->  (a): 672mbps
>> UDP: (a) ->  (b): 687mbps
>> TCP: (b) ->  (a): 526mbps
>> TCP: (a) ->  (b): 500mbps
>>
>> UDP: (c) ->  (a): 669mbps*
>> UDP: (a) ->  (c): 689mbps*
>> TCP: (c) ->  (a): 240mbps**
>> TCP: (a) ->  (c): 490mbps*
>>
>> * no changes/within error margin
>> ** the performance drop
>>
>> I'm using iperf:
>>    UDP: iperf -i1 -s -u vs iperf -i1 -c XX -u -B 200M -P5 -t 20
>>    TCP: iperf -i1 -s vs iperf -i1 -c XX -P5 -t 20
>>
>> Result values were obtained at the receiver side.
>>
>> Iperf reports a few frames lost and out-of-order at each UDP test
>> start (during first second) but later has no packet loss and no
>> out-of-order. This shouldn't have any effect on a TCP session, right?
>>
>> The device delivers batched up tx/rx completions (no way to change
>> that). I suppose this could be an issue for timing sensitive
>> algorithms. Also keep in mind 802.11n and 802.11ac devices have frame
>> aggregation windows so there's an inherent extra (and non-uniform)
>> latency when compared to, e.g. ethernet devices.
>>
>> The driver doesn't have GRO. I have an internal patch which implements
>> it. It improves overall TCP traffic (more stable, up to 600mbps TCP
>> which is ~100mbps more than without GRO) but the TCP: (c) ->  (a)
>> performance drop remains unaffected regardless.
>>
>> I've tried applying stretch ACK patchset (v2) on both machines and
>> re-run the above tests. I got no measurable difference in performance.
>>
>> I've also run these tests with iwlwifi 7260 (also a 2x2) as (b) and
>> (c). It didn't seem to be affected by the TSO patch at all (it runs at
>> ~360mbps of TCP regardless of the TSO patch).
>>
>> Any hints/ideas?
>>
>
> Hi Michal
>
> This patch restored original TSQ behavior, because the 1ms worth of data
> per flow had totally destroyed TSQ intent.
>
> vi +630 Documentation/networking/ip-sysctl.txt
>
> tcp_limit_output_bytes - INTEGER
>          Controls TCP Small Queue limit per tcp socket.
>          TCP bulk sender tends to increase packets in flight until it
>          gets losses notifications. With SNDBUF autotuning, this can
>          result in a large amount of packets queued in qdisc/device
>          on the local machine, hurting latency of other flows, for
>          typical pfifo_fast qdiscs.
>          tcp_limit_output_bytes limits the number of bytes on qdisc
>          or device to reduce artificial RTT/cwnd and reduce bufferbloat.
>          Default: 131072
>
> This is why I suggested to Eyal Perry to change the TX interrupt
> mitigation parameters as in :
>
> ethtool -C eth0 tx-frames 4 rx-frames 4
>
> With this change and the stretch ack fixes, I got 37Gbps of throughput
> on a single flow, on a 40Gbit NIC (mlx4)
>
> If a driver needs to buffer more than tcp_limit_output_bytes=131072 to
> get line rate, I suggest that you either :
>
> 1) tweak tcp_limit_output_bytes, but its not practical from a driver.
>
> 2) change the driver, knowing what are its exact requirements, by
> removing a fraction of skb->truesize at ndo_start_xmit() time as in :
>
> if ((skb->destructor == sock_wfree ||
>       skb->restuctor == tcp_wfree)&&
>      skb->sk) {
>      u32 fraction = skb->truesize / 2;
>
>      skb->truesize -= fraction;
>      atomic_sub(fraction,&skb->sk->sk_wmem_alloc);
> }

Hi Eric,

Your suggestions are still based on the fact that you consider wireless 
networking to be similar to ethernet, but as Michal indicated there are 
some fundamental differences starting with CSMA/CD versus CSMA/CA. Also 
the medium conditions are far from comparable. There is no shielding so 
it needs to deal with interference and dynamically drops the link rate 
so transmission of packets can take several milliseconds. Then with 11n 
they came up with aggregation with sends up to 64 packets in a single 
transmit over the air at worst case 6.5 Mbps (if I am not mistaken). The 
parameter value for tcp_limit_output_bytes of 131072 means that it 
allows queuing for about 1ms on a 1Gbps link, but I hope you can see 
this is not realistic for dealing with all variances of the wireless 
medium/standard. I suggested this as topic for the wireless workshop in 
Otawa [1], but I can not attend there. Still hope that there will be 
some discussions to get more awareness.

Regards,
Arend

[1] http://mid.gmane.org/54BE9791.1070706@broadcom.com

  reply	other threads:[~2015-01-30 10:29 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-29 11:48 Throughput regression with `tcp: refine TSO autosizing` Michal Kazior
2015-01-29 13:14 ` Eric Dumazet
2015-01-30 10:29   ` Arend van Spriel [this message]
2015-01-30 13:19     ` Eric Dumazet
2015-01-30 13:47       ` Arend van Spriel
2015-01-30 14:37         ` Eric Dumazet
     [not found]         ` <CAA93jw5fqhz0Hiw74L2GXgtZ9JsMg+NtYydKxKzGDrvQcZn4hA@mail.gmail.com>
     [not found]           ` <CAA93jw7b0E9jjQYXrEPzjLLC9j8xNC0TFYXpWVtgFameJaNBdw@mail.gmail.com>
     [not found]             ` <1422741065.199624134@apps.rackspace.com>
     [not found]               ` <CAPp0ZBb2nkA6Y0s=W0kw=zvyn0wi0NMBRsBCw_xcD61ScOmgQg@mail.gmail.com>
     [not found]                 ` <CAA_e5Z46Bu+zZZFzf_ejzA35Gw3g1_OG85yv6yd7MpbwZcE-nw@mail.gmail.com>
     [not found]                   ` <CAA93jw7=oTex0Mp-0ThvuDRUnfR0N8tzdOQ8DD7QYWphp1b=4w@mail.gmail.com>
     [not found]                     ` <CAJq5cE3ETbpEtecFHmhgHQveNRUhVfrzjTOygHm-TRCTwHNyKA@mail.gmail.com>
     [not found]                       ` <1422801814.796219699@apps.rackspace.com>
     [not found]                         ` <CAA_e5Z5PfimZeC5cqSk_xFpKOBeZ74htLeEdwtKieAYWJaEX+A@mail.gmail.com>
2015-02-02  4:04                           ` [Cerowrt-devel] Fwd: " Avery Pennarun
2015-02-02 15:25                             ` Jim Gettys
2015-02-02  4:21                         ` Avery Pennarun
2015-02-02  7:07                           ` David Lang
2015-01-30 13:39   ` Michal Kazior
2015-01-30 14:40     ` Eric Dumazet
2015-02-02 10:27       ` Michal Kazior
2015-02-02 18:52         ` Eric Dumazet
2015-02-02 21:25           ` Ben Greear
2015-02-02 23:06             ` Eric Dumazet
2015-02-03  9:00               ` Michal Kazior
2015-02-03  1:18           ` Eric Dumazet
2015-02-03 11:50             ` Michal Kazior
2015-02-03 14:27               ` Eric Dumazet
2015-02-03 15:03                 ` Eric Dumazet
2015-02-04 11:35                 ` Michal Kazior
2015-02-04 11:57                   ` Eric Dumazet
2015-02-04 12:22                     ` Michal Kazior
2015-02-04 12:38                       ` Eric Dumazet
2015-02-04 12:53                         ` Michal Kazior
2015-02-04 12:55                           ` Johannes Berg
2015-02-04 13:16                           ` Eric Dumazet
2015-02-04 13:29                             ` Eric Dumazet
2015-02-04 21:11                               ` Eric Dumazet
2015-02-05  6:46                                 ` Michal Kazior
2015-02-05 13:03                                   ` Eric Dumazet
2015-02-05  8:38                                 ` Michal Kazior
2015-02-05 12:57                                   ` Eric Dumazet
2015-02-05 13:19                                     ` Eric Dumazet
2015-02-05 13:33                                       ` Eric Dumazet
2015-02-05 13:44                                       ` Michal Kazior
2015-02-05 14:41                                         ` Eric Dumazet
2015-02-05 17:10                                           ` Eric Dumazet
2015-02-06  9:42                                             ` Michal Kazior
2015-02-06 13:40                                               ` Eric Dumazet
2015-02-06 13:53                                                 ` Eric Dumazet
2015-02-06 14:09                                                   ` Michal Kazior
2015-02-09 13:47                                                     ` Michal Kazior
2015-02-09 15:11                                                       ` Eric Dumazet
2015-02-10 10:33                                                         ` Michal Kazior
2015-02-10 12:54                                                           ` Eric Dumazet
2015-02-10 13:05                                                             ` Eric Dumazet
2015-02-10 13:14                                                           ` Eric Dumazet
2015-02-11  8:33                                                             ` Michal Kazior
2015-02-11 13:17                                                               ` Eric Dumazet
2015-02-12  7:16                                                                 ` Michal Kazior
2015-02-10 14:19                                                           ` Johannes Berg
2015-02-10 15:09                                                             ` Eric Dumazet
2015-02-11  8:57                                                             ` Michal Kazior
2015-02-12  7:48                                                               ` Michal Kazior
2015-02-12  8:33                                                                 ` Dave Taht
2015-02-24 10:24                                                                 ` Johannes Berg
2015-02-24 10:30                                                                   ` Johannes Berg
2015-02-24 10:59                                                                     ` Johannes Berg
2015-03-31 11:08                                                         ` Johannes Berg
2015-02-06 14:10                                                   ` Eric Dumazet
2015-02-06 14:31                                                     ` David Laight
2015-02-06 15:02                                                       ` Eric Dumazet
2015-02-06 14:08                                                 ` Michal Kazior
2015-02-06 14:35                                                   ` Eric Dumazet
2015-02-06 17:48                                                     ` Rick Jones
2015-02-05 14:48                                         ` Eric Dumazet
2015-02-06  9:39                                           ` Nicolas Cavallari
2015-02-05 19:50                                         ` Dave Taht
2015-02-06  9:57                                           ` Michal Kazior
2015-02-03  8:44           ` Michal Kazior

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=54CB5D08.2070906@broadcom.com \
    --to=arend@broadcom.com \
    --cc=eric.dumazet@gmail.com \
    --cc=eyalpe@dev.mellanox.co.il \
    --cc=linux-wireless@vger.kernel.org \
    --cc=michal.kazior@tieto.com \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).