mirror of
https://github.com/openvswitch/ovs
synced 2025-08-30 22:05:19 +00:00
packets: Do not initialize ct_orig_tuple.
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://mail.openvswitch.org/pipermail/ovs-dev/2017-May/332419.html Fixes: daf4d3c18da4("odp: Support conntrack orig tuple key.") Signed-off-by: Daniele Di Proietto <diproiettod@vmware.com> Signed-off-by: Bhanuprakash Bodireddy <bhanuprakash.bodireddy@intel.com> Co-authored-by: Bhanuprakash Bodireddy <bhanuprakash.bodireddy@intel.com> Signed-off-by: Darrell Ball <dlu998@gmail.com> Signed-off-by: Ben Pfaff <blp@ovn.org>
This commit is contained in:
committed by
Ben Pfaff
parent
0ee821c2e6
commit
af697f26b5
@@ -126,10 +126,18 @@ 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. Hence, fields should
|
||||
* only be zeroed out when necessary.
|
||||
*
|
||||
* 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;
|
||||
|
Reference in New Issue
Block a user