mbox series

[ovs-dev,v13,0/5] dpcls func ptrs & optimizations

Message ID 20190717182147.5042-1-harry.van.haaren@intel.com
Headers show
Series dpcls func ptrs & optimizations | expand

Message

Van Haaren, Harry July 17, 2019, 6:21 p.m. UTC
Hey Folks,

Here a v13 of the DPCLS Function Pointer patchset, as has been
presented at OVS Conf in Nov '18, and discussed on the ML since then.
I'm aware of the soft-freeze for 2.12, I feel this patchset has had
enough reviews/versions/testing to be merged in 2.12.

Thanks Ilya and Ian for input and suggestions on v12. Only change is that
the location of the blocks_scratch array has moved from struct dpcls to
a thread local storage internal to the implementation. This avoids leaking
the blocks_scratch concept outside the dpcls implementation, while also
ensuring that each thread running the dpcls has its own scratch memory.

Given the nearing soft-freeze and branch deadlines, I'd like to see
this get merged - and any future minor comments / improvements can be
handled before release.

Regards, -Harry


Patchset details;
1) Refactor dpcls_lookup and the subtable for flexibility.
In particular, add a function pointer to the subtable
structure, which enables "plugging-in" a lookup function
at runtime. This enables a number of optimizations in future.

2) and 3)
With the function pointer in place, we refactor the existing
dpcls_lookup matching code into its own function, and later its
own file. To split it to its own file requires making various
dpcls data-structures available in dpif-netdev-private.h.

4)
Refactor the existing code, to favour compute of flat arrays of
miniflows, instead of the MACRO based iteration. This simplifies
the code itself, and makes future optimizations possible due to
simplified loop structures, and loop trip counts pass in via
function arguments. See commit message for more details.

5)
This patch implements a select few specialized functions, for handling
miniflows with 5-1, 4-1, and 4-0 miniflow unit bit patterns. More of
these types of functions can (and should) be added to accelerate other
patterns of subtable lookups! See commit message for more details.


Harry van Haaren (5):
  dpif-netdev: Implement function pointers/subtable
  dpif-netdev: Move dpcls lookup structures to .h
  dpif-netdev: Split out generic lookup function
  dpif-netdev: Refactor generic implementation
  dpif-netdev: Add specialized generic scalar functions

 NEWS                             |   4 +
 lib/automake.mk                  |   2 +
 lib/dpif-netdev-lookup-generic.c | 324 +++++++++++++++++++++++++++++++
 lib/dpif-netdev-private.h        | 127 ++++++++++++
 lib/dpif-netdev.c                | 175 ++++++++---------
 5 files changed, 533 insertions(+), 99 deletions(-)
 create mode 100644 lib/dpif-netdev-lookup-generic.c
 create mode 100644 lib/dpif-netdev-private.h

Comments

Stokes, Ian July 17, 2019, 8:22 p.m. UTC | #1
On 7/17/2019 7:21 PM, Harry van Haaren wrote:
> Hey Folks,
> 
> Here a v13 of the DPCLS Function Pointer patchset, as has been
> presented at OVS Conf in Nov '18, and discussed on the ML since then.
> I'm aware of the soft-freeze for 2.12, I feel this patchset has had
> enough reviews/versions/testing to be merged in 2.12.
> 
> Thanks Ilya and Ian for input and suggestions on v12. Only change is that
> the location of the blocks_scratch array has moved from struct dpcls to
> a thread local storage internal to the implementation. This avoids leaking
> the blocks_scratch concept outside the dpcls implementation, while also
> ensuring that each thread running the dpcls has its own scratch memory.
> 
> Given the nearing soft-freeze and branch deadlines, I'd like to see
> this get merged - and any future minor comments / improvements can be
> handled before release.
> 
> Regards, -Harry

Thanks for the quick turn around on this Harry, I'm hoping to have a 
closer look on the v13 changes tomorrow.

Regards
Ian