mbox series

[ovs-dev,0/3] ovn-controller: Logical flow processing optimizations

Message ID 20190823103753.23966.71362.stgit@dceara.remote.csb
Headers show
Series ovn-controller: Logical flow processing optimizations | expand

Message

Dumitru Ceara Aug. 23, 2019, 10:37 a.m. UTC
This series adds some (independent) optimizations that improve
ovn-controller performance by lowering the number of operations that
need to be executed during a iteration of the main controller loop.

Each patch in the series addresses a bottleneck reported by running
`perf record -g --call-graph dwarf -i /usr/bin/ovn-controller` on a
system where the Southbound DB was already populated by ovn-northd.

The logical configuration of the OVN is:
- 500 logical routers
- 1 logical switch attached to each router
- 2 logical ports attached to each switch
- 4 ACLs per switch

To evaluate the performance impact of the change in a more realistic
way the following test is performed (on a single node that runs ovn-northd
and ovn-controller and emulates the VM hosts with OVS internal interfaces):
1. Start ovs-vswitchd.
2. Remove the Southbound DB such that ovn-northd needs to repopulate
   everything based on the Northbound DB contents.
3. Start a patched version of ovn-controller such that it tracks loop time
   execution information and how long it takes to process all logical flows
   from the Southbound DB.
4. At the same time with step 3 above, start ovn-northd which will populate
   the Southbound DB.

The following measurements are taken:
- real time (measured with `time`) to have all corresponding openflow flows
  processed by ovs-vswitchd.
- maximum ovn-controller main loop iteration duration
- average ovn-controller main loop iteration duration
- number of times ovn-controller executes the main loop until all logical
  flows are processed

Comparing the results before and after this series we see:
- 13% performance boost w.r.t. real time taken to have all openflow flows
  installed in ovs-vswitchd
- 41% decrease of average ovn-controller loop iteration duration and
  12% increase of ovn-controller number of loop iterations. Essentially
  processing loops are faster and can happen more often.
- 2% decrease of maximum ovn-controller main loop iteration duration.


Dumitru Ceara (3):
      ofctrl: Avoid recomputing match hash in ofctrl_dup_flow().
      ovn-controller: Optimize update of ct-zones external-ids.
      ovn-controller: Minimize SB DB port_binding lookups.


 controller/binding.c        |   19 ++++++++++++---
 controller/ofctrl.c         |    2 +-
 controller/ovn-controller.c |   53 +++++++++++++++++++++++++++++++++++++------
 controller/ovn-controller.h |   11 ++++++++-
 controller/physical.c       |    4 ++-
 controller/pinctrl.c        |   53 +++++++++++--------------------------------
 6 files changed, 87 insertions(+), 55 deletions(-)

Comments

Dumitru Ceara Aug. 23, 2019, 11:26 a.m. UTC | #1
On Fri, Aug 23, 2019 at 12:38 PM Dumitru Ceara <dceara@redhat.com> wrote:
>
> This series adds some (independent) optimizations that improve
> ovn-controller performance by lowering the number of operations that
> need to be executed during a iteration of the main controller loop.
>
> Each patch in the series addresses a bottleneck reported by running
> `perf record -g --call-graph dwarf -i /usr/bin/ovn-controller` on a
> system where the Southbound DB was already populated by ovn-northd.
>
> The logical configuration of the OVN is:
> - 500 logical routers
> - 1 logical switch attached to each router
> - 2 logical ports attached to each switch
> - 4 ACLs per switch
>
> To evaluate the performance impact of the change in a more realistic
> way the following test is performed (on a single node that runs ovn-northd
> and ovn-controller and emulates the VM hosts with OVS internal interfaces):
> 1. Start ovs-vswitchd.
> 2. Remove the Southbound DB such that ovn-northd needs to repopulate
>    everything based on the Northbound DB contents.
> 3. Start a patched version of ovn-controller such that it tracks loop time
>    execution information and how long it takes to process all logical flows
>    from the Southbound DB.
> 4. At the same time with step 3 above, start ovn-northd which will populate
>    the Southbound DB.
>
> The following measurements are taken:
> - real time (measured with `time`) to have all corresponding openflow flows
>   processed by ovs-vswitchd.
> - maximum ovn-controller main loop iteration duration
> - average ovn-controller main loop iteration duration
> - number of times ovn-controller executes the main loop until all logical
>   flows are processed
>
> Comparing the results before and after this series we see:
> - 13% performance boost w.r.t. real time taken to have all openflow flows
>   installed in ovs-vswitchd
> - 41% decrease of average ovn-controller loop iteration duration and
>   12% increase of ovn-controller number of loop iterations. Essentially
>   processing loops are faster and can happen more often.
> - 2% decrease of maximum ovn-controller main loop iteration duration.
>
>
> Dumitru Ceara (3):
>       ofctrl: Avoid recomputing match hash in ofctrl_dup_flow().
>       ovn-controller: Optimize update of ct-zones external-ids.
>       ovn-controller: Minimize SB DB port_binding lookups.
>
>
>  controller/binding.c        |   19 ++++++++++++---
>  controller/ofctrl.c         |    2 +-
>  controller/ovn-controller.c |   53 +++++++++++++++++++++++++++++++++++++------
>  controller/ovn-controller.h |   11 ++++++++-
>  controller/physical.c       |    4 ++-
>  controller/pinctrl.c        |   53 +++++++++++--------------------------------
>  6 files changed, 87 insertions(+), 55 deletions(-)
>
>

Sorry for the noise, please ignore this version. I resent the v2
series targeting the OVN repo instead:
https://patchwork.ozlabs.org/project/openvswitch/list/?series=126961