From: Ben Greear <greearb@candelatech.com>
To: Eric Dumazet <eric.dumazet@gmail.com>
Cc: NetDev <netdev@vger.kernel.org>,
robert@herjulf.net, "David S. Miller" <davem@davemloft.net>
Subject: Re: pktgen and spin_lock_bh in xmit path
Date: Tue, 20 Oct 2009 22:00:16 -0700 [thread overview]
Message-ID: <4ADE9560.5050500@candelatech.com> (raw)
In-Reply-To: <4ADE873F.3030903@gmail.com>
Eric Dumazet wrote:
> pktgen should not use "clone XXX" pkts if macvlan is used (or any other driver
> that ultimatly calls dev_queue_xmit() and queue packet), since skb queue anchor
> is shared and would be overwritten.
>
> After some thoughts, I believe user is in error :)
I tried to explain in my original post: The problem arises when
when the hard-start-xmit fails with NETDEV_TX_BUSY. Part of the
hard-start-xmit logic for virtual devices can call dev_queue_xmit, which
can ultimately
change the queue mapping and yet may still return NETDEV_TX_BUSY.
pktgen would try to resend this skb next loop, and this is where it would
blow up.
I have a patched macvlan logic and a patched dev queue xmit logic that
allows
me to return NETDEV_TX_BUSY when underlying device fails to transmit.
It may be that my hacked macvlan is the only virtual device that could ever
return NETDEV_TX_BUSY, and if that is the case, I don't think the bug
could ever be hit in official kernel code. My opinion is that the
current pktgen code makes
too many assumptions, so unless there is a performance penalty, I still
think it should be cleaned up. But, I may be too paranoid.
> 1) Only way to use "clone XXXX" pkts is when using real device.
>
Agreed, and I was not cloning pkts on the mac-vlan interface.
> 2) Also, using macvlan in pktgen is sub-optimal, since you can already put any
> MAC addresses in pktgen pkts, you dont need to go through macvlan layer.
>
It's sub-optimal for massive pkt pushing, but still useful for sending
multiple distinct flows
across a single physical wire.
> 3) If ixgbe overwrites skb->queue_mapping to current cpu, you should setup pktgen
> queue_map_min and queue_map_max to match you cpu number, or use QUEUE_MAP_CPU pktgen flag
> Or else, pktgen wont get the appropriate txq (and lock) before calling driver start_xmit()
>
The hard-start-xmit path doesn't call the driver's queue-mapping logic,
so you
only get that fun when transmitting through mac-vlans (or .1q vlans,
etc). There appears to be
no watchdog for virtual devices, and the dev_queue_xmit path updates the
proper txq, so, as long as you
aren't using that +1 variant of the skb set queue map logic in pktgen, I
think you will be fine. The
current code is fine in this manner, but your patch broke it w/out the
second patch to remove the +1
logic.
Thanks,
Ben
--
Ben Greear <greearb@candelatech.com>
Candela Technologies Inc http://www.candelatech.com
next prev parent reply other threads:[~2009-10-21 5:00 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-10-20 3:38 pktgen and spin_lock_bh in xmit path Ben Greear
2009-10-20 3:48 ` Eric Dumazet
2009-10-20 4:52 ` Ben Greear
2009-10-20 17:37 ` Ben Greear
2009-10-20 17:44 ` Eric Dumazet
2009-10-20 17:54 ` Ben Greear
2009-10-20 18:35 ` Eric Dumazet
2009-10-20 18:54 ` Eric Dumazet
2009-10-20 20:16 ` Ben Greear
2009-10-20 21:10 ` Ben Greear
2009-10-20 21:22 ` Eric Dumazet
2009-10-20 21:30 ` Ben Greear
2009-10-20 21:57 ` Eric Dumazet
2009-10-20 23:17 ` Ben Greear
2009-10-21 3:05 ` Ben Greear
2009-10-21 3:12 ` Eric Dumazet
2009-10-21 3:59 ` Eric Dumazet
2009-10-21 5:00 ` Ben Greear [this message]
2009-10-21 5:14 ` Eric Dumazet
2009-10-21 5:40 ` Ben Greear
2009-10-21 5:12 ` Krishna Kumar2
2009-10-21 5:32 ` Ben Greear
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=4ADE9560.5050500@candelatech.com \
--to=greearb@candelatech.com \
--cc=davem@davemloft.net \
--cc=eric.dumazet@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=robert@herjulf.net \
/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.