On Tue, May 24, 2016 at 12:36:02PM -0700, Jarno Rajahalme wrote:
> One comment below, otherwise looks good,
> 
> Acked-by: Jarno Rajahalme <ja...@ovn.org>

[...]

> > On May 24, 2016, at 12:29 AM, Simon Horman <simon.hor...@netronome.com> 
> > wrote:
> > 
> > Until 8bf009bf8ab4 ("xlate: Always recirculate after an MPLS POP to a
> > non-MPLS ethertype.") the translation code took some care to only
> > recirculate as a result of a pop_mpls action if necessary. This was
> > implemented using per-action checks and resulted in some maintenance
> > burden.
> > 
> > Unfortunately recirculation is a relatively expensive operation and a
> > performance degradation of up to 35% has been observed with the above
> > mentioned patch applied for the arguably common case of:
> > 
> >     pop_mpls,set(l2 field),output
> > 
> > This patch attempts to strike a balance between performance and
> > maintainability by special casing set and output actions such
> > that recirculation may be avoided.
> > 
> > This partially reverts the above mentioned commit. In particular most
> > of the C code outside of do_xlate_actions().
> > 
> > Signed-off-by: Simon Horman <simon.hor...@netronome.com>

[...]

> > @@ -4500,6 +4612,8 @@ do_xlate_actions(const struct ofpact *ofpacts, size_t 
> > ofpacts_len,
> >             break;
> >         }
> > 
> > +        recirc_for_mpls(a, ctx);
> > +
> 
> IMO this should not be done when 'ctx->exit' has already been set, as it may 
> trigger an unnecessary recirculation in that case.

Thanks, good point.

I will make recirc_for_mpls return early if ctx->exit is already set.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to