Your change isn't going to have much effect because most packets don't
go through the translation process.  If you try to force all packets
through translation, it will kill performance.

I think that you should read this paper that describes the various
caching layers in Open vSwitch:
        http://openvswitch.org/support/papers/nsdi2015.pdf

On Mon, Oct 12, 2015 at 11:56:03AM -0500, David Evans wrote:
> Hi Ben,
> 
> When i use the OFPGT11_ALL group action, the packets for a  flow will be sent 
> out all buckets in a group. (in my case all the buckets are ports to transmit 
> out)
> 
> I added a group_bucket_count to the context 
> and 
> in xlate_all_group fn the following.
> 
>     group_dpif_get_buckets(group, &buckets);
> +    if(ctx->group_bucket_count == 0){
> +     LIST_FOR_EACH (bucket, list_node, buckets) {
> +             ctx->group_bucket_count++;
> +        }
> +    }
> +    if(ctx->xin->packet)
> +     if(ctx->xin->packet->source == DPBUF_DPDK)
> +             
> rte_pktmbuf_refcnt_update(&ctx->xin->packet->mbuf,ctx->group_bucket_count);
>       LIST_FOR_EACH (bucket, list_node, buckets) {
> 
> this stops the transmit pmd’s attempting to free the packet until all the 
> buckets( ports ) have transmitted it.
> My switch also does reassembly on rx - this refcnt is necessary for handling 
> multi-segment dpdk buffers too. 
> I also changed the segment free to rte_pktmbuf_free in netdev-dpdk.c for this 
> purpose.
> I’m expecting it will also be important for tso or the possibility of using 
> rte_ipv4_fragment_packet on an outgoing port.
> 
> i have between 6 and 12 PMD’s depending on the number of dpdk ports running 
> at any time, and if i use OFPGT11_ALL with many output buckets(ports) buffers 
> will disappear from under some pmd’s and cause segfaults etc..
> 
> Cheers,
> 
> Dave.
> 
> > On Oct 12, 2015, at 11:38 AM, Ben Pfaff <b...@nicira.com> wrote:
> > 
> > On Wed, Oct 07, 2015 at 05:36:18PM -0500, David Evans wrote:
> >> While using netdev-dpdk - When i add a rule for which the action is to
> >> send to a group (type=all) containing (x) output buckets (ports) how
> >> can i increment the dp_packet->pkt_mbuf’s refcnt to (x) so that the
> >> packet is not deleted before it has transmitted all ports(buckets) in
> >> the group.
> >> 
> >> Perhaps in ofproto-dpif-xlate.c function xlate_all_group find the
> >> packet and apply the ctx->xin->packet->mbuf->refcnt ?  Will that work
> >> for all packets for a ctx?
> > 
> > I don't understand what relationship you expect here.  A group has no
> > direct relationship to a packet.  Translation produces a flat list of
> > simple actions that don't refer back to the group.
> 
_______________________________________________
discuss mailing list
discuss@openvswitch.org
http://openvswitch.org/mailman/listinfo/discuss

Reply via email to