mbox series

[ovs-dev,0/3] Use improved dp_hash select group by default

Message ID 1521569778-7283-1-git-send-email-jan.scheurich@ericsson.com
Headers show
Series Use improved dp_hash select group by default | expand

Message

Jan Scheurich March 20, 2018, 6:16 p.m. UTC
The current default OpenFlow select group implementation sends every new L4 flow
to the slow path for the balancing decision and installs a 5-tuple "miniflow"
in the datapath to forward subsequent packets of the connection accordingly. 
Clearly this has major scalability issues with many parallel L4 flows and high
connection setup rates.

The dp_hash selection method for the OpenFlow select group was added to OVS
as an alternative. It avoids the scalability issues for the price of an 
additional recirculation in the datapath. The dp_hash method is only available
to OF1.5 SDN controllers speaking the Netronome Group Mod extension to 
configure the selection mechanism. This severely limited the applicability of
the dp_hash select group in the past.

Furthermore, testing revealed that the implemented dp_hash selection often
generated a very uneven distribution of flows over group buckets and didn't 
consider bucket weights at all.

The present patch set in a first step improves the dp_hash selection method to
much more accurately distribute flows over weighted group buckets. In a second
step it makes the improved dp_hash method the default in OVS for select groups
that can be accurately handled by dp_hash. That should be the vast majority of
cases. Otherwise we fall back to the legacy slow-path selection method.

The Netronome extension can still be used to override the default decision and
require the legacy slow-path or the dp_hash selection method.

Jan Scheurich (3):
  userspace datapath: Add OVS_HASH_L4_SYMMETRIC dp_hash algorithm
  ofproto-dpif: Improve dp_hash selection method for select groups
  ofproto-dpif: Use dp_hash as default selection method

 datapath/linux/compat/include/linux/openvswitch.h |   4 +
 include/openvswitch/ofp-group.h                   |   1 +
 lib/flow.c                                        |  42 +++++-
 lib/flow.h                                        |   1 +
 lib/odp-execute.c                                 |  23 +++-
 lib/ofp-group.c                                   |  15 ++-
 ofproto/ofproto-dpif-xlate.c                      |  70 ++++++----
 ofproto/ofproto-dpif.c                            | 156 ++++++++++++++++++++++
 ofproto/ofproto-dpif.h                            |  14 ++
 ofproto/ofproto-provider.h                        |   2 +-
 tests/mpls-xlate.at                               |  26 ++--
 tests/ofproto-dpif.at                             |  66 ++++++---
 12 files changed, 351 insertions(+), 69 deletions(-)