[ovs-dev] [PATCH 03/12] flow: Introduce parse_dl_type().
Fischetti, Antonio
antonio.fischetti at intel.com
Mon Feb 1 11:13:02 UTC 2016
Hi, I was running some Regression Test to check performance in a
Phy-2-Phy test, ie
ovs-ofctl add-flow br0 in_port=1,action=output:2
After applying patches #1 and then #2 the performance
is still ok.
Instead, after I apply this patch #3 the throughput goes from 12.1
down to 11.6 Mpps.
I found out 2 strange alternative ways to restore performance.
Either:
1. Comment the new parse_dl_type() function. I know it's odd
because it isn't yet called from anywhere.
Or:
2. Adding these weird changes to the 2 function prototypes which are
called by parse_dl_type()
- static inline ovs_be16
+/*static inline*/ ovs_be16
parse_vlan(const void **datap, size_t *sizep)
and
- static inline ovs_be16
+ /*static*/ inline ovs_be16
parse_ethertype(const void **datap, size_t *sizep)
It looks like some compiler optimization is failing for some reason?
I didn't investigate further on the output map of the executable.
Antonio
> -----Original Message-----
> From: dev [mailto:dev-bounces at openvswitch.org] On Behalf Of Daniele Di
> Proietto
> Sent: Monday, November 16, 2015 6:21 AM
> To: dev at openvswitch.org
> Subject: [ovs-dev] [PATCH 03/12] flow: Introduce parse_dl_type().
>
> The function simply returns the ethernet type of the packet (after
> eventually discarding the VLAN tag). It will be used by a following
> commit.
>
> Signed-off-by: Daniele Di Proietto <diproiettod at vmware.com>
> ---
> lib/flow.c | 10 ++++++++++
> lib/flow.h | 1 +
> 2 files changed, 11 insertions(+)
>
> diff --git a/lib/flow.c b/lib/flow.c
> index 2bdce26..d8c1228 100644
> --- a/lib/flow.c
> +++ b/lib/flow.c
> @@ -789,6 +789,16 @@ miniflow_extract(struct dp_packet *packet, struct
> miniflow *dst)
> dst->map = mf.map;
> }
>
> +ovs_be16
> +parse_dl_type(const struct eth_header *data_, size_t size)
> +{
> + const void *data = data_;
> +
> + parse_vlan(&data, &size);
> +
> + return parse_ethertype(&data, &size);
> +}
> +
> /* For every bit of a field that is wildcarded in 'wildcards', sets the
> * corresponding bit in 'flow' to zero. */
> void
> diff --git a/lib/flow.h b/lib/flow.h
> index de15a98..7465af8 100644
> --- a/lib/flow.h
> +++ b/lib/flow.h
> @@ -237,6 +237,7 @@ void flow_compose(struct dp_packet *, const struct
> flow *);
>
> bool parse_ipv6_ext_hdrs(const void **datap, size_t *sizep, uint8_t
> *nw_proto,
> uint8_t *nw_frag);
> +ovs_be16 parse_dl_type(const struct eth_header *data_, size_t size);
>
> static inline uint64_t
> flow_get_xreg(const struct flow *flow, int idx)
> --
> 2.1.4
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
More information about the dev
mailing list