[ovs-dev] [PATCHv4 00/12] Revalidate flows with unique identifiers.

Joe Stringer joestringer at nicira.com
Mon Sep 8 10:23:43 UTC 2014


With v4 I've had a fairly good go at testing this series, for performance
comparison and also compatibility with mixed older/newer datapath/userspace.
Master appears to be able to revalidate roughly 130-140K flows per second with
a single revalidator and many handlers. This series pushes this number up
around 190-200K.

I also looked a little into a 64-bit CityHash as an alternative to the 128-bit
Murmurhash, based on the code available here:
https://code.google.com/p/cityhash/source/browse/trunk/src/city.cc

I was unable to observe much performance difference between the hash functions,
so I guess that we don't spend enough time hashing for them to have a major
impact on overall revalidation performance. There's probably more accessible
optimizations to be made first. Given that the Murmurhash code has more bits to
hash into and the implementation is simpler, I've stuck with this code for the
moment.

v4:
- Datapath memory leak fixes
- Enable UID-based terse dumping and deleting by default
- Shifted UID generation down to dpif
- Log flow UIDs in more places
- Various fixes

RFCv3:
- Add datapath implementation
- Minor fixes
- Rebased

RFCv2:
- Revised early patches from v1 feedback
- Add Acks from Ben
- Rebased

RFCv1:
http://openvswitch.org/pipermail/dev/2014-August/044383.html

Joe Stringer (12):
  revalidator: Use 'cmap' for storing ukeys.
  revalidator: Protect ukeys with a mutex.
  udpif: Separate udpif_key maps from revalidators.
  upcall: Rename dump_op -> ukey_op.
  upcall: Create ukeys in handler threads.
  upcall: Revalidate using cache of mask, actions.
  hash: Add 128-bit murmurhash.
  dpif: Add Unique flow identifiers.
  datapath: Add support for OVS_FLOW_ATTR_UID.
  revalidator: Reduce ukey contention.
  revalidator: Distinguish new and duplicate flows.
  upcall: Distinguish duplicate upcalls from conflicts.

 datapath/datapath.c                               |  215 ++++--
 datapath/flow.h                                   |   12 +-
 datapath/flow_netlink.c                           |   60 ++
 datapath/flow_netlink.h                           |    2 +
 datapath/flow_table.c                             |  229 +++++-
 datapath/flow_table.h                             |    5 +-
 datapath/linux/compat/include/linux/openvswitch.h |   29 +
 include/openvswitch/types.h                       |    5 +
 lib/dpctl.c                                       |   14 +-
 lib/dpif-linux.c                                  |  127 +--
 lib/dpif-netdev.c                                 |  144 ++--
 lib/dpif-provider.h                               |    9 +-
 lib/dpif.c                                        |   47 +-
 lib/dpif.h                                        |   31 +-
 lib/flow.h                                        |    6 +
 lib/hash.c                                        |  194 ++++-
 lib/hash.h                                        |    4 +-
 lib/odp-util.c                                    |   55 ++
 lib/odp-util.h                                    |   25 +
 ofproto/ofproto-dpif-upcall.c                     |  852 ++++++++++++++-------
 ofproto/ofproto-dpif-upcall.h                     |    1 +
 ofproto/ofproto-dpif.c                            |   96 ++-
 ofproto/ofproto-dpif.h                            |    2 +
 tests/dpif-netdev.at                              |    5 +
 tests/ofproto-dpif.at                             |   28 +-
 tests/ofproto-macros.at                           |    1 +
 26 files changed, 1656 insertions(+), 542 deletions(-)

-- 
1.7.10.4




More information about the dev mailing list