[ovs-dev] [PATCH] packets: Do not initialize ct_orig_tuple.
Bodireddy, Bhanuprakash
bhanuprakash.bodireddy at intel.com
Wed Jul 12 10:20:22 UTC 2017
Thanks Darrell for testing this patch. I will send on v2 with your suggestions below.
- Bhanuprakash.
>-----Original Message-----
>From: Darrell Ball [mailto:dball at vmware.com]
>Sent: Sunday, July 9, 2017 9:44 PM
>To: Bodireddy, Bhanuprakash <bhanuprakash.bodireddy at intel.com>;
>dev at openvswitch.org
>Subject: Re: [ovs-dev] [PATCH] packets: Do not initialize ct_orig_tuple.
>
>I tested and found similar ballpark performance increase (approx. 10%) in the
>most simple case with decreasing benefit as the pipeline gets more realistic
>and useful.
>
>This ideal case incremental beyond the original fix patch (from Daniele) shows
>a small decrease in performance of approx 100k pps (0.7 %). I cannot explain
>that right now.
>However, I think there is advantage in clearly defining what needs initialization
>and was does not and the additional incremental by Bhanu does that.
>In realistic cases, I expect the 0.7 % difference, if it is real, to be much less
>anyways.
>
>Hence, this patch looks fine except for some comments inline.
>
>
>
>On 6/22/17, 2:08 PM, "ovs-dev-bounces at openvswitch.org on behalf of
>Bhanuprakash Bodireddy" <ovs-dev-bounces at openvswitch.org on behalf of
>bhanuprakash.bodireddy at intel.com> wrote:
>
> Commit "odp: Support conntrack orig tuple key." introduced new fields
> in struct 'pkt_metadata'. pkt_metadata_init() is called for every
> packet in the userspace datapath. When testing a simple single
> flow case with DPDK, we observe a lower throughput after the above
> commit (it was 14.88 Mpps before, it is 13 Mpps after).
>
> This patch skips initializing ct_orig_tuple in pkt_metadata_init().
> It should be enough to initialize ct_state, because nobody should look
> at ct_orig_tuple unless ct_state is != 0.
>
> It's discussed at:
> https://urldefense.proofpoint.com/v2/url?u=https-
>3A__mail.openvswitch.org_pipermail_ovs-2Ddev_2017-
>2DMay_332419.html&d=DwICAg&c=uilaK90D4TOVoH58JNXRgQ&r=BVhFA09C
>GX7JQ5Ih-
>uZnsw&m=8ZtjBQ0W_pVzaasUyrsZM_cp_rmDylXtUvA7D7F2UOw&s=min0TA
>xgYGI118BI-LEDaDap8G8XuU4C9xJXtLLqIaE&e=
>
> Fixes: daf4d3c18da4("odp: Support conntrack orig tuple key.")
> Signed-off-by: Daniele Di Proietto <diproiettod at vmware.com>
> Signed-off-by: Bhanuprakash Bodireddy
><bhanuprakash.bodireddy at intel.com>
> Co-authored-by: Bhanuprakash Bodireddy
><bhanuprakash.bodireddy at intel.com>
> ---
> Original RFC was posted by Daniele here:
> https://urldefense.proofpoint.com/v2/url?u=https-
>3A__mail.openvswitch.org_pipermail_ovs-2Ddev_2017-
>2DMarch_329679.html&d=DwICAg&c=uilaK90D4TOVoH58JNXRgQ&r=BVhFA0
>9CGX7JQ5Ih-
>uZnsw&m=8ZtjBQ0W_pVzaasUyrsZM_cp_rmDylXtUvA7D7F2UOw&s=QivDZb
>3mJt6__TUIssDosbGfZlpAtRN7P_4p-lc4Zls&e=
>
> In this patch moved the offset from ct_orig_tuple to 'ct_orig_tuple_ipv6'.
> This patch fixes the performance drop(~2.3Mpps for P2P - 64 byte pkts)
> with OvS-DPDK on Master.
>
> lib/packets.h | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/lib/packets.h b/lib/packets.h
> index a9d5e84..94c3dcc 100644
> --- a/lib/packets.h
> +++ b/lib/packets.h
> @@ -126,10 +126,19 @@ pkt_metadata_init_tnl(struct pkt_metadata *md)
> static inline void
> pkt_metadata_init(struct pkt_metadata *md, odp_port_t port)
> {
> + /* This is called for every packet in userspace datapath and affects
> + * performance if all the metadata is initialized.
>
>I think you meant the sentence
>
> “Hence absolutely
> + * necessary fields should be zeroed out.”
>
>to be something like
>
>“Hence, fields should only be zeroed out when necessary.”
>
>
> + *
> + * Initialize only the first 17 bytes of metadata (till ct_state).
>
>Do we really need to discuss “17 bytes” ?
>Can the sentence be:
>Initialize only till ct_state.
>
> + * Once the ct_state is zeroed out rest of ct fields will not be looked
> + * at unless ct_state != 0.
> + */
> + memset(md, 0, offsetof(struct pkt_metadata, ct_orig_tuple_ipv6));
> +
> /* It can be expensive to zero out all of the tunnel metadata. However,
> * we can just zero out ip_dst and the rest of the data will never be
> * looked at. */
> - memset(md, 0, offsetof(struct pkt_metadata, in_port));
> md->tunnel.ip_dst = 0;
> md->tunnel.ipv6_dst = in6addr_any;
> md->in_port.odp_port = port;
> --
> 2.4.11
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> https://urldefense.proofpoint.com/v2/url?u=https-
>3A__mail.openvswitch.org_mailman_listinfo_ovs-
>2Ddev&d=DwICAg&c=uilaK90D4TOVoH58JNXRgQ&r=BVhFA09CGX7JQ5Ih-
>uZnsw&m=8ZtjBQ0W_pVzaasUyrsZM_cp_rmDylXtUvA7D7F2UOw&s=pGKK0P
>BsxExr3Bxhim-OKiWgLg3rhYtj2MqiosQ2Rfc&e=
>
>
>
More information about the dev
mailing list