[ovs-dev] [PATCH 03/18] datapath: re-lookup a flow if actions allow a more fine grained match
Simon Horman
horms at verge.net.au
Thu Dec 27 22:58:15 UTC 2012
On Thu, Dec 27, 2012 at 07:25:29PM +0200, Jarno Rajahalme wrote:
> On Dec 27, 2012, at 7:23 , ext Simon Horman wrote:
> >
> > diff --git a/datapath/actions.c b/datapath/actions.c
> > index 3278e37..f1066fa 100644
> > --- a/datapath/actions.c
> > +++ b/datapath/actions.c
> > @@ -629,6 +629,20 @@ static int do_execute_actions(struct datapath *dp, struct sk_buff *skb,
> > return 0;
> > }
> >
> > +__be16 ovs_actions_allow_l3_extraction(struct sw_flow *flow)
> > +{
> > + struct sw_flow_actions *acts = rcu_dereference(flow->sf_acts);
> > + const struct nlattr *a;
> > + int rem;
> > +
> > + for (a = acts->actions, rem = acts->actions_len; rem > 0;
> > + a = nla_next(a, &rem))
> > + if (nla_type(a) == OVS_ACTION_ATTR_POP_MPLS)
> > + return *(__be16 *)nla_data(a);
> > +
> > + return 0;
> > +}
> > +
>
> From the use below it seems that the actions of "poorer" flows for
> which the above returns non-zero will never be applied (including
> the pop_mpls action itself). Also, the richer flow will need to replicate
> also the pop_mpls action for it to be applied on the packet. This is
> likely intended behavior, but should be documented somewhere (if
> not already done so).
>
> In the intended use case the actions list of the "poorer" flow would
> have exactly one item (pop_mpls) and the
> ovs_actions_allow_l3_extraction() would be fast. However, for all
> other flows their whole actions list is iterated, which is unnecessary
> overhead for every packet passing the datapath. Maybe there
> should be a flag computed at actions set/modify time on the flow
> that would be true if ovs_actions_allow_l3_extraction() will return a
> non-zero ethertype? Or even better, use the ethertype as the flag, so
> that the above would become something like this:
>
> __be16 ovs_actions_allow_l3_extraction(struct sw_flow *flow)
> {
> return flow->l3_extraction_ethertype; /* extracted from one of our actions */
> }
Thanks. You are correct and that seems like it would be a useful
optimisation. I'll see about adding it.
More information about the dev
mailing list