On Fri, 02 May 2014 07:00:00 -0700 John Fastabend <john.r.fastab...@intel.com> wrote:
> On 5/2/2014 6:19 AM, Jesper Dangaard Brouer wrote: > > On Fri, 2 May 2014 15:18:12 +0800 > > Zhouyi Zhou <zhouzho...@gmail.com> wrote: > > > >> As http://www.spinics.net/lists/netdev/msg165015.html > >> pktgen generates shared packet through vlan interface will cause > >> oops because of duplicate entering tc queue. > >> > >> Try to solve this problem by means of packet clone instead of sharing. > > > > I really don't like adding this stuff to the fast path of pktgen. > > > > Why would you use pktgen on a VLAN? > > Its a good way to test qdiscs. When you run pktgen over the VLAN > you exercise the lower devices qdisc. I do (personally) need a faster way/tool to exercise the qdisc path. I'm currently using trafgen, but it is not fast enough for my 10G testing. Perhaps we could add a pktgen option, that explicitly enable transmitting on qdisc path. And when adding a VLAN device, auto enable that mode? > Although I never submitted a patch like this because I figured it > was a corner case and we would want to keep the hotpath clean. I'm worried about the overhead of skb_clone() on for every pktgen pkt_dev->clone_skb counter... does it "invalidate" using the pktgen CLONE_SKB counter (kind-of confusing pktgen uses "clone_skb" for its counter). > > Why don't you use the "vlan_id" feature available in pktgen, and send > > in the lower real device? Guess, we can use it for testing/stressing the qdisc code path. > >> Signed-off-by: Zhouyi Zhou <yizhouz...@ict.ac.cn> > >> --- > >> net/core/pktgen.c | 20 +++++++++++++++++--- > >> 1 files changed, 17 insertions(+), 3 deletions(-) > >> > >> diff --git a/net/core/pktgen.c b/net/core/pktgen.c [...] > >> @@ -3347,8 +3348,18 @@ static void pktgen_xmit(struct pktgen_dev *pkt_dev) > >> pkt_dev->last_ok = 0; > >> goto unlock; > >> } > >> - atomic_inc(&(pkt_dev->skb->users)); > >> - ret = (*xmit)(pkt_dev->skb, odev); > >> + > >> + if (pkt_dev->clone_skb && is_vlan_dev(odev)) { > >> + nskb = skb_clone(pkt_dev->skb, GFP_ATOMIC); > >> + ret = -ENOMEM; > >> + if (nskb) > >> + ret = (*xmit)(nskb, odev); > >> + else > >> + nskb = ERR_PTR(ret); > >> + } else { > >> + atomic_inc(&(pkt_dev->skb->users)); > >> + ret = (*xmit)(pkt_dev->skb, odev); > >> + } -- Best regards, Jesper Dangaard Brouer MSc.CS, Sr. Network Kernel Developer at Red Hat Author of http://www.iptv-analyzer.org LinkedIn: http://www.linkedin.com/in/brouer -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/