net: openvswitch: reorder masks array based on usage
authorEelco Chaudron <echaudro@redhat.com>
Wed, 15 Jul 2020 12:09:28 +0000 (14:09 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 17 Jul 2020 17:36:50 +0000 (10:36 -0700)
commiteac87c413bf9794c14d488998a5265ea5b32f04e
tree969f981073d246b9888cc3501d883f6c1f6ebe93
parentb18432c5a49c9413fd3afb717b378e08cb71331b
net: openvswitch: reorder masks array based on usage

This patch reorders the masks array every 4 seconds based on their
usage count. This greatly reduces the masks per packet hit, and
hence the overall performance. Especially in the OVS/OVN case for
OpenShift.

Here are some results from the OVS/OVN OpenShift test, which use
8 pods, each pod having 512 uperf connections, each connection
sends a 64-byte request and gets a 1024-byte response (TCP).
All uperf clients are on 1 worker node while all uperf servers are
on the other worker node.

Kernel without this patch     :  7.71 Gbps
Kernel with this patch applied: 14.52 Gbps

We also run some tests to verify the rebalance activity does not
lower the flow insertion rate, which does not.

Signed-off-by: Eelco Chaudron <echaudro@redhat.com>
Tested-by: Andrew Theurer <atheurer@redhat.com>
Reviewed-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/openvswitch/datapath.c
net/openvswitch/datapath.h
net/openvswitch/flow_table.c
net/openvswitch/flow_table.h