mirror of
https://github.com/openvswitch/ovs
synced 2025-10-15 14:17:18 +00:00
tunnels: Don't initialize unnecessary packet metadata.
The addition of Geneve options to packet metadata significantly expanded its size. It was reported that this can decrease performance for DPDK ports by up to 25% since we need to initialize the whole structure on each packet receive. It is not really necessary to zero out the entire structure because miniflow_extract() only copies the tunnel metadata when particular fields indicate that it is valid. Therefore, as long as we zero out these fields when the metadata is initialized and ensure that the rest of the structure is correctly set in the presence of a tunnel, we can avoid touching the tunnel fields on packet reception. Reported-by: Ciara Loftus <ciara.loftus@intel.com> Tested-by: Ciara Loftus <ciara.loftus@intel.com> Signed-off-by: Jesse Gross <jesse@nicira.com> Acked-by: Ben Pfaff <blp@nicira.com>
This commit is contained in:
@@ -1463,6 +1463,7 @@ odp_tun_key_from_attr__(const struct nlattr *attr,
|
||||
enum odp_key_fitness
|
||||
odp_tun_key_from_attr(const struct nlattr *attr, struct flow_tnl *tun)
|
||||
{
|
||||
memset(tun, 0, sizeof *tun);
|
||||
return odp_tun_key_from_attr__(attr, NULL, 0, NULL, tun);
|
||||
}
|
||||
|
||||
@@ -3666,7 +3667,7 @@ odp_key_to_pkt_metadata(const struct nlattr *key, size_t key_len,
|
||||
1u << OVS_KEY_ATTR_SKB_MARK | 1u << OVS_KEY_ATTR_TUNNEL |
|
||||
1u << OVS_KEY_ATTR_IN_PORT;
|
||||
|
||||
*md = PKT_METADATA_INITIALIZER(ODPP_NONE);
|
||||
pkt_metadata_init(md, ODPP_NONE);
|
||||
|
||||
NL_ATTR_FOR_EACH (nla, left, key, key_len) {
|
||||
uint16_t type = nl_attr_type(nla);
|
||||
|
Reference in New Issue
Block a user