[ovs-dev] [PATCH ovn v12 0/7] Incremental processing improvements.

Han Zhou hzhou at ovn.org
Wed Jun 17 07:02:03 UTC 2020


On Thu, Jun 11, 2020 at 5:43 AM <numans at ovn.org> wrote:
>
> From: Numan Siddique <numans at ovn.org>
>
> This patch series handles port binding, datapath binding, ovs interface
changes,
> runtime data changes, sb chassis changes incrementally.
>
> (These patches can also be found here -
> https://github.com/numansiddique/ovn/tree/IP_improvements_v5)
>
> Below are the results of some testing I did with ovn-fake-multinode
> setup
>

Thanks Numan! Could you put the below test results which show performance
improvement of the patch series in the commit message of the patch:
ovn-controller: Handle runtime data changes in flow output engine? The
information in the cover-letter is not well tracked.

For the series:

Acked-by: Han Zhou <hzhou at ovn.org>

> Test setup
> ------
>  1. ovn-central fake node running OVN dbs and 2 compute nodes running
>     ovn-controller.
>
>  2. Before running the tests, used an existing OVN db with the below
> resources
>    No of logical switches     - 53
>    No of logical ports        - 1256
>    No of logical routers      - 9
>    No of logical router ports - 56
>    No of port groups          - 152
>    No of logical flows        - 45447
>
>    Port bindings on compute-1 -  19
>    Port bindings on compute-2 -  18
>    No of OF flows on compute-1 - 84996
>    No of OF flows on compute-2 - 84901
>
>  3. The test does the following
>     - Creates 2 logical switches (one for each compute node) and connect
to a
>       logical router for each compute node.
>     - 100 logical ports are created (50 per lswitch), a simple ACL is
added and the address
>       set is created for each port.
>     - Each port is bound on the respective compute node and the test
>       pings the IP of the port (from another port belonging to the same
>       lswitch created earlier).
>
>
> Below are the results with OVN master
>
>
+---------------------------------------------------------------------------------------------------------+
> |                                          Response Times (sec)
                                |
>
+----------------------------------+-------+--------+--------+--------+--------+--------+---------+-------+
> | action                           | min   | median | 90%ile | 95%ile |
max    | avg    | success | count |
>
+----------------------------------+-------+--------+--------+--------+--------+--------+---------+-------+
> | ovn.create_or_update_address_set | 0.491 | 0.519  | 0.542  | 0.548  |
0.558  | 0.521  | 100.0%  | 100   |
> | ovn.create_or_update_port_group  | 0.0   | 0.0    | 0.0    | 0.0    |
0.001  | 0.0    | 100.0%  | 100   |
> | ovn.create_port_group_acls       | 0.966 | 1.037  | 1.065  | 1.069  |
1.07   | 1.037  | 50.0%   | 100   |
> | ovn_network.bind_port            | 1.242 | 1.341  | 1.397  | 1.409  |
1.443  | 1.348  | 100.0%  | 100   |
> | ovn.bind_ovs_vm                  | 0.413 | 0.469  | 0.49   | 0.494  |
0.523  | 0.469  | 100.0%  | 100   |
> | ovn.bind_internal_vm             | 0.804 | 0.875  | 0.921  | 0.935  |
0.95   | 0.88   | 100.0%  | 100   |
> | ovn_network.wait_port_ping       | 6.695 | 7.788  | 7.903  | 11.63  |
16.124 | 7.997  | 100.0%  | 100   |
> | total                            | 9.271 | 10.318 | 11.269 | 14.047 |
18.509 | 10.871 | 100.0%  | 100   |
>
+----------------------------------+-------+--------+--------+--------+--------+--------+---------+-------+
> Load duration: 1087.5742933750153
> Full duration: 1089.151035308838
>
>
> Below are the results with these patches
>
>
+-------------------------------------------------------------------------------------------------------+
> |                                         Response Times (sec)
                               |
>
+----------------------------------+-------+--------+--------+--------+-------+-------+---------+-------+
> | action                           | min   | median | 90%ile | 95%ile |
max   | avg   | success | count |
>
+----------------------------------+-------+--------+--------+--------+-------+-------+---------+-------+
> | ovn.create_or_update_address_set | 0.484 | 0.506  | 0.53   | 0.536  |
0.551 | 0.509 | 100.0%  | 100   |
> | ovn.create_or_update_port_group  | 0.0   | 0.0    | 0.0    | 0.0    |
0.0   | 0.0   | 100.0%  | 100   |
> | ovn.create_port_group_acls       | 0.966 | 1.006  | 1.032  | 1.036  |
1.059 | 1.006 | 50.0%   | 100   |
> | ovn_network.bind_port            | 1.255 | 1.352  | 1.421  | 1.444  |
1.516 | 1.352 | 100.0%  | 100   |
> | ovn.bind_ovs_vm                  | 0.411 | 0.455  | 0.472  | 0.476  |
0.5   | 0.456 | 100.0%  | 100   |
> | ovn.bind_internal_vm             | 0.806 | 0.893  | 0.968  | 0.989  |
1.043 | 0.896 | 100.0%  | 100   |
> | ovn_network.wait_port_ping       | 0.226 | 0.253  | 0.325  | 0.329  |
0.347 | 0.267 | 100.0%  | 100   |
> | total                            | 2.517 | 3.137  | 3.718  | 3.749  |
3.797 | 3.135 | 100.0%  | 100   |
>
+----------------------------------+-------+--------+--------+--------+-------+-------+---------+-------+
> Load duration: 313.99292826652527
> Full duration: 315.29931354522705
>
> I ran same tests but with 1000 lports and below are the results with
> these patches
>
>
+-------------------------------------------------------------------------------------------------------+
> |                                         Response Times (sec)
                               |
>
+----------------------------------+-------+--------+--------+--------+-------+-------+---------+-------+
> | action                           | min   | median | 90%ile | 95%ile |
max   | avg   | success | count |
>
+----------------------------------+-------+--------+--------+--------+-------+-------+---------+-------+
> | ovn.create_or_update_address_set | 0.483 | 0.555  | 0.6    | 0.615  |
0.661 | 0.555 | 100.0%  | 1000  |
> | ovn.create_or_update_port_group  | 0.0   | 0.0    | 0.0    | 0.0    |
0.002 | 0.0   | 100.0%  | 1000  |
> | ovn.create_port_group_acls       | 0.973 | 1.101  | 1.176  | 1.195  |
1.271 | 1.097 | 50.0%   | 1000  |
> | ovn_network.bind_port            | 1.239 | 1.371  | 1.444  | 1.47   |
1.557 | 1.373 | 100.0%  | 1000  |
> | ovn.bind_ovs_vm                  | 0.409 | 0.482  | 0.522  | 0.541  |
0.597 | 0.486 | 100.0%  | 1000  |
> | ovn.bind_internal_vm             | 0.784 | 0.882  | 0.945  | 0.968  |
1.063 | 0.887 | 100.0%  | 1000  |
> | ovn_network.wait_port_ping       | 0.218 | 0.251  | 0.313  | 0.324  |
0.395 | 0.262 | 100.0%  | 1000  |
> | total                            | 2.465 | 3.251  | 3.956  | 4.016  |
4.226 | 3.274 | 100.0%  | 1000  |
>
+----------------------------------+-------+--------+--------+--------+-------+-------+---------+-------+
> Load duration: 3279.292845249176
> Full duration: 3280.6857619285583
>
>
> v11 -> v12
> ----
>  * Rebased the patches to latest master.
>  * Add a new patch p7 which changes the signature of some of
>    the static functions added recently in binding.c so that the out
>    param is the last param.
>
> v10 -> v11
> ----
>  * The firt 3 patches of v10 are now merged to master.
>  * The v11 has now 6 patches.
>  * Addressed the review comments from Dumitru.
>  * Added another new patch - which adds the util function
>    get_unique_lport_key() and use this function in places
>    where it was generating this key earlier.
>
> v9 -> v10
> ----
>  * Addressed review comments.
>  * Changed the patch 4 from adding a separate tracking variable in I-P
>    engine to just adding a new function - clear_tracked_data() as per
>    the review comments.
>  * Dropped the patch 9 - "ovn-controller: Handle sbrec_chassis changes
incrementally."
>    from the series. I couldn't address the review comments for this patch
in v9.
>    Hence dropped this patch for now. I'll work on it later and submit
>    the patch separately.
>  * Added a new test only patch - patch 9 in ovn-performance.at to test the
>    distributed logical router ports scenario and BFD.
>
> v8 -> v9
> ----
>  * Addressed the review comments from Dumitru and missed v7 comments from
>    Han.
>  * Any change to the 'local_lport_ids' while handling the OVS interface
and Port
>    binding changes in binding.c is now added to the tracked
>    datapaths which was not done earlier.
>  * Dropped the check to lflow_evaluate_pb_changes() in flow_output port
>    binding handler as it is not required.
>
> v7 -> v8
> ----
>  * Dropped the patch 4 as it is not needed, thanks to Han.
>  * Swapped the patches 5 and 6, which are now patch 4 and 5. The v8 patch
5 will now make
>    use of tracked data support of engine to clear the physical_flow
>    changes.
>  * Addressed comments from Han. Added comments in Patch 5 and Patch 6.
>
> v6 -> v7
> ----
>   * Addressed the review comments from Han in patch 1 and patch 2.
>
> v5 -> v6
> ----
>   * Addressed the review comments from Dumitru.
>   * Patch 1 and Patch 2 are significantly changed due to
>     further refactoring.
>
> v4 -> v5
> ----
>   * Applied patch 1 of v4 to master.
>   * Addressed the review comments from Han for patch 2.
>   * Rebased to latest master.
>
> v3 -> v4
> ----
>   * A small fix in patch 3 when binding the port for ovs interface
>     change.
>   * Rebased to latest master.
>
>
> v2 -> v3
> ----
>   * Added back the patch 5 and 6 and added 4 more patches. So totally
>     totally 10 patches in the series
>   * Handling the runtime data changes in flow computation.
>   * Handling sbrec_chassis changes.
>
> v1 -> v2
> ------
>   * Addressed the review comments from Han in patch 1, 2 and 3.
>   * Removed patch 5 and 6 from the series. As per the comments
>     from Han, we should handle runtime data changes in flow output
>     engine. But the patch 6 of the series had added a no-op
>     handler. So removed these 2 patches until those are addressed.
>
> RFC v2 -> v1
> ---------
>  * Fixed the 2 failing test cases.
>  * Updated the commit messages.
>
>
> RFC v1 -> RFC v2
> ---------
>  * Added 2 new patches
>  * Patch 5 (ofctrl_check_and_add_flow) was submitted earlier too and
>    the previous discussion is here -
https://patchwork.ozlabs.org/patch/1202417/
>  * Patch 6 handles I-P for ct_zone and OVS interface changes in
>    flow_output_run stage.
> Numan Siddique (6):
>   Refactor binding_run()to take two context argument - binding_ctx_in
>     and binding_ctx_out.
>   ovn-controller: Refactor binding.c
>   ovn-controller: I-P for port binding in runtime_data stage
>   ovn-controller: I-P for datapath binding
>   ofctrl_check_and_add_flow: Replace the actions of an existing flow if
>     actions have changed.
>   ovn-controller: I-P for ct zone  and OVN
>
>
> Numan Siddique (6):
>   I-P engine: Provide the option for an engine to clear tracked engine
>     data in every run.
>   ovn-controller: I-P for ct zone and OVS interface changes in flow
>     output stage.
>   ovn-controller: Handle runtime data changes in flow output engine
>   tests: Enhance ovn-performance testing by adding gw router port.
>   Add an util function get_unique_lport_key() for generating unique
>     lport key.
>   binding.c: Reorder out params of some of the static functions.
>
> Venkata Anil (1):
>   ovn-controller: Use the tracked runtime data changes for flow
>     calculation.
>
>  controller/binding.c        | 263 +++++++++++++++++--------
>  controller/binding.h        |  47 ++++-
>  controller/lflow.c          |  88 ++++++++-
>  controller/lflow.h          |  12 +-
>  controller/ovn-controller.c | 374 +++++++++++++++++++++++++++++++-----
>  controller/physical.c       |  51 +++++
>  controller/physical.h       |   5 +-
>  lib/inc-proc-eng.c          |   8 +
>  lib/inc-proc-eng.h          |   9 +
>  lib/ovn-util.h              |   8 +
>  tests/ovn-performance.at    | 136 +++++++++++--
>  11 files changed, 854 insertions(+), 147 deletions(-)
>
> --
> 2.26.2
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev


More information about the dev mailing list