From: Ben Hutchings <bhutchings@solarflare.com>
To: Neil Horman <nhorman@tuxdriver.com>
Cc: netdev@vger.kernel.org, Jay Vosburgh <fubar@us.ibm.com>,
Andy Gospodarek <andy@greyhouse.net>,
"David S. Miller" <davem@davemloft.net>
Subject: Re: [PATCH] bonding: reset queue mapping prior to transmission to physical device
Date: Thu, 02 Jun 2011 20:09:49 +0100 [thread overview]
Message-ID: <1307041789.2812.27.camel@bwh-desktop> (raw)
In-Reply-To: <20110602185659.GA2749@hmsreliant.think-freely.org>
On Thu, 2011-06-02 at 14:56 -0400, Neil Horman wrote:
> On Thu, Jun 02, 2011 at 07:35:53PM +0100, Ben Hutchings wrote:
> > On Thu, 2011-06-02 at 14:03 -0400, Neil Horman wrote:
> > > The bonding driver is multiqueue enabled, in which each queue represents a slave
> > > to enable optional steering of output frames to given slaves against the default
> > > output policy. However, it needs to reset the skb->queue_mapping prior to
> > > queuing to the physical device or the physical slave (if it is multiqueue) could
> > > wind up transmitting on an unintended tx queue (one that was reserved for
> > > specific traffic classes for instance)
[...]
> > So far as I can see, this has no effect, because dev_queue_xmit() always
> > sets queue_mapping (in dev_pick_tx()).
> >
> it resets the queue mapping exactly as you would expect it to. bonding is a
> multiqueue enabled device and selects a potentially non-zero queue based on the
> output of bond_select_queue.
>
> > What is the problem you're seeing?
> >
> The problem is exctly that. dev_pick_tx() on the bond device sets the
> queue_mapping as per the result of bond_select_queue (the ndo_select_queue
> method for the bonding driver). The implementation there is based on the use of
> tc with bonding, so that output slaves can be selected for certain types of
> traffic. But when that mechanism is used, skb->queue_mapping is preserved when
> the bonding driver queues the frame to the underlying slave. This denies the
> slave (if its also a multiqueue device) the opportunity to reselect the queue
> properly, because of this call path:
>
> bond_queue_xmit
> dev_queue_xmit(slave_dev)
> dev_pick_tx()
> skb_tx_hash()
> __skb_tx_hash()
>
> __skb_tx_hash sees that skb_queue_recorded returns true, and assigns a hardware queue mapping
> based on what the bonding driver chose using its own internal logic. Since
> bonding uses the multiqueue infrastructure to do slave output selection without
> any regard for slave output queue selection, it seems to me we should really
> reset the queue mapping to zero so the slave device can pick its own tx queue.
So you're effectively clearing the *RX queue* number (as this is before
dev_pick_tx()) in order to influence TX queue selection.
Here, the bonding device seems to be behaving as a forwarding device.
If TX queue selection can go wrong for certain combinations of queue
configuration when forwarding, then this is a problem for IP forwarding
and bridging as well, isn't it?
Ben.
--
Ben Hutchings, Senior Software Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.
next prev parent reply other threads:[~2011-06-02 19:09 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-02 18:03 [PATCH] bonding: reset queue mapping prior to transmission to physical device Neil Horman
2011-06-02 18:35 ` Ben Hutchings
2011-06-02 18:56 ` Neil Horman
2011-06-02 19:09 ` Ben Hutchings [this message]
2011-06-02 19:46 ` Neil Horman
2011-06-02 19:52 ` Nicolas de Pesloüan
2011-06-02 20:04 ` David Miller
2011-06-02 20:13 ` Nicolas de Pesloüan
2011-06-02 20:46 ` David Miller
2011-06-02 20:51 ` Ben Hutchings
2011-06-02 21:10 ` David Miller
2011-06-02 20:13 ` Ben Hutchings
2011-06-03 1:16 ` Neil Horman
2011-06-02 19:59 ` David Miller
2011-06-02 20:07 ` David Miller
2011-06-02 20:22 ` Nicolas de Pesloüan
2011-06-03 1:04 ` Neil Horman
2011-06-03 13:26 ` [PATCH] bonding: reset queue mapping prior to transmission to physical device (v2) Neil Horman
2011-06-03 14:43 ` Ben Hutchings
2011-06-03 17:32 ` [PATCH] bonding: reset queue mapping prior to transmission to physical device (v3) Neil Horman
2011-06-03 17:59 ` Ben Hutchings
2011-06-03 18:36 ` Neil Horman
2011-06-03 19:12 ` Ben Hutchings
2011-06-03 19:23 ` Neil Horman
2011-06-03 19:24 ` [PATCH] bonding: reset queue mapping prior to transmission to physical device (v4) Neil Horman
2011-06-03 19:48 ` Eric Dumazet
2011-06-03 19:57 ` Neil Horman
2011-06-03 20:05 ` Eric Dumazet
2011-06-03 20:35 ` [PATCH] bonding: reset queue mapping prior to transmission to physical device (v5) Neil Horman
2011-06-03 23:31 ` Jay Vosburgh
2011-06-05 21:32 ` David Miller
2011-06-03 18:06 ` [PATCH] bonding: reset queue mapping prior to transmission to physical device (v3) Jay Vosburgh
2011-06-03 14:59 ` [PATCH] bonding: reset queue mapping prior to transmission to physical device (v2) Vitalii Demianets
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=1307041789.2812.27.camel@bwh-desktop \
--to=bhutchings@solarflare.com \
--cc=andy@greyhouse.net \
--cc=davem@davemloft.net \
--cc=fubar@us.ibm.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 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).