From: John Fastabend <john.fastabend@gmail.com>
To: Neil Horman <nhorman@tuxdriver.com>
Cc: Jason Wang <jasowang@redhat.com>,
davem@davemloft.net, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org, mst@redhat.com,
John Fastabend <john.r.fastabend@intel.com>,
e1000-devel@lists.sourceforge.net
Subject: Re: [PATCH net 2/2] net: core: explicitly select a txq before doing l2 forwarding
Date: Mon, 06 Jan 2014 07:06:25 -0800 [thread overview]
Message-ID: <52CAC671.4040208@gmail.com> (raw)
In-Reply-To: <20140106124248.GB24280@hmsreliant.think-freely.org>
On 01/06/2014 04:42 AM, Neil Horman wrote:
> On Mon, Jan 06, 2014 at 11:21:07AM +0800, Jason Wang wrote:
>> Currently, the tx queue were selected implicitly in ndo_dfwd_start_xmit(). The
>> will cause several issues:
>>
>> - NETIF_F_LLTX was forced for macvlan device in this case which lead extra lock
>> contention.
>> - dev_hard_start_xmit() was called with NULL txq which bypasses the net device
>> watchdog
>> - dev_hard_start_xmit() does not check txq everywhere which will lead a crash
>> when tso is disabled for lower device.
>>
>> Fix this by explicitly introducing a select queue method just for l2 forwarding
>> offload (ndo_dfwd_select_queue), and introducing dfwd_direct_xmit() to do the
>> queue selecting and transmitting for l2 forwarding.
>>
>> With this fixes, NETIF_F_LLTX could be preserved for macvlan and there's no need
>> to check txq against NULL in dev_hard_start_xmit().
>>
>> In the future, it was also required for macvtap l2 forwarding support since it
>> provides a necessary synchronization method.
>>
>> Cc: John Fastabend <john.r.fastabend@intel.com>
>> Cc: Neil Horman <nhorman@tuxdriver.com>
>> Cc: e1000-devel@lists.sourceforge.net
>> Signed-off-by: Jason Wang <jasowang@redhat.com>
>
> Instead of creating another operation here to do special queue selection, why
> not just have ndo_dfwd_start_xmit include a pointer to a pointer in its argument
> list, so it can pass the txq it used back to the caller (dev_hard_start_xmit)?
> ndo_dfwd_start_xmit already knows which queue set to pick from (since their
> reserved for the device doing the transmitting). It seems more clear to me than
> creating a new netdevice operation.
>
> As for the crash issue, I'm not sure what you mean. Where in
> dev_hard_start_xmit would we need to check txq that we're not currently, and
> what crash results?
>
> Also, can you elaborate on what you mean by additional lock contention? What
> contention do you see that goes above and beyond the normal locking required by
> txq access? I suppose its extra locking above and beyond in the macvtap case,
> where you would otherwise never hit hardware, but that not the only use case,
> and I think the solution there is likely to add some code in the macvlan feature
> set handler so that NETIF_F_LLTX is cleared if you disable the hardware
> forwarding acceleration via ethtool.
>
NETIF_F_LLTX is cleared in macvlan_open() which should be used in the
macvtap case.
if (lowerdev->features & NETIF_F_HW_L2FW_DOFFLOAD) {
vlan->fwd_priv =
lowerdev->netdev_ops->ndo_dfwd_add_station(lowerdev, dev);
/* If we get a NULL pointer back, or if we get an error
* then we should just fall through to the non
accelerated path
*/
if (IS_ERR_OR_NULL(vlan->fwd_priv)) {
vlan->fwd_priv = NULL;
} else {
dev->features &= ~NETIF_F_LLTX;
return 0;
}
}
Thanks,
John
--
John Fastabend Intel Corporation
WARNING: multiple messages have this Message-ID (diff)
From: John Fastabend <john.fastabend@gmail.com>
To: Neil Horman <nhorman@tuxdriver.com>
Cc: mst@redhat.com, e1000-devel@lists.sourceforge.net,
netdev@vger.kernel.org, Jason Wang <jasowang@redhat.com>,
linux-kernel@vger.kernel.org,
John Fastabend <john.r.fastabend@intel.com>,
davem@davemloft.net
Subject: Re: [PATCH net 2/2] net: core: explicitly select a txq before doing l2 forwarding
Date: Mon, 06 Jan 2014 07:06:25 -0800 [thread overview]
Message-ID: <52CAC671.4040208@gmail.com> (raw)
In-Reply-To: <20140106124248.GB24280@hmsreliant.think-freely.org>
On 01/06/2014 04:42 AM, Neil Horman wrote:
> On Mon, Jan 06, 2014 at 11:21:07AM +0800, Jason Wang wrote:
>> Currently, the tx queue were selected implicitly in ndo_dfwd_start_xmit(). The
>> will cause several issues:
>>
>> - NETIF_F_LLTX was forced for macvlan device in this case which lead extra lock
>> contention.
>> - dev_hard_start_xmit() was called with NULL txq which bypasses the net device
>> watchdog
>> - dev_hard_start_xmit() does not check txq everywhere which will lead a crash
>> when tso is disabled for lower device.
>>
>> Fix this by explicitly introducing a select queue method just for l2 forwarding
>> offload (ndo_dfwd_select_queue), and introducing dfwd_direct_xmit() to do the
>> queue selecting and transmitting for l2 forwarding.
>>
>> With this fixes, NETIF_F_LLTX could be preserved for macvlan and there's no need
>> to check txq against NULL in dev_hard_start_xmit().
>>
>> In the future, it was also required for macvtap l2 forwarding support since it
>> provides a necessary synchronization method.
>>
>> Cc: John Fastabend <john.r.fastabend@intel.com>
>> Cc: Neil Horman <nhorman@tuxdriver.com>
>> Cc: e1000-devel@lists.sourceforge.net
>> Signed-off-by: Jason Wang <jasowang@redhat.com>
>
> Instead of creating another operation here to do special queue selection, why
> not just have ndo_dfwd_start_xmit include a pointer to a pointer in its argument
> list, so it can pass the txq it used back to the caller (dev_hard_start_xmit)?
> ndo_dfwd_start_xmit already knows which queue set to pick from (since their
> reserved for the device doing the transmitting). It seems more clear to me than
> creating a new netdevice operation.
>
> As for the crash issue, I'm not sure what you mean. Where in
> dev_hard_start_xmit would we need to check txq that we're not currently, and
> what crash results?
>
> Also, can you elaborate on what you mean by additional lock contention? What
> contention do you see that goes above and beyond the normal locking required by
> txq access? I suppose its extra locking above and beyond in the macvtap case,
> where you would otherwise never hit hardware, but that not the only use case,
> and I think the solution there is likely to add some code in the macvlan feature
> set handler so that NETIF_F_LLTX is cleared if you disable the hardware
> forwarding acceleration via ethtool.
>
NETIF_F_LLTX is cleared in macvlan_open() which should be used in the
macvtap case.
if (lowerdev->features & NETIF_F_HW_L2FW_DOFFLOAD) {
vlan->fwd_priv =
lowerdev->netdev_ops->ndo_dfwd_add_station(lowerdev, dev);
/* If we get a NULL pointer back, or if we get an error
* then we should just fall through to the non
accelerated path
*/
if (IS_ERR_OR_NULL(vlan->fwd_priv)) {
vlan->fwd_priv = NULL;
} else {
dev->features &= ~NETIF_F_LLTX;
return 0;
}
}
Thanks,
John
--
John Fastabend Intel Corporation
------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT
organizations don't have a clear picture of how application performance
affects their revenue. With AppDynamics, you get 100% visibility into your
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk
_______________________________________________
E1000-devel mailing list
E1000-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/e1000-devel
To learn more about Intel® Ethernet, visit http://communities.intel.com/community/wired
next prev parent reply other threads:[~2014-01-06 15:06 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-06 3:21 [PATCH net 1/2] macvlan: forbid L2 fowarding offload for macvtap Jason Wang
2014-01-06 3:21 ` [PATCH net 2/2] net: core: explicitly select a txq before doing l2 forwarding Jason Wang
2014-01-06 3:21 ` Jason Wang
2014-01-06 12:04 ` [E1000-devel] " Jeff Kirsher
2014-01-06 12:04 ` Jeff Kirsher
2014-01-06 12:42 ` Neil Horman
2014-01-06 15:06 ` John Fastabend [this message]
2014-01-06 15:06 ` John Fastabend
2014-01-06 15:29 ` Neil Horman
2014-01-06 15:29 ` Neil Horman
2014-01-07 3:42 ` Jason Wang
2014-01-07 3:42 ` Jason Wang
2014-01-07 13:17 ` Neil Horman
2014-01-08 3:21 ` Jason Wang
2014-01-08 3:21 ` Jason Wang
2014-01-08 14:40 ` Neil Horman
2014-01-09 8:28 ` Jason Wang
2014-01-09 8:28 ` Jason Wang
2014-01-09 11:53 ` Neil Horman
2014-01-09 11:53 ` Neil Horman
2014-01-07 8:22 ` John Fastabend
2014-01-07 8:37 ` John Fastabend
2014-01-06 7:35 ` [PATCH net 1/2] macvlan: forbid L2 fowarding offload for macvtap John Fastabend
2014-01-06 7:54 ` Jason Wang
2014-01-06 12:26 ` Neil Horman
2014-01-07 3:10 ` Jason Wang
2014-01-07 5:15 ` John Fastabend
2014-01-07 6:22 ` Jason Wang
2014-01-07 7:26 ` John Fastabend
2014-01-07 9:00 ` Jason Wang
2014-01-08 12:55 ` Michael S. Tsirkin
2014-01-08 19:05 ` John Fastabend
2014-01-09 7:17 ` Michael S. Tsirkin
2014-01-09 8:55 ` Jason Wang
2014-01-09 21:39 ` Stephen Hemminger
2014-01-09 22:03 ` Michael S. Tsirkin
2014-01-09 22:20 ` Stephen Hemminger
2014-01-10 7:06 ` Jason Wang
2014-01-10 16:40 ` Vlad Yasevich
2014-01-07 5:16 ` John Fastabend
2014-01-06 20:47 ` David Miller
2014-01-07 3:17 ` Jason Wang
2014-01-07 5:57 ` David Miller
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=52CAC671.4040208@gmail.com \
--to=john.fastabend@gmail.com \
--cc=davem@davemloft.net \
--cc=e1000-devel@lists.sourceforge.net \
--cc=jasowang@redhat.com \
--cc=john.r.fastabend@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mst@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=nhorman@tuxdriver.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.