All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ben Greear <greearb@candelatech.com>
To: Rainer Suhm <automat@posteo.de>, Eric Dumazet <edumazet@google.com>
Cc: Johannes Berg <johannes@sipsolutions.net>,
	Jakub Kicinski <kuba@kernel.org>,
	Luca Coelho <luciano.coelho@intel.com>,
	netdev <netdev@vger.kernel.org>,
	linux-wireless@vger.kernel.org,
	Willem de Bruijn <willemb@google.com>
Subject: Re: net: tso: add UDP segmentation support: adds regression for ax200 upload
Date: Thu, 24 Dec 2020 09:48:55 -0800	[thread overview]
Message-ID: <661ea039-52c3-0f89-0f32-59d3f107bee5@candelatech.com> (raw)
In-Reply-To: <ea6013e9-424f-1a3a-0d70-1ca5041bc3a1@posteo.de>

On 12/21/20 12:01 PM, Rainer Suhm wrote:
> Am 21.12.20 um 20:14 schrieb Eric Dumazet:
>> On Mon, Dec 21, 2020 at 8:04 PM Eric Dumazet <edumazet@google.com> wrote:
>>>
>>> On Mon, Dec 21, 2020 at 7:46 PM Eric Dumazet <edumazet@google.com> wrote:
>>>>
>>>> On Sat, Dec 19, 2020 at 5:55 PM Ben Greear <greearb@candelatech.com> wrote:
>>>>>
>>>>> On 12/19/20 7:18 AM, Johannes Berg wrote:
>>>>>> On Fri, 2020-12-18 at 12:16 -0800, Jakub Kicinski wrote:
>>>>>>> On Thu, 17 Dec 2020 12:40:26 -0800 Ben Greear wrote:
>>>>>>>> On 12/17/20 10:20 AM, Eric Dumazet wrote:
>>>>>>>>> On Thu, Dec 17, 2020 at 7:13 PM Ben Greear <greearb@candelatech.com> wrote:
>>>>>>>>>> It is the iwlwifi/mvm logic that supports ax200.
>>>>>>>>>
>>>>>>>>> Let me ask again :
>>>>>>>>>
>>>>>>>>> I see two different potential call points :
>>>>>>>>>
>>>>>>>>> drivers/net/wireless/intel/iwlwifi/pcie/tx.c:1529:
>>>>>>>>> tso_build_hdr(skb, hdr_page->pos, &tso, data_left, !total_len);
>>>>>>>>> drivers/net/wireless/intel/iwlwifi/queue/tx.c:427:
>>>>>>>>> tso_build_hdr(skb, hdr_page->pos, &tso, data_left, !total_len);
>>>>>>>>>
>>>>>>>>> To the best of your knowledge, which one would be used in your case ?
>>>>>>>>>
>>>>>>>>> Both are horribly complex, I do not want to spend time studying two
>>>>>>>>> implementations.
>>>>>>>>
>>>>>>>> It is the queue/tx.c code that executes on my system, verified with
>>>>>>>> printk.
>>>>>>>
>>>>>>> Not sure why Intel's not on CC here.
>>>>>>
>>>>>> Heh :)
>>>>>>
>>>>>> Let's also add linux-wireless.
>>>>>>
>>>>>>> Luca, is the ax200 TSO performance regression with recent kernel on your
>>>>>>> radar?
>>>>>>
>>>>>> It wasn't on mine for sure, so far. But it's supposed to be Christmas
>>>>>> vacation, so haven't checked our bug tracker etc. I see Emmanuel was at
>>>>>> least looking at the bug report, but not sure what else happened yet.
>>>>>
>>>>> Not to bitch and moan too much, but even the most basic of testing would
>>>>> have shown this, how can testing be so poor on the ax200 driver?
>>>>>
>>>>> It even shows up with the out-of-tree ax200 driver.
>>>>>
>>>>>> Off the top of my head, I don't really see the issue. Does anyone have
>>>>>> the ability to capture the frames over the air (e.g. with another AX200
>>>>>> in monitor mode, load the driver with amsdu_size=3 module parameter to
>>>>>> properly capture A-MSDUs)?
>>>>>
>>>>> I can do that at some point, and likely it could be reproduced with an /n or /ac
>>>>> AP and those are a lot easier to sniff.
>>>>>
>>>>> Thanks,
>>>>> Ben
>>>>>
>>>>>
>>>>> -- 
>>>>> Ben Greear <greearb@candelatech.com>
>>>>> Candela Technologies Inc  http://www.candelatech.com
>>>>
>>>> It seems the problem comes from some skbs reaching the driver with
>>>> gso_type == 0,
>>>> meaning skb_is_gso_tcp() is fuzzy. (net/core/tso.c is only one of the
>>>> skb_is_gso_tcp() users)
>>>>
>>>> Local TCP stack should provide either SKB_GSO_TCPV4 or SKB_GSO_TCPV6
>>>> for GSO packets.
>>>>
>>>> So maybe the issue is coming from traffic coming from a VM through a
>>>> tun device or something,
>>>> and our handling of GSO_ROBUST / DODGY never cared about setting
>>>> SKB_GSO_TCPV4 or SKB_GSO_TCPV6 if not already given by user space ?
>>>>
>>>> Or a plain bug somewhere, possibly overwriting  gso_type with 0 or garbage...
>>>
>>> Oh well, iwl_mvm_tx_tso_segment() 'builds' a fake gso packet.
>>>
>>> I suspect this will fix the issue :
>>>
>>> diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
>>> b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
>>> index a983c215df310776ffe67f3b3ffa203eab609bfc..e7ad6367c88de4aff700c630d850760d1d3bf011
>>> 100644
>>> --- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
>>> +++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
>>> @@ -773,6 +773,7 @@ iwl_mvm_tx_tso_segment(struct sk_buff *skb,
>>> unsigned int num_subframes,
>>>
>>>          next = skb_gso_segment(skb, netdev_flags);
>>>          skb_shinfo(skb)->gso_size = mss;
>>> +       skb_shinfo(skb)->gso_type = ipv4 ? SKB_GSO_TCPV4 : SKB_GSO_TCPV6;
>>>          if (WARN_ON_ONCE(IS_ERR(next)))
>>>                  return -EINVAL;
>>>          else if (next)
>>
>>
>> Or more precisely :
>>
>> diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
>> b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
>> index a983c215df310776ffe67f3b3ffa203eab609bfc..11145bf29f3cbeefcce1a05cc81fd90978f2cbfe
>> 100644
>> --- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
>> +++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
>> @@ -773,6 +773,7 @@ iwl_mvm_tx_tso_segment(struct sk_buff *skb,
>> unsigned int num_subframes,
>>
>>          next = skb_gso_segment(skb, netdev_flags);
>>          skb_shinfo(skb)->gso_size = mss;
>> +       skb_shinfo(skb)->gso_type = ipv4 ? SKB_GSO_TCPV4 : SKB_GSO_TCPV6;
>>          if (WARN_ON_ONCE(IS_ERR(next)))
>>                  return -EINVAL;
>>          else if (next)
>> @@ -795,6 +796,7 @@ iwl_mvm_tx_tso_segment(struct sk_buff *skb,
>> unsigned int num_subframes,
>>
>>                  if (tcp_payload_len > mss) {
>>                          skb_shinfo(tmp)->gso_size = mss;
>> +                       skb_shinfo(tmp)->gso_type = ipv4 ?
>> SKB_GSO_TCPV4 : SKB_GSO_TCPV6;
>>                  } else {
>>                          if (qos) {
>>                                  u8 *qc;
>>
> 
> 
> This looks good to me.
> Transmission rate is in the expected range. iperf3 shows no retries anymore.
> 
> Here is my kernel log with the above changes applied, and the debug patches from Eric.

I tested this successfully as well.

Eric:  Thanks for the patch!

--Ben

-- 
Ben Greear <greearb@candelatech.com>
Candela Technologies Inc  http://www.candelatech.com

  reply	other threads:[~2020-12-24 17:49 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-16 23:09 net: tso: add UDP segmentation support: adds regression for ax200 upload Ben Greear
2020-12-16 23:59 ` Ben Greear
2020-12-17 10:11   ` Eric Dumazet
2020-12-17 17:56     ` Ben Greear
2020-12-17 18:07       ` Eric Dumazet
2020-12-17 18:13         ` Ben Greear
2020-12-17 18:20           ` Eric Dumazet
2020-12-17 20:40             ` Ben Greear
2020-12-18 20:16               ` Jakub Kicinski
2020-12-19 15:18                 ` Johannes Berg
2020-12-19 16:55                   ` Ben Greear
2020-12-21 18:46                     ` Eric Dumazet
2020-12-21 18:54                       ` Jakub Kicinski
2020-12-21 19:04                       ` Eric Dumazet
2020-12-21 19:14                         ` Eric Dumazet
2020-12-21 20:01                           ` Rainer Suhm
2020-12-24 17:48                             ` Ben Greear [this message]
2021-01-19  8:53                           ` Johannes Berg
2021-01-19 10:02                             ` Eric Dumazet
2021-01-25 14:57                               ` Johannes Berg
2021-01-25 14:58                                 ` Eric Dumazet

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=661ea039-52c3-0f89-0f32-59d3f107bee5@candelatech.com \
    --to=greearb@candelatech.com \
    --cc=automat@posteo.de \
    --cc=edumazet@google.com \
    --cc=johannes@sipsolutions.net \
    --cc=kuba@kernel.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=luciano.coelho@intel.com \
    --cc=netdev@vger.kernel.org \
    --cc=willemb@google.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.